Es ist möglich , aus dieser chaotischen Situation zurückzukommen.
Ich habe wieder die gleiche Art von Problem ausgeführt (ein Fehler in einem Skript, das ich geschrieben habe) und es behoben, aber Sie müssen einen Experten um Hilfe bitten. Sei sehr vorsichtig!
Erstens war meine Situation einfacher zu lösen, da ich ein Dual-Boot-System hatte (Ubuntu und meine alte Fedora-Installation), aber das Betriebssystem von einer CD / DVD oder einem USB-Stick auszuführen, sollte dasselbe tun.
MPOINT=/mount/ubuntu
Zuerst habe ich meine Dateisysteme wie folgt gemountet (vergessen Sie nicht, die Mountpunkte zu erstellen):
mount /dev/ubuntu/root $MPOINT
mount /dev/ubuntu/home $MPOINT/home
Dann habe ich den folgenden Befehl ausgeführt (mein Problem betraf nur einige wenige - kritische - Verzeichnisse), um die Berechtigungen vom laufenden System auf das unordentliche zu kopieren (in meinem Fall habe ich sogar ein Ubuntu-System in Virtual Box unter Fedora installiert und habe dort die Berechtigungen):
find /etc /usr /bin /sbin -exec stat --format "chmod %a \"${MPOINT}%n\"" {} \; > /tmp/restoreperms.sh
Und dann habe ich das Skript restoreperms.sh ausgeführt.
Ich konnte wieder mit Ubuntu booten.
Der Inhalt von restoreperms.sh wird ungefähr so aussehen:
(...)
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
(...)
Ich habe es nicht getestet, aber es muss auch für Eigentümer und Eigentümergruppen funktionieren. So etwas wie:
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
(...)
Natürlich muss hier darauf geachtet werden, dass UID und GID auf beiden Systemen gleich sind, aber für die systembezogenen Benutzer und Gruppen sollte dies kein Problem sein.
Bearbeiten:
Durch das Festlegen des Besitzers werden auch die SGID- und SUID-Flags ungültig gemacht , was seltsame Probleme verursacht (Sie können beispielsweise sudo nur ausführen, wenn die Berechtigung 4755 lautet). Sie müssen und sollten nur Berechtigungen AFTER Besitzer setzen. SPEICHERE die vollständigen Dateiberechtigungsinformationen zusammen mit den Besitzerinformationen.
Rk:
- Wichtig dabei ist, dass eine Installationsdiskette mit der von Ihnen verwendeten Version synchronisiert bleibt oder zumindest mit der aktuellen Ubuntu-Version funktioniert.
Jetzt habe ich diese Befehle in einem Cronjob, der jeden Tag (möglicherweise Wochen) ausgeführt wird, um diese Informationen zu speichern. Das wird die Lösung beim nächsten Mal einfacher machen, aber so wie ich es jetzt habe, wird es natürlich nie wieder vorkommen. ;-) Etwas wie das:
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
Der richtige (kombinierte) Befehl ist eher so etwas wie:
`/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`
Beachten Sie, dass zusätzliche Sorgfalt erforderlich sein kann, um Klammern in Dateinamen (z. B. unter Gebietsschemas) zu berücksichtigen, und dass chown möglicherweise die von chmod gesetzten Bits setuid und setgid stillschweigend deaktiviert. In letzterem Fall, der beispielsweise / bin / su und / usr / bin / sudo zum Erliegen bringt, müssen Sie möglicherweise die Reihenfolge der obigen exec-Klauseln vertauschen.