Est-il possible dans nginx de configurer un utilisateur différent par hôte virtuel?
Quelque chose comme
server {
user myprojectuser myprojectgroup;
...
}
Non, car toutes les strophes de serveur d'une configuration nginx sont servies à partir du même ensemble de processus de travail. De plus, du point de vue de la sécurité, il vaut mieux l' exécuter comme ça, car cela signifie que le contenu est automatiquement inscriptible par le serveur Web (en l'absence de stupidités comme a chmod -R 0777
), de sorte que s'il y a une vulnérabilité dans nginx, aucun du contenu est à risque.
www-data
et des perms0710
lorsque vous configurez le vhost (car cela nécessite root pour configurer nginx, ce n'est pas un problème que votre automatisation définisse également les autorisations nécessaires). Ensuite, le contenu de la docroot doit simplement êtreo+x
destiné aux répertoires eto+r
aux fichiers.www-data
, chaque utilisateur qui peut servir un script PHP ou un processus cgi-bin peut accéder à n'importe quel fichier accessible à l'www-data
utilisateur. Cela ne semble pas évident pour quiconque stocke des mots de passe de base de données dansconfig.php.inc
ou similaire sur une machine partagée.peter
etjohn
. Ils hébergent leurs pages Web en~/public_html
. En l'absence d'une approche différente non mentionnée par aucune des personnes discutant de cela ci-dessus, un script .php a les mêmes autorisations que le serveur Web car il s'exécute également souswww-data
. Cela signifie que, tout comme le serveur Web et l'interpréteur PHP, il peut lire tout autre script .php.Oui. Il est possible et recommandé pour plus de sécurité (voir pourquoi ci-dessous).
Étant donné que vous utilisez PHP-FPM (vous l'êtes probablement, comme c'est le plus courant), vous pouvez créer un spool, appartenant à un utilisateur différent, pour chaque domaine.
1. Créez des bobines:
Ajoutez les bobines
/etc/php/7.0/fpm/pool.d/www.conf
ou créez un nouveau.conf
fichier pour chaque nouvelle bobine.Bobine # 1 (myuser1):
Bobine # 2 (myuser2):
PS: Gardez votre listen.owner / listen.group au même utilisateur nginx (généralement www-data ).
2. Attribuez chaque spoule à son bloc serveur (hôte virtuel pour les utilisateurs apache):
Hôte 1:
Hôte 2:
Redémarrez les services FPM et NGINX
Essai:
Créez un fichier pinfo.php (ou n'importe quel nom) qui montrera l'utilisateur du processus actuel:
Ou créez le fichier pinfo.php via bash:
Ouvrez ensuite " http: //.../pinfo.php " sur votre navigateur.
Pourquoi utiliser plusieurs utilisateurs (raisons de sécurité):
Si vous exécutez tous vos sites Web sous le même utilisateur ( www-data ), un appel PHP à system () / passthru () / exec () aura accès à tous les sites Web! NGINX ne vous protégera pas contre cela. Le PHP n'est qu'un exemple, mais tout langage de serveur Web populaire a des appels similaires. En tant que hacker, vous pouvez " ls .. " pour naviguer sur tous les sites Web et " cp / echo / mv " pour écrire votre propre code dans n'importe quel fichier (y compris les fichiers d'un autre site Web). Même si tous les sites Web du serveur appartiennent à la même personne (par exemple, vous), il est conseillé d'exécuter chaque site Web avec un utilisateur différent, car cela empêchera d'éventuels pirates / virus (par exemple, les virus Wordpress) d'accéder à vos autres sites Web.
la source
En réponse au commentaire d'Ivan ci-dessus et qui semble applicable au PO. Deux choses:
La racine du document d'application serait quelque chose comme
/blah/peterWeb/html
et/blah/johnWeb/html
. NGINX et Apache2 ne permettraient pas à l'un de lire attentivement ou de fonctionner dans l'autre répertoire, même s'ils exécutent tous les deux www-data en groupe.Le fait de placer chaque arborescence de répertoires sous leur propre autorisation utilisateur permettrait à chaque utilisateur de ssh / se connecter à un système UNIX et de garder leurs répertoires privés pour chacun - il suffit de ne pas placer chaque utilisateur dans le groupe www-data. Si vous êtes d'accord, alors votre phrase:
pourrait être écrit avec plus de précision:
EDIT 1: Devant résoudre certains problèmes d'administration du serveur, j'ai approfondi ce sujet. Je ne savais pas à quel point les informations d'Ivan étaient exactes! Si vous avez l'intention de donner aux utilisateurs la possibilité de télécharger et d'exécuter des scripts sur une configuration d'hébergement partagé, alors prenez garde. Voici une approche . Chapeau à Ivan pour m'être assuré d'avoir bien compris cette vulnérabilité.
la source
www-data
. Si Johnny peut créer un script et l'exécuter souswww-data
(ce qui sur des configurations naïves, il peut), alors le script de Johnny peut lire les scripts de Peter et les renvoyer à Johnny. Cela n'a rien à voir avec les groupes. La bonne solution est d'avoir suPHP (s'il est naïvement configuré, mauvais, car un code mal écrit met en danger tous les fichiers de cet utilisateur), ou une prison, ou un utilisateur Web supplémentaire dédié par utilisateur.