J'ai une configuration CentOS7/Apache multi-utilisateurs (userdir) avec SELinux activé et la structure de répertoire suivante :
/home/USER/public_html/resources/css
L'ensemble /home/USER
et tout ce qui se trouve en dessous est la propriété de USER. Tous les fichiers et répertoires ont un contexte SELinux de httpd_user_content_t
à l'exception du répertoire susmentionné que j'ai configuré pour httpd_user_rw_content_t
. Le serveur apache fonctionne sous l'utilisateur apache et l'utilisateur apache est membre du groupe USER. Tout ce qui se trouve sous /home/USER
a les permissions 0775 (groupe en écriture). Un de mes scripts utilise la méthode de php file_put_contents
pour créer un fichier nommé test_fpc.txt
im /home/USER/public_html/resources/css
mais seulement si le répertoire appartient à apache:apache
le file_put_contents
réussir. Si le répertoire appartient à USER:USER
el file_put_contents
échoue avec failed to open stream: Permission denied
avertissement. Le journal d'audit indique :
type=SYSCALL msg=audit(1483602823.639:155208): arch=c000003e syscall=2 success=no exit=-13 a0=7f0e5d9f1478 a1=241 a2=1b6 a3=73656372756f7365 items=2 ppid=855 pid=992 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="php-fpm" exe="/usr/sbin/php-fpm" subj=system_u:system_r:httpd_t:s0 key="apache_user_access"
type=CWD msg=audit(1483602823.639:155208): cwd="/home/USER/public_html"
type=PATH msg=audit(1483602823.639:155208): item=0 name="/home/USER/public_html/resources/css/" inode=65290545 dev=08:12 mode=040775 ouid=1002 ogid=1002 rdev=00:00 obj=system_u:object_r:httpd_user_rw_content_t:s0 objtype=PARENT
type=PATH msg=audit(1483602823.639:155208): item=1 name="/home/USER/public_html/resources/css/test_fpc.txt" objtype=CREATE
Lorsque je me connecte avec l'utilisateur apache avec sudo -u apache bash
et exécute echo "test" > /home/USER/public_html/resources/css/test_bash.txt
cela fonctionne et la sortie du journal d'audit est :
type=SYSCALL msg=audit(1483602552.156:155207): arch=c000003e syscall=2 success=yes exit=3 a0=f607c0 a1=241 a2=1b6 a3=0 items=2 ppid=13539 pid=13540 auid=0 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=pts0 ses=207 comm="bash" exe="/usr/bin/bash" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="apache_user_access"
type=CWD msg=audit(1483602552.156:155207): cwd="/home/USER/public_html"
type=PATH msg=audit(1483602552.156:155207): item=0 name="/home/USER/public_html/resources/css/" inode=65290545 dev=08:12 mode=040775 ouid=1002 ogid=1002 rdev=00:00 obj=system_u:object_r:httpd_user_rw_content_t:s0 objtype=PARENT
type=PATH msg=audit(1483602552.156:155207): item=1 name="test_bash.txt" inode=65273889 dev=08:12 mode=0100644 ouid=48 ogid=48 rdev=00:00 obj=unconfined_u:object_r:httpd_user_rw_content_t:s0 objtype=CREATE
J'ai également essayé de définir le contexte de la fonction /home/USER/public_html/resources/css
pour httpd_sys_rw_content_t
mais cela ne fait aucune différence.
Je n'ai pas essayé de régler setsebool -P httpd_unified 1
car j'aimerais vraiment conserver la configuration SELinux restrictive actuelle et j'ai l'impression que SELinux n'est pas le vrai problème ici. Quelle pourrait être la cause du fait que le répertoire accessible en écriture par le groupe n'est pas accessible en écriture par l'utilisateur apache qui EST membre du groupe USER ?