J'utilise FreeBSD 10.2 avec une compilation personnalisée d'Apache 2.4.17 avec php-fpm. Le pool par défaut ( [www]
(presque une installation php-fpm standard) exécuté sur l'utilisateur/le groupe nobody
/ nobody
. Apache fonctionne sur l'utilisateur/groupe daemon
/ daemon
. Il fonctionne bien en se connectant à un socket avec quelques sites différents qui fonctionnent tous dans le pool de stock. Il s'agit de sites à faible priorité utilisant PHP pour des choses comme l'affichage de l'heure.
À long terme, je veux mettre au point une meilleure séparation des privilèges. J'ai créé un pool pour une installation roundcube sur un serveur virtuel distinct appartenant à l'utilisateur rcuser
groupe rcuser
(en gros, un compte FreeBSD Shell ordinaire). Par habitude, je gare les vhosts web dans le compte /usr/vhosts/
donc ce site est destiné à /usr/vhosts/webmail/
avec l'application elle-même stockée dans /usr/vhosts/webmail/htdocs/
. L'arbre entier du webmail appartient à l'utilisateur et au groupe rcuser. Les répertoires de cette arborescence ont tous des permissions de 750 et les fichiers de 640. Le pool ressemble à ceci :
[rcuser]
user = rcuser
group = rcuser
listen = /var/run/php5-fpm-rcuser.sock
listen.owner = rcuser
listen.group = rcuser
listen.mode = 0666
pm = dynamic
pm.max_children = 5
pm.min_spare_servers = 1
pm.start_servers = 2
pm.max_spare_servers = 3
Pour qu'Apache puisse y accéder, j'ai créé un ACL sur chaque fichier et répertoire donnant daemon
un accès équivalent à /usr/vhosts/webmail/
et ses sous-répertoires. En gros, cela signifiait faire find /usr/vhosts/webmail/ -type d -exec setfacl -m user:daemon:rwx {} \;
y find webmail/ -type f -exec setfacl -m user:daemon:rw {} \;
Je pensais que ça marcherait, mais ça n'a pas marché, me donnant une erreur de fichier non trouvé quand j'ai essayé de charger Roundcube.
La prochaine chose que j'ai essayée est de donner à la other
permission bit accès en lecture aux fichiers et rx accès aux répertoires. Cela a fonctionné. Roundcube a bien fonctionné, mais cela signifie évidemment que d'autres utilisateurs peuvent lire les fichiers qu'il contient et trouver des informations sensibles comme les mots de passe MySQL. Ce n'est pas vraiment ce que je veux.
Donc, la prochaine chose que j'ai faite était find /usr/vhosts/webmail/ -exec chmod o-rwx {} \;
de supprimer les permissions libérales mais de garder l'original rcuser
les permissions et daemon
ACLs intactes. pour les autres utilisateurs et essayer de trouver l'origine du problème. Après avoir cherché un peu, je me suis souvenu que le premier pool que j'ai créé fonctionne en tant qu'utilisateur nobody
et a fait find /usr/vhosts/webmail/ -exec -exec setfacl -m user:nobody:r-x {} \;
. Cela a fonctionné. Pour une raison quelconque, php-fpm veut que l'utilisateur nobody
pour avoir un accès en lecture et en exécution dans les répertoires de ce second pool.
Donc, ps -maux
révèle que php-fpm exécute ce pool sous le bon utilisateur rcuser
. Ce n'est pas le plus gros problème du monde pour moi, mais je ne suis pas vraiment sûr des implications en matière de sécurité que cela pourrait avoir lorsque je commencerai à déployer cette configuration php-fpm sur les sites de mes clients. De plus, une ACL supplémentaire et apparemment étrangère dont il faut se préoccuper est une gêne.
Y a-t-il quelque chose que je puisse faire pour que l'utilisateur nobody
pas besoin de cet ACL ?