Comment revenir à la commande chown?

17

Si je cours:

sudo chown -R user:user /

Puis-je revenir à ce qu'il était avant de le lancer?

fronthem
la source
1
Juste comme un avertissement pour les autres: La commande suivante sudo chown -R user:user ..pourrait avoir le même effet que celle mentionnée ici si vous êtes un niveau en dessous de la racine du système de fichiers. N'essayez pas quelque chose comme ça.
passerby51

Réponses:

22

En bref: non.

Vous devrez restaurer à partir d'une sauvegarde. (Certains outils de sauvegarde peuvent avoir des options pour restaurer uniquement les autorisations, d'autres peuvent répertorier les fichiers sauvegardés avec leurs autorisations et vous pouvez les utiliser pour réparer votre système.)

Si vous n'avez pas de sauvegarde, vous devrez corriger tout cela manuellement.

Tapis
la source
Après sudo chown -R user:user /, il est probable que le système soit si mal arrosé que vous ne pouvez pas restaurer à partir d'une sauvegarde.
Keith Thompson
1
Si vous ne pouvez pas récupérer les parties importantes de vos données utilisateur dans ce scénario à partir de votre sauvegarde, votre "sauvegarde" n'en est vraiment pas une. Si vous ne pouvez pas récupérer l'intégralité du système d'exploitation, vous devriez toujours être en mesure de réinstaller la base, puis de restaurer à partir de la sauvegarde. Auront très probablement besoin d'un CD en direct ou d'un démarrage réseau dans ce cas, mais si votre stratégie de sauvegarde ne peut pas récupérer à partir de cela, ce n'est pas vraiment assez bon.
Mat
Mon commentaire précédent n'était probablement pas clair. Un système fonctionnel peut être restauré à l'aide du système lui-même. Une fois que vous avez fait ce qui est chowndécrit, il est probable que vous ne pourrez rien faire avant d'installer le système entier à partir de zéro; le système n'a même pas de rootcompte et sudone fonctionnera pas. Cela vaut probablement la peine d'essayer de démarrer sur un shell mono-utilisateur, mais ne vous attendez pas à ce que cela fonctionne.
Keith Thompson
1
Le compte root n'a pas disparu (c'est toujours l'UID 0); il ne possède tout simplement plus de fichiers, mais root contourne de toute façon les vérifications des autorisations normales. La question de savoir si sudoou même sucontinuera de fonctionner lorsque tous ses fichiers pertinents appartiennent à userest une question différente (probablement pas parce que, entre autres choses, le bit SUID sur l'exe aura disparu).
jw013
6

Uniquement si vous connaissez l'utilisateur et le groupe appartenant à chaque fichier et répertoire de votre /répertoire.

Même alors, vous avez déjà détrôné la propriété des fichiers système critiques qui doivent appartenir à root, y compris la sudocommande. Vous auriez probablement besoin de monter le disque dur sur un autre système - et sachez que l'autre système n'aura probablement pas les mêmes mappages UID et GID que celui que vous venez de clobber.

Faites une copie de l'intégralité du disque dur si vous le pouvez, puis réinstallez votre système d'exploitation. Une fois que vous avez fait cela, vous pouvez essayer de copier des fichiers sur le système nouvellement effacé et de restaurer leurs propriétés. Vous pouvez probablement supposer (mais pas à 100% de manière fiable) que tout ce qui se trouve sous /home/fooappartient à l'utilisateur fooet que chaque fichier de spoule de messagerie sous /var/mailappartient à l'utilisateur approprié (si vous avez du courrier électronique sur le système). Vous pouvez probablement vous en sortir sans restaurer la plupart des fichiers qui ne sont pas sous /home, en fonction de ce que vous avez fait avec le système.

Et puis commencez à cultiver l'habitude de revérifier toute commande sous laquelle vous exécutez sudo avant de frapper Enter.

Keith Thompson
la source
6

Si votre distribution est basée sur RPM, vous pouvez restaurer SEULEMENT les fichiers installés par les packages rpm.

Pour restaurer toutes les autorisations de package:

rpm --setperms -a

Pour restaurer tous les propriétaires de packages (utilisateur / groupe):

rpm --setugids -a

Si -a ne s'exécute pas, vous pouvez exécuter une boucle bash:

Pour les autorisations:

for x in $(rpm -qa); do rpm --setperms $x; done

Pour le propriétaire:

for x in $(rpm -qa); do rpm --setugids $x; done

Extrait de: http://www.sysadmit.com/2016/10/linux-restaurar-permisos-de-un-paquete.html

Egon Spengler
la source
1

Vous pouvez stocker les versions actuelles, puis les analyser pour revenir en arrière en utilisant l'option -v.

chown -R nobody:nobody -v /tmp/some_file > /tmp/chown.log
cat /tmp/chown.log

Le contenu serait:

changed ownership of `/tmp/some_file' from me:users to nobody:nobody

En utilisant votre langage de script préféré et des expressions régulières, vous pouvez exécuter le processus douloureux de les rétablir (si vous le devez).

Je vous recommande fortement de ne pas faire de chown récursif sur / car vous exposerez / etc / shadow ou tout autre fichier important.

SailorCire
la source
0

si la distribution est basée sur rpm:

rpm -a --setperms
shcherbak
la source