Sous quel utilisateur NGinx et PHP doivent-ils fonctionner?

15

Les autorisations sont quelque chose qui m'a dérouté pendant un certain temps avec Linux. Donc, à la minute, mes instances NGinx et PHP-FPM fonctionnent avec l'utilisateur et le groupe:

www-data

Est-ce standard? Je rencontre des problèmes lorsque je rencontre le téléchargement de fichiers.

Exemple , un fichier serait téléchargé à la fois avec l'utilisateur et le groupe www-data. Maintenant, en raison de la façon dont j'ai défini les autorisations (0440) dans mon application Web, je ne peux pas me connecter via ssh avec mon compte normal pour télécharger ces fichiers. Cela ne peut pas être changé.

Je pensais à changer mes instances nginx et php pour conserver le groupe, mais changez-les pour qu'elles s'exécutent sous mon nom d'utilisateur.

Quelle est la bonne façon de gérer les autorisations ici? Merci.

Le développeur Pixel
la source

Réponses:

12

Voici comment cela fonctionne: lorsque vous vous connectez via FTP / SSH et téléchargez des fichiers, ils sont créés avec vos autorisations. Votre webroot est probablement accessible en écriture (0777), ce qui n'est pas sûr - chaque utilisateur du système peut y écrire quelque chose. PHP s'exécute avec différents privilèges utilisateur (ils sont spécifiés dans la configuration PHP-FPM, pas dans la configuration nginx), et comme le répertoire est accessible en écriture, l'utilisateur PHP (www-data) peut également y écrire. Mais le propriétaire de ce fichier est www-data, pas votre compte. Il s'agit de 2 comptes distincts au niveau d'autorisation du système de fichiers.

Je vous suggère de créer un utilisateur dédié avec le moins de privilèges possible, qui posséderait le répertoire webroot et serait utilisé pour le téléchargement FTP / SSH ET exécuterait php. Vous devriez changer la configuration PHP-FPM, dans la section des travailleurs il y a une entrée utilisateur et une configuration NGINX, afin que vous puissiez rendre les fichiers de votre site Web illisibles et plus sécurisés.

Ne pas exécuter PHP avec un utilisateur privilégié (capacités sudo, privilèges d'écriture hors site docroot), ce qui pourrait compromettre la sécurité du serveur.

Kristaps
la source
1
Bonne réponse, j'ai créé un nouvel utilisateur, de nouveaux dossiers, tout copié, appliqué les autorisations correctes et chrooté l'utilisateur. Fonctionne bien. Merci.
The Pixel Developer
Puis-je simplement ajouter mon utilisateur FTP au www-datagroupe au lieu de créer l'utilisateur dédié? Est-ce que cela résout le problème de @ ThePixelDeveloper? Merci.
Vladyslav Turak
2

L' www-datautilisateur et le groupe sont assez standard. Il peut s'agir de www ou de web sur d'autres systèmes mais l'idée est la même: exécutez les services web avec un compte dédié. Ainsi, lorsque votre serveur web est compromis, l'attaquant ne pourra accéder qu'aux fichiers auxquels ce compte a été accordé.

Si un utilisateur doit gérer les services Web, vous devez ajouter l'utilisateur au groupe approprié (www-data) ou lui permettre de su (ou sudo) à l'utilisateur concerné (toujours www-data).

Benoit
la source
10
La raison de www-data est qu'il s'agit d'un compte avec zéro privilèges - il ne peut pas écrire dans n'importe quel fichier sur l'ensemble du système de fichiers, pas lire autre chose que des fichiers lisibles par le monde entier. Auparavant, vous utilisiez l'utilisateur intégré "personne" pour y parvenir. Cependant, en créant des "www-data", vous avez la possibilité de permettre à cet utilisateur d'écrire dans certains fichiers, sans avoir à rendre ces fichiers accessibles en écriture (ce qui est mauvais). Le principe de base, selon lequel "www-data" est aussi privilégié que "personne" de toutes les autres manières, est vrai.
thomasrutter
@thomasrutter, d'après ce que je comprends, je devrais exécuter Nginx et PHP-FPM sous l'utilisateur www-data qui est dans le groupe www-data. Si je veux cet utilisateur de pouvoir readet writeà un certain dossier, je dois lui donner des autorisations appropriées. Dans la plupart des cas, il s'agit du dossier racine Web /var/www/htmlet de l' 755autorisation. Ai-je raison? Merci!
Vladyslav Turak
1

J'essaie d'éviter que nginx / php exécute des scripts appartenant à www-data pour des raisons de sécurité.

Ed Bloom
la source
9
pourriez-vous nous en dire plus?
Karussell