Pourquoi ne devrait pas / var / www avoir chmod 777

67

Lors du développement d'une page sur un hôte local, je reçois parfois une erreur "Autorisation refusée" que je peux résoudre en exécutant chmod -R 777 /var/www. Cependant, les gens me disent que c'est une mauvaise idée pour des raisons de sécurité.

Pourquoi ne devrait pas /var/wwwavoir un chmod de 777?

Luis Alvarado
la source
Je voudrais recommander ce fil sur @ serverfault.com. Il fournit un exemple de configuration pour apache2 et les permissions. serverfault.com/q/6895/57036 PS Je ne peux pas commenter, je dois donc l'ajouter en tant que réponse.
MystaMax

Réponses:

81

777 est une mauvaise permission en général et je vais vous montrer pourquoi.

En dépit de ce à quoi cela peut ressembler dans un casino ou à Las Vegas, 777 ne signifie pas jackpot pour vous. Au contraire, jackpot pour ceux qui souhaitent modifier vos fichiers. 777 (et son cousin laid 666) permettent de lire et écrire des autorisations (et dans le cas de 777, Execute) à d' autres . Vous pouvez en apprendre plus sur le fonctionnement des autorisations de fichiers , mais en résumé, il existe trois groupes d'autorisations: propriétaire, groupe et autre . En définissant l'autorisation à 6 ou 7 ( rw-ou rwx) pour d' autres vous donner tout utilisateur la possibilité d'éditer et de manipuler les fichiers et dossiers. Comme vous pouvez l’imaginer, c’est généralement mauvais pour la sécurité.

Voici mon exemple:

marco@desktop:~/Projects/AskUbuntu/20105$ cd ..
marco@desktop:~/Projects/AskUbuntu$ chmod 0777 20105
marco@desktop:~/Projects/AskUbuntu$ cd 20105/
marco@desktop:~/Projects/AskUbuntu/20105$ ls -lah
total 8.0K
drwxrwxrwx 2 marco marco 4.0K 2011-01-04 20:32 .
drwxr-xr-x 3 marco marco 4.0K 2011-01-04 20:32 ..
marco@desktop:~/Projects/AskUbuntu/20105$ touch test
marco@desktop:~/Projects/AskUbuntu/20105$ chmod 0666 test 

Jusqu'à présent, j'ai créé un dossier et créé un fichier avec de "mauvaises" autorisations (777 et 666). Maintenant, je vais basculer vers un autre utilisateur et essayer de manipuler ces fichiers.

marco@desktop:~/Projects/AskUbuntu/20105$ sudo su - malicious
malicious@desktop:~$ cd /home/marco/Projects/AskUbuntu/20105
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ ls
test
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ ls -lah
total 8.0K
drwxrwxrwx 2 marco marco 4.0K 2011-01-04 20:33 .
drwxr-xr-x 3 marco marco 4.0K 2011-01-04 20:32 ..
-rw-rw-rw- 1 marco marco    0 2011-01-04 20:33 test
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ touch bad
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ echo "OVERWRITE" > test 
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ cat test 
OVERWRITE

En tant que cet utilisateur "malveillant", j'ai pu placer des fichiers dans le répertoire et injecter du texte dans des fichiers existants. Considérant ci-dessous, dans un répertoire avec 755 et des fichiers avec 644, je suis capable de voir les fichiers et les répertoires à l'intérieur, mais je ne peux pas éditer les fichiers ni en créer de nouveaux:

malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ cd /home/marco/Projects
malicious@desktop:/home/marco/Projects$ touch hey
touch: cannot touch `hey': Permission denied

Pour les autorisations Apache, vous souhaiterez vous en tenir à 0755 et 0644 (AKA umask 022) pour les dossiers et les fichiers, respectivement. Cela vous permet, en tant que propriétaire des fichiers, de les éditer et de les manipuler tout en donnant à Apache le minimum d'accès nécessaire pour fonctionner.

Marco Ceppi
la source
13
Je suis désolé pour le langage, mais c'est une réponse impitoyable. Merci Marco.
Luis Alvarado
Que faire si vous avez uniquement créé des utilisateurs pour les personnes autorisées à gérer le dossier / var / www librement? J'utilise des machines virtuelles dédiées pour chaque serveur Web que je lance et je me demande s'il est toujours vrai que vous devriez être si prudent.
UrkoM
1
@ UrkoM Vous ne pouvez jamais être trop prudent. Si vous souhaitez que les personnes accèdent aux mêmes fichiers, vous pouvez modifier les autorisations du groupe en 6/7 (0664/0775) et ajouter chaque utilisateur à ce groupe. Bien que cette configuration (et celle que j'ai décrite dans ma réponse) ne remplisse pas tous les critères, je dirais que 90% du temps, 0755/0644 correspond aux autorisations que vous souhaitez utiliser. Si vous n'avez que des systèmes "un utilisateur", le risque d'en avoir d' autres avec des autorisations d'écriture ne constitue pas un risque aussi important.
Marco Ceppi
4
@UrkoM L'autre élément à prendre en compte est qu'il existe de nombreux "utilisateurs" qui ne représentent pas de vraies personnes mais qui existent afin que certains services puissent fonctionner avec des capacités réduites (principalement pour des raisons de sécurité, mais aussi pour réduire les dommages pouvant être causés d'un bug de stabilité). Voir le contenu /etc/passwdet vous verrez comme les utilisateurs mail, newset nobody. Même s'il est correct que tous les vrais utilisateurs humains de votre système puissent modifier le contenu de cela /var/www, cela ne signifie pas que vous souhaitiez que tous les processus soient exécutés comme ces utilisateurs «artificiels» puissent le faire.
Eliah Kagan
1) La réponse la plus simple possible. N'explique pas comment Apache ou Nginx peuvent manipuler des dossiers ou des fichiers. Apache ou Nginx sont des serveurs, de sorte que les applications, ce ne sont pas vos utilisateurs "malveillants", elles ne peuvent pas taper ls -lah, touch badni aucune autre commande. Comment peuvent-ils manipuler des dossiers et des fichiers? 2) l'héritage. Vous n'avez couvert aucun héritage entre les dossiers et les fichiers qu'ils contiennent. Il y a au moins 2-3 étape avant un fichier: /var, /var/www, /var/www/project. Quelles autorisations utilisateur / groupe devraient /varavoir? Quelles autorisations utilisateur / groupe devraient /var/wwwavoir? Etc. Comment coopèrent-ils?
Vert
15

Avoir des autorisations de 777 ne vous permettra pas de vous pirater, mais si quelqu'un obtient un pied-à-terre, il peut être utilisé pour augmenter les autorisations et obtenir le contrôle total de votre ordinateur. Le pire est que vos autorisations utilisent "7", ce qui signifie que les autorisations de lecture, d’écriture et d’exécution sont exécutées.

Supposons qu'un pirate informatique veuille prendre le contrôle de votre ordinateur. Il se peut qu'il se connecte à votre ordinateur à l'aide d'un navigateur Web, en se connectant à http://votreordinateur.exemple.com:80/. Si vous avez des pages disponibles lui permettant de télécharger des images, il peut renommer un fichier exécutable avec ".jpg" et le télécharger sur votre serveur. Il navigue maintenant vers ce fichier dans son navigateur Web et l'exécute, car Linux ne se soucie pas de l'extension, il voit seulement qu'il s'agit d'un fichier exécutable. Cela ne lui rapportera peut-être pas grand-chose, mais comme il fonctionnait du tout, il savait que cela fonctionnait en tant qu'utilisateur Apache. Il télécharge ensuite une version modifiée qui éditera les fichiers de configuration d’apache, ce qui lui donnera encore plus d’accès - supposons qu’apache affiche le contenu de / etc / passwd. Il peut ensuite utiliser ces informations pour voir quels utilisateurs existent sur le système. Il peut ensuite se connecter à l'aide de ssh et essayer les mots de passe courants pour se connecter en tant qu'utilisateur. Si cela ne fonctionne pas, il utilisera une attaque par force brute complète. S'il entre en tant qu'utilisateur avec un accès sudo,

Maintenant, vous pouvez dire que ce n'est pas probable, ou que ce n'est pas ainsi qu'un vrai pirate informatique fonctionnerait. C'est vrai, mais le fait est qu'en définissant les fichiers sur chmod 777, vous avez ouvert une faille de sécurité qu'un pirate informatique peut utiliser à sa guise.

Si vous suivez plutôt le principe du moindre privilège , alors ce trou ne se produira pas et votre système est d'autant plus difficile à pirater. Même s'il est plus difficile de faire les choses correctement, vous devriez quand même tout faire pour le faire.

ImaginaryRobots
la source
+1 pour "toehold" et "escalate". Décrit bien le concept.
Kari Kääriäinen
3
Pouvez-vous s'il vous plaît expliquer comment un fichier déguisé en jpg peut être exécuté sur un serveur?
Anurag Peshne