1 votes

Problème de permissions : pourquoi l'utilisateur nobody est-il nécessaire dans mon deuxième pool php-fpm ?

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 ?

0voto

Bolwerk Points 201

Oh, bien, je suis content d'avoir écrit tout ça parce que je pense que ça m'a inspiré une réponse. Le pool par défaut utilisait TCP et je voulais que mon nouveau pool utilise des sockets de domaine UNIX. J'ai donc eu un petit problème de syntaxe. J'ai accidentellement inclus quelques conneries supplémentaires dans la ligne de configuration du proxy dans Apache.

ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/var/run/php5-fpm-rcuser.sock|fcgi://localhost:9000/usr/vhosts/webmail/htdocs/$1"

aurait dû être

ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/var/run/php5-fpm-rcuser.sock|fcgi://localhost/usr/vhosts/webmail/htdocs/"

Il se connectait au premier pool, alors que le second fonctionnait correctement. C'est :9000 et la désignation du port $1 la partie au bout de la ligne devait aller.

Alors, j'ai réparé Apache et j'ai couru :

find webmail/ -exec setfacl -b {} \; pour effacer les permissions de l'ACL et ensuite exécuter find webmail/ -type d -exec setfacl -m user:daemon:rwx {} \;; find webmail/ -type f -exec setfacl -m user:daemon:rw {} \; pour les mettre comme je le voulais depuis le début.

La configuration semble pouvoir être intéressante, j'espère donc que cela aidera un jour quelqu'un à se battre avec les autorisations des serveurs virtuels Apache.

Mon objectif à long terme est de ne plus avoir besoin de faire fonctionner un serveur FTPS ou d'utiliser php_admin_value open_basedir

0 votes

J'ai fini par l'emprisonner. Comme cela peut se retrouver dans les résultats de recherche de Google, j'ai pensé mentionner que j'ai dû m'assurer que toutes les connexions dans Roundcube devaient être modifiées pour utiliser TCP à la suite de la mise en jail.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X