Lors du développement d'une page sur un hôte local, il arrive parfois que l'erreur "Autorisation refusée" soit résolue 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 /var/www
n'aurait-il pas un chmod de 777?
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 vilain cousin 666) autorisent les autorisations de lecture et d’écriture (et dans le cas de 777, Execute) sur autre . Vous pouvez en apprendre davantage sur fonctionnement des autorisations sur les fichiers , mais en résumé, il existe trois groupes d’autorisations: propriétaire, groupe et autre . En définissant l'autorisation sur 6 ou 7 (rw-
ou rwx
) pour autre , vous donnez à tout utilisateur la possibilité de modifier et de manipuler ces 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 devrez vous en tenir aux codes 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.
En gros, avoir des autorisations de 777 ne vous permettra pas de vous pirater, mais si quelqu'un obtient le contrôle, il peut être utilisé pour augmenter les autorisations et obtenir le contrôle complet de votre ordinateur. Le pire, c’est que vos autorisations utilisent "7" - c’est-à-dire que les autorisations de lecture, d’écriture et d’exécution .
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://votrecomputer.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 modifiera les fichiers de configuration d’Apache, ce qui lui donnera encore plus d’accès - supposons qu’Apache produise 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, alors tout le système lui appartient.
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 produit 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.