Il est possible de revenir d'une situation aussi désordonnée , sans réinstaller le système. Eh bien, plus exactement, exécutez un nouveau système à partir d'une clé USB ou dans une boîte Virutal (ou ainsi) si vous avez un système à double démarrage.
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 pour une clé USB (ou peut-être un CD / DVD) 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):
trouver / etc / usr / bin -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:
trouver / 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.
Rk:
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. 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
EDIT: pour supporter les liens, la commande combinée est:
/usr/bin/find / -exec /usr/bin/stat --format="[ ! -L {} ] && /bin/chmod %a %n" {}