web-dev-qa-db-fra.com

Pourquoi chmod 777 -R / laisse-t-il le système inutilisable?

J'accorde seulement la permission à tous de faire quoi que ce soit, mais pourquoi le système se bloque-t-il en donnant des autorisations uniquement? Je ne fais que modifier l'autorisation sans changer les fichiers.

52
Brij Raj Kishore

Il y a plusieurs raisons.

En plus des autorisations habituelles lecture/écriture/exécution, il existe d’autres bits que les autorisations de fichiers contiennent. Plus particulièrement, setuid et setgid. Lorsqu'un programme est défini avec l'un de ces bits d'autorisation, il obtient "l'UID effectif" et/ou le "GID effectif" du propriétaire du programme plutôt que de l'utilisateur qui l'a exécuté. Cela permet aux programmes de s'exécuter avec plus d'autorisations que l'utilisateur qui les a exécutés. Il est utilisé par de nombreux utilitaires système cruciaux, dont su et Sudo. Votre commande chmod efface ces bits, laissant les utilitaires inutilisables.

Deuxièmement, certains programmes (notamment ssh) vérifient l'intégrité des autorisations de fichiers et refusent d'utiliser des fichiers avec des autorisations qu'ils considèrent comme non sécurisées. Cela réduit le risque que des administrateurs insouciants laissent accidentellement des failles de sécurité, mais rend encore plus pénible la gestion des autorisations de fichiers effacées.

103
Peter Green

Une réponse courte.

Le système Linux nécessite des autorisations spécifiques pour certains programmes tels que Sudo, etc.

Lorsque vous exécutez chmod 777 -R /, vous supprimez toutes les autorisations et les remplacez par 777. Cela rend le système inutilisable à moins que vous ne restauriez manuellement toutes les autorisations.

En pratique, il est beaucoup plus rapide et facile à réinstaller.

Le problème est que de nombreux programmes système sont conçus de manière à ne pas démarrer s'ils "n'aiment pas" les autorisations. Ceci est fait pour des raisons de sécurité.

Je pense qu'il est plus important d'expliquer comment gérer la conception du système en parallèle que d'expliquer pourquoi chaque programme ne fonctionne pas avec de mauvaises permissons.

Si vous souhaitez réellement que tous les utilisateurs disposent d'autorisations illimitées dans Ubuntu, vous pouvez ajouter tous les utilisateurs au groupe Sudo au lieu de modifier les autorisations de fichier et de répertoire. Cela aura le même effet, mais ne ruinera pas le système.

Une autre façon (très mauvaise) consiste à activer le compte root et à permettre à tout le monde de se connecter en tant que root.

40
Pilot6

chmod a des nuances subtiles.

chmod 0777 se comporte différemment de chmod u+rwx,g+rwx,o+rwx en ce que les setuid et setgid sont mis à zéro par le premier et conservés par ce dernier.

C'est pourquoi le système est devenu inutilisable. Vous avez supprimé setuid nécessaire de quelques programmes.

Voici une liste des fichiers setuid ou setgid sur mon ordinateur portable Linux Fedora 23:

[root@Fedora23lnvr61]# find / -perm /g+s,u+s
/var/log/journal
/var/log/journal/75e870eb13c74fbf97556a32ecf80ea2
/opt/google/chrome/chrome-sandbox
/usr/bin/rogue
/usr/bin/gnuchess
/usr/bin/locate
/usr/bin/umount
/usr/bin/lbrickbuster2
/usr/bin/gpasswd
/usr/bin/crontab
/usr/bin/fusermount
/usr/bin/su
/usr/bin/at
/usr/bin/newuidmap
/usr/bin/Sudo
/usr/bin/pkexec
/usr/bin/mount
/usr/bin/chsh
/usr/bin/newgrp
/usr/bin/passwd
/usr/bin/chage
/usr/bin/chfn
/usr/bin/write
/usr/bin/newgidmap
/usr/sbin/mount.nfs
/usr/sbin/lockdev
/usr/sbin/netreport
/usr/sbin/userhelper
/usr/sbin/usernetctl
/usr/sbin/unix_chkpwd
/usr/sbin/pam_timestamp_check
/usr/libexec/kde4/kdesud
/usr/libexec/kde4/kpac_dhcp_helper
/usr/libexec/dbus-1/dbus-daemon-launch-helper
/usr/libexec/qemu-bridge-helper
/usr/libexec/openssh/ssh-keysign
/usr/libexec/spice-gtk-x86_64/spice-client-glib-usb-acl-helper
/usr/libexec/utempter/utempter
/usr/libexec/abrt-action-install-debuginfo-to-abrt-cache
/usr/libexec/Xorg.wrap
/usr/lib/polkit-1/polkit-agent-helper-1
/usr/lib64/vte-2.90/gnome-pty-helper
/usr/lib64/virtualbox/VBoxSDL
/usr/lib64/virtualbox/VirtualBox
/usr/lib64/virtualbox/VBoxNetNAT
/usr/lib64/virtualbox/VBoxHeadless
/usr/lib64/virtualbox/VBoxNetDHCP
/usr/lib64/virtualbox/VBoxNetAdpCtl
/usr/lib64/virtualbox/VBoxVolInfo
/usr/lib64/vte/gnome-pty-helper
[root@Fedora23lnvr61]# 

J'ai supprimé des dizaines d'entrées de bruit dans les caches et les journaux.

32
wallyk

En plus des autres réponses: vous avez également supprimé le "sticky bit" de /tmp (qui possède généralement les autorisations 1777), ce qui pourrait entraîner d'autres problèmes inattendus, car les programmes pourraient écrire ou supprimer les fichiers temporaires des autres utilisateurs.

Le sticky bit est une autorisation spéciale qui, tout en permettant à quiconque de créer des fichiers dans /tmp, n'autorise que la personne qui l'a créé à le déplacer ou le supprimer.

15
Ben XO