Tentar criar um arquivo em um diretório funciona, enquanto em um diretório irmão com proprietários e permissão copiados, os mesmos erros são eliminados com Permission denied
. ( touch
como root funciona nos dois diretórios.)
Isso acontece em um contêiner docker com gosu . Existe um usuário tomcat
que faz parte do grupo tomcat
. O diretório tc
foi criado por mim, o diretório work
fazia parte da imagem do docker na qual estou construindo.
Os dois diretórios:
drwxr-xr-x 2 tomcat tomcat 4096 Jun 29 01:13 tc
drwxr-xr-x 2 tomcat tomcat 4096 Jun 29 01:13 work
Agora a estranheza acontece:
tomcat@XXX:~/tc$ touch foo.lki
tomcat@XXX:~/tc$ ls
foo.bar foo.lki
tomcat@XXX:~/tc$ exit
exit
root@XXX:/usr/local/tomcat# chown --reference=tc work
root@XXX:/usr/local/tomcat# chmod --reference=tc work
[I verified the permission for the work directory is the same as for the tc one]
root@XXX:/usr/local/tomcat# gosu "tomcat:tomcat" /bin/bash
tomcat@XXX:~$ cd work
tomcat@XXX:~/work$ touch foo.something
touch: cannot touch ‘foo.something’: Permission denied
O que provavelmente está provocando esse comportamento e como depurá-lo e evitá-lo?
EDITAR:
Teste de pontos de montagem, ACLs estendidos e atributos de arquivo
root@XXX:/usr/local/tomcat# mount | grep /usr/local/tomcat/work
root@XXX:/usr/local/tomcat# getfacl /usr/local/tomcat/work
getfacl: Removing leading '/' from absolute path names
# file: usr/local/tomcat/work
# owner: tomcat
# group: tomcat
user::rwx
group::r-x
other::r-x
root@XXX:/usr/local/tomcat# lsattr -d /usr/local/tomcat/work
lsattr: Inappropriate ioctl for device While reading flags on /usr/local/tomcat/work
SELinux e AppArmor
root@XXX:/usr/local/tomcat# sestatus
bash: sestatus: command not found
root@XXX:/usr/local/tomcat# apparmor_status
bash: apparmor_status: command not found
Arquivo do Docker que pode ser usado para reproduzir o problema:
FROM tomcat:9.0-jre8
ENV RUN_USER tomcat
ENV RUN_GROUP tomcat
# Add a tomcat user
RUN groupadd -r ${RUN_GROUP} && useradd -g ${RUN_GROUP} -d ${CATALINA_HOME} -s /bin/bash ${RUN_USER}
RUN chown -R tomcat:tomcat $CATALINA_HOME
RUN ls -lah $CATALINA_HOME
RUN su -c 'touch $CATALINA_HOME/include/this.still.works' tomcat
RUN su -c 'touch $CATALINA_HOME/work/this.will.fail' tomcat
Tags directory permissions docker aufs