J'ai récemment tapé la commande
sudo chmod 777 -R /
après cela, certaines choses comme
sudo -i
ne fonctionnent pas normalement. Je me demande donc s'il existe un moyen de réinitialiser les autorisations de dossier à leur état d'origine?
J'ai récemment tapé la commande
sudo chmod 777 -R /
après cela, certaines choses comme
sudo -i
ne fonctionnent pas normalement. Je me demande donc s'il existe un moyen de réinitialiser les autorisations de dossier à leur état d'origine?
Réponses:
Il est possible de revenir de cette situation désordonnée.
J'ai exécuté à nouveau le même type sur le problème (un bug dans un script que j'écrivais) et l'ai résolu, mais vous devez demander l'aide d'un expert. Soyez très prudent!
Tout d'abord, ma situation était plus facile à résoudre car j'avais un système à double démarrage (Ubuntu et mon ancienne installation Fedora), mais exécuter le système d'exploitation à partir d'un CD / DVD ou d'une clé USB devrait faire la même chose.
MPOINT=/mount/ubuntu
J'ai d'abord monté mes systèmes de fichiers comme ceci (n'oubliez pas de créer les points de montage):
mount /dev/ubuntu/root $MPOINT
mount /dev/ubuntu/home $MPOINT/home
Ensuite, j'ai exécuté la commande suivante (mon problème n'était que dans quelques répertoires - critiques -) pour copier les autorisations du système en cours d'exécution sur le système en désordre (en fait, dans mon cas, j'ai installé un système Ubuntu dans Virtual Box sous fedora et y a obtenu les autorisations):
find /etc /usr /bin /sbin -exec stat --format "chmod %a \"${MPOINT}%n\"" {} \; > /tmp/restoreperms.sh
Et puis j'ai exécuté le script restoreperms.sh.
J'ai pu à nouveau démarrer sur Ubuntu.
Le contenu de restoreperms.sh sera quelque chose comme:
(...)
chmod 755 /mount/ubuntu//etc/ppp
chmod 755 /mount/ubuntu//etc/ppp/ipv6-up
chmod 2750 /mount/ubuntu//etc/ppp/peers
chmod 640 /mount/ubuntu//etc/ppp/peers/provider
chmod 755 /mount/ubuntu//etc/ppp/ipv6-up.d
chmod 777 /mount/ubuntu//etc/ppp/resolv.conf
(...)
Je ne l'ai pas testé, mais cela doit aussi fonctionner pour les propriétaires et les groupes de propriétaires. Quelque chose comme:
find /etc /usr /bin -exec stat --format 'chown %U:%G ${MPOINT}%n' {} \; > /tmp/restoreperms.sh^
(...)
chown root:root /mount/ubuntu//etc/obex-data-server/imaging_capabilities.xml
chown root:root /mount/ubuntu//etc/obex-data-server/capability.xml
chown root:dip /mount/ubuntu//etc/ppp
chown root:root /mount/ubuntu//etc/ppp/ipv6-up
chown root:dip /mount/ubuntu//etc/ppp/peers
chown root:dip /mount/ubuntu//etc/ppp/peers/provider
chown root:root /mount/ubuntu//etc/ppp/ipv6-up.d
chown root:root /mount/ubuntu//etc/ppp/resolv.conf
(...)
Bien sûr, vous devez faire attention ici, que l'UID et le GID sont les mêmes sur les deux systèmes, mais pour les utilisateurs et les groupes liés au système, cela ne devrait pas être un problème.
Éditer:
En outre, la définition du propriétaire annulera les indicateurs SGID et SUID , ce qui provoque des problèmes étranges (par exemple, vous ne pourrez pas exécuter sudo sauf si l'autorisation est 4755). Vous devez et ne devez définir des autorisations qu'APRÈS avoir défini les propriétaires. CONSERVEZ les informations complètes sur l'autorisation de fichier ainsi que les informations sur le propriétaire.
Rk:
Maintenant, j'ai ces commandes dans un cronjob, en cours d'exécution tous les jours (peut-être des semaines) afin de conserver ces informations. Cela facilitera la solution la prochaine fois, mais, bien sûr, comme je l'ai maintenant, cela ne se reproduira plus. ;-) Quelque chose comme ça:
0 12 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chmod %a %n" {} \; |/bin/bzip2 -c > /tmp/restore_chmod.$(/bin/date +%w).sh.bz2
0 13 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chown %U:%G %n" {} \; |/bin/bzip2 -c > /tmp/restore_chown.$(/bin/date +%w).sh.bz2
La bonne commande (combinée) ressemble plus à:
`/usr/bin/find / -exec /usr/bin/stat --format="[ ! -L {} ] && /bin/chmod %a %n" {} \; -exec /usr/bin/stat --format="/bin/chown -h %U:%G %n" {} \; |/bin/bzip2 -c > /tmp/restore_fileperms.$(/bin/date +%w).sh.bz2`
Notez que des précautions supplémentaires peuvent être nécessaires pour prendre en compte les parenthèses dans les noms de fichiers (sous les locales, par exemple) et que chown peut annuler silencieusement les bits setuid et setgid définis par chmod. Dans ce dernier cas, qui casserait, disons, / bin / su et / usr / bin / sudo, vous devrez peut-être échanger l'ordre des clauses exec ci-dessus.
Après avoir récupéré sudo ou sélectionné le mode de récupération au démarrage
Il est possible de récupérer un système entier en utilisant des débits qui vérifient l'intégrité des fichiers et les autorisations.
à partir de la page de manuel:
apt-get install --reinstall $(dpkg -S $(debsums -c) | cut -d : -f 1 | sort -u)
Réinstalle les packages avec des fichiers modifiés
ou limité à un chemin spécifique par exemple /usr
::
apt-get install --reinstall $(dpkg -S $(debsums -c | grep -e ^/usr ) | cut -d : -f 1 | sort -u)
ou limité à un ensemble de chemins multiples, par exemple: /sbin /etc /var
apt-get install --reinstall $(dpkg -S $(debsums -c | grep -e ^/etc -e ^/sbin -e ^/var ) | cut -d : -f 1 | sort -u)
chmod a-x /bin/ping
et je n'ai debsums -c
pas signalé ce fichier.
Regardez toujours ce que vous exécutez en tant que sudo.
Ce fil explique que vous pouvez redéfinir manuellement certaines autorisations, et un script y aide, mais c'est toujours un gros travail. Suivez plutôt les conseils de la bande de roulement pour enregistrer vos packages installés (marquages) et réinstaller le système d'exploitation, puis appliquez vos marquages de packages enregistrés pour récupérer vos applications.
Pour autant que je sache, seuls les packages et RPM System V proposent une commande pour réparer les autorisations de fichiers. Sur System V (Solaris) c'est pkgchk, avec RPM c'est rpm --setperms.
Malheureusement, aucune commande de ce type ne semble exister pour les paquets Debian / Ubuntu - mais je peux me tromper ici.
Mais même avec l'aide de ces commandes, ce n'est pas une tâche triviale de ramener votre système à un état sain, et en le réparant, vous pouvez facilement causer de nouveaux dommages à votre système - si vous ne faites pas attention.
Autre que Joseph a dit, vous n'êtes pas le premier, et vous ne serez pas le dernier à entrer dans une telle commande. Mais l'idée seule, de changer les autorisations de fichiers en 777 sur un système Unix, est une forte indication que vous n'êtes pas très expérimenté avec ce type de système. Le mieux que vous puissiez faire dans cette situation est de sauvegarder à nouveau ce dont vous aurez besoin (répertoires personnels, fichiers de configuration, fichiers courrier?) Et d'essayer une nouvelle installation.
Et vous devez être très, très prudent lorsque vous restaurez vos fichiers de sauvegarde - endommagés -.
Bonne chance!
PS: Je me demande juste quel genre de problème tu voulais résoudre?
Wow, tu l'as tué. C'est mort! Essayez de vous connecter et d'utiliser la machine en tant que root (puisque vous l'avez activé), puis changez l'appartenance au groupe de root en utilisateurs. Cela peut ou peut ne pas fonctionner car je ne l'ai jamais essayé auparavant mais ça vaut le coup.
Vous ne pouvez pas annuler une chmod
opération; du moins pas dans le sens d'un retour à un cadre précédent, ce que demande cette situation. On peut soutenir que vous pouvez annuler une chmod
opération, en chmod
replaçant chaque fichier et répertoire dans leur mode d'origine - mais ils ne sont pas tous identiques; la détermination des modes d'origine est délicate (comme expliqué dans les autres réponses).