Arquivo não pode ser criado em um diretório com a mesma permissão que outro diretório onde está

0

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
    
por Rainer Rillke 29.06.2016 / 03:18

0 respostas