web-dev-qa-db-fra.com

Pourquoi "chmod -R 777 /" est-il destructeur?

Il s'agit d'une question canonique sur l'autorisation des fichiers et pourquoi 777 est "destructrice".

Je ne demande pas comment résoudre ce problème, car il existe déjà une tonne de références sur Server Fault (réinstallez le système d'exploitation). Pourquoi fait-il quelque chose de destructeur?

Si vous avez déjà exécuté cette commande, vous détruisez presque immédiatement votre système d'exploitation. Je ne comprends pas pourquoi la suppression des restrictions a un impact sur les processus existants. Par exemple, si je n'ai pas accès en lecture à quelque chose et qu'après une brève erreur de frappe dans le terminal, j'ai maintenant un accès correct ... pourquoi cela provoque-t-il la rupture de Linux?

258
samwise

Tout d'abord, une minuscule terminologie nitpick: chmod ne supprime pas les autorisations . Il [~ # ~] change [~ # ~] eux.


Maintenant, la viande de la question - Le mode 777 signifie "N'importe qui peut lire, écrire ou exécuter ce fichier" - Vous avez donné la permission à quiconque de faire (efficacement) ce qu'il veut.

Maintenant, pourquoi est-ce mauvais?

  1. Vous venez de laisser tout le monde lire/modifier chaque fichier de votre système.
    • Dites adieu à la sécurité des mots de passe (n'importe qui peut lire le fichier fantôme et déchiffrer vos mots de passe, mais pourquoi s'en préoccuper? CHANGEZ simplement le mot de passe! C'est beaucoup plus facile!).
    • Adieu la sécurité de vos binaires (quelqu'un peut simplement écrire un nouveau programme login qui le laisse entrer à chaque fois).
    • Dites adieu à vos fichiers: un utilisateur a mal acheminé rm -r / et c'est fini. On a dit à l'OS de les laisser faire ce qu'ils voulaient!
  2. Vous avez énervé tous les programmes qui vérifient les autorisations sur les fichiers avant de commencer.
    Sudo, sendmail, et une multitude d'autres ne démarre tout simplement plus. Ils examineront les autorisations des fichiers clés, verront qu'ils ne sont pas ce qu'ils sont censés être et repousseront un message d'erreur.
    De même ssh se cassera horriblement (les fichiers clés doivent avoir des autorisations spécifiques, sinon ils sont "non sécurisés" et par défaut SSH refusera de les utiliser.)
  3. Vous avez effacé les bits setuid/setgid sur les programmes qui les avaient.
    La mode 777 est en fait 0777. Parmi les éléments de ce premier chiffre figurent les bits setuid et setgid.
    La plupart des programmes setuid/setgid ont ce bit défini car ils doivent s'exécuter avec certains privilèges. Ils sont cassés maintenant.
  4. Vous avez cassé /tmp et /var/tmp L'autre chose dans ce premier chiffre octal qui a obtenu zéro est le sticky bit - Celui qui protège les fichiers dans /tmp (et /var/tmp) d'être supprimé par des personnes qui n'en sont pas propriétaires.
    Il existe (malheureusement) de nombreux scripts mal comportés qui "nettoient" en faisant rm -r /tmp/*, et sans le bit collant réglé sur /tmp vous pouvez embrasser tous les fichiers de ce répertoire au revoir.
    La disparition de fichiers de travail peut vraiment perturber certains programmes mal écrits ...
  5. Vous avez causé des ravages dans /dev/proc et systèmes de fichiers similaires
    Il s'agit davantage d'un problème sur les anciens systèmes Unix où /dev est un véritable système de fichiers, et les éléments qu'il contient sont des fichiers spéciaux créés avec mknod, car la modification des autorisations sera préservée lors des redémarrages, mais sur tout système dont les autorisations sur votre appareil peuvent changer, cela peut entraîner des problèmes importants, à partir de la des risques de sécurité évidents (tout le monde peut lire tous les ATS) pour les causes potentielles moins évidentes d'une panique du noyau.
    Credit to @Tonny for pointing out this possibility
  6. Les sockets et les tuyaux peuvent se casser ou avoir d'autres problèmes Les sockets et les tuyaux peuvent se casser complètement ou être exposés à une injection malveillante du fait qu'ils sont rendus accessibles en écriture.
    Credit to @Tonny for pointing out this possibility
  7. Vous avez créé tous les fichiers de votre système exécutable
    Beaucoup de gens ont . dans leur variable d'environnement PATH (vous ne devriez pas!) - Cela pourrait provoquer une surprise désagréable car maintenant n'importe qui peut déposer un fichier nommé comme une commande (dites make ou ls, et essayez de vous faire exécuter leur code malveillant.
    Credit to @RichHomolka for pointing out this possibility
  8. Sur certains systèmes, chmod réinitialisera les listes de contrôle d'accès (ACL)
    Cela signifie que vous pourriez avoir à recréer toutes vos listes de contrôle d'accès en plus de fixer des autorisations partout (et c'est un exemple réel de la commande destructrice).
    Credit to @JamesYoungman for pointing out this possibility

Les parties du système qui fonctionnent déjà continueront-elles de fonctionner? Probablement, pendant un certain temps au moins.
.

348
voretaq7

Une chose importante est qu'il existe de nombreux outils comme ssh/Sudo qui vérifient les autorisations du système de fichiers pour les fichiers de configuration clés. Si les autorisations sont incorrectes, ces outils sont conçus pour échouer, car cela indiquerait un problème de sécurité grave. Sur mon système de test Debian et peut-être sur d'autres, la possibilité de se connecter échoue, probablement parce que le binaire de connexion ou quelque chose dans PAM a des vérifications d'autorisation.

Ce n'est donc pas vraiment que le système est détruit - c'est que de nombreux outils sont conçus pour échouer immédiatement lorsque les autorisations sont incorrectes.

Si vous redémarrez un système après avoir effectué une chmod 777 -R / il démarrera et vous pourrez démarrer des processus qui n'ont pas de contrôles d'autorisation explicites. Donc, le système n'est pas vraiment mort, juste quelque peu inutilisable by-design.

102
Zoredache