Comment réinitialiser les autorisations de dossier à leurs valeurs par défaut dans Ubuntu?

19

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?

Braiam
la source
Je ne pense pas que Linux se souvienne des paramètres d'autorisation précédents. Essayez de créer un nouveau fichier et regardez quels paramètres d'autorisation il obtient.
thecoshman
Oh attends, je vois ce que tu as fait là-bas. Il s'agit probablement d'une situation de réinstallation. Sauvegardez simplement vos données, notez quelles applications vous avez installées. Amusez-vous, pourquoi ne pas essayer 10.4! (meilleur nom de tous les temps ... ce que cette radio signifie?)
thecoshman
Je vous mets au défi de trouver une personne qui n'a pas fait exactement cela: D c'est une situation très délicate. vous pouvez le réparer, essayez la réponse de jlovi mais cela prendra du temps et des efforts et cela deviendra frustrant. il suffit de réinstaller et d'en finir. Et n'utilisez jamais sudo chmod à moins de savoir ce que vous faites.
Jack Mayerz

Réponses:

17

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:

  1. Une chose importante pour cela est de garder un disque d'installation synchronisé avec la version que vous utilisez, ou au moins de travailler avec la version actuelle d'ubuntu.
  2. 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.

jlovi
la source
juste une excellente réponse. Je l'ai pointé dans Ask Ubuntu
Private
Juste une solution parfaite pour moi!
2

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)
Ivan Buttinoni
la source
debsums vérifie-t-il vraiment les permissions? J'ai essayé chmod a-x /bin/pinget je n'ai debsums -cpas signalé ce fichier.
reox
0

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.

inverser
la source
0

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?

kdo
la source
0

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.

slhck
la source
0

Vous ne pouvez pas annuler une chmodopé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 chmodopération, en chmodreplaç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).

Svisstack
la source