Wie man Ubuntu 10.04 nach 'sudo chmod / 777' repariert / wiederherstellt

12

Siehe auch:
Warum ist "chmod -R 777 /" destruktiv?

Ich habe die Dateiberechtigungen im Stammverzeichnis /durch Ausführen rekursiv geändert sudo chmod -R / 777, und danach bootet mein System nicht mehr (es werden viele Fehler "Berechtigung verweigert" angezeigt).

Bitte helfen Sie.

Marcin
quelle
Vielleicht könntest du ein Live-Ubuntu-System verwenden. Installieren Sie die Pakete, die Sie auf Ihrem normalen System installiert haben, und schreiben Sie dann ein Skript, um sie zu "klonen"? Das ist nur eine Idee. Vielleicht kann jemand anderes sagen, ob dies etwas Gutes ist.
Darokthar
Gehen Sie folgendermaßen sorgfältig vor: Öffnen Sie im Wiederherstellungsmodus> Laufwerk einbinden> Interaktive Shell öffnen> CD in eingebundene Festplatte (für mich war es in / mnt / [Verzeichnis])> chmod -R 755 ./**> #cd ./etc/ SSH / #chmod 600 Moduli #chmod 644 ssh_config #chmod 644 ssh_host_dsa_key.pub #chmod 644 ssh_host_key.pub #chmod 644 ssh_host_rsa_key.pub #chmod 600 ssh_host_dsa_key #chmod 600 ssh_host_key #chmod 600 ssh_host_rsa_key #chmod 640 sshd_config
Smit Patel
Ich habe nicht genug Ruf, um die Antwort in StackExchange zu posten, aber ich wollte Ihnen helfen.
Smit Patel

Antworten:

23

Sie suchen nach einer verlorenen Sache. Speichern Sie die benötigten Daten und installieren Sie das Betriebssystem neu.

Blueben
quelle
Jep. Die Zeit, die Sie damit verbringen, wird verrückt sein und Sie werden nie sicher sein, dass Sie es genau richtig verstanden haben. Starten Sie sauber, stellen Sie Ihre Daten aus dem Backup wieder her.
ThatGraemeGuy
1
Dies ist einer dieser Rückschritte und daraus lernen Dinge. Ihre wichtigsten Bereiche sind der Inhalt Ihres Basisordners, die von Ihnen vorgenommenen Konfigurationsänderungen /etc, der /var/wwwInhalt des Webservers und die Datenbanken. Holen Sie sich eine andere Festplatte, aktivieren Sie sie als primäre und installieren Sie sie. So bleibt Ihr anderes Laufwerk als Backup erhalten, bis Sie es übertragen können.
Fiasko Labs
Ich habe das Gleiche getan (und ich weiß es besser) und einige der Ideen hier ausprobiert, aber es würde Wochen dauern, bis ich die Maschine wieder in einen anständigen Zustand versetzte. Versuchen Sie stattdessen, Ihre Daten zu sichern und Ubuntu neu zu installieren.
MikeHoss
4

Ich weiß, dass dpkg die Berechtigungen in den Datenbanken speichert und ich fand das folgende Skript google, das möglicherweise hilft.

Edit: Eigentlich habe ich mir das Skript kurz angesehen und es sieht so aus, als würde etwas Magie fehlen, die von PERMS zu MODE geht, z. B. gibt dpkg -c zum Beispiel "-rw-r - r--" aus, aber Sie möchten 0644, ich bin gerade auf der Arbeit, daher bin ich mir nicht sicher, ob ich die Zeit habe, die Konvertierung durchzuführen, aber ich kann später wiederkommen, wenn noch niemand hinzugekommen ist, um dieses Bit hinzuzufügen.

Es gibt hier ein Skript , das interessant aussieht

#!/bin/bash
# Restores file permissions for all files on a debian system for which .deb
# packages exist. 
#
# Author: Larry Kagan <me at larrykagan dot com>
# Since 2007-02-20

ARCHIVE_DIR=/var/cache/apt/archives/
PACKAGES=`ls $ARCHIVE_DIR`
cd /

function changePerms()
{
    CHOWN="/bin/chown"
    CHMOD="/bin/chmod"
    PERMS=$1
    OWN=`echo $2 | /usr/bin/tr '/' ':'`
    PATHNAME=$3

    echo -e "$CHOWN $OWN $PATHNAME"
    #`$CHOWN $OWN $PATHNAME`
    #`$CHMOD $MODE $PATHNAME`

}

for PACKAGE in $PACKAGES;
do
    echo -e "Getting information for $PACKAGE\n"
    FILES=`/usr/bin/dpkg -c "${ARCHIVE_DIR}${PACKAGE}"`

    for FILE in "$FILES";
    do
        FILE_DETAILS=`echo "$FILE" | awk '{print $1"\t"$2"\t"$6}'`
        changePerms $FILE_DETAILS
    done
done
James
quelle
geht es auch um die 04555 dateien?
Ring Ø
4

Es ist möglich , aus einer solchen Situation herauszukommen , ohne das System neu zu installieren. Nun, genauer gesagt, Sie können ein neues System entweder von einem USB-Stick oder in einer Virutal Box (oder so) ausführen, wenn Sie über ein Dual-Boot-System verfügen.

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 Ausführen des Systems für einen USB-Stick (oder vielleicht eine CD / DVD) sollte dasselbe tun.

MPOINT = / mount / ubuntu

Zuerst habe ich meine Dateisysteme wie folgt gemountet (vergessen Sie nicht, die Mount-Punkte zu erstellen): mount / dev / ubuntu / root $ MPOINT mount / dev / ubuntu / home $ MPOINT / home

Dann habe ich den folgenden Befehl ausgeführt (mein Problem war nur in einigen - kritischen - Verzeichnissen), 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 -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. 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 müssen Sie hier darauf achten, dass UID und GID auf beiden Systemen gleich sind, aber für die systembezogenen Benutzer und Gruppen sollte dies kein Problem sein.

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

EDIT: zur Unterstützung von Links lautet der kombinierte Befehl:

/usr/bin/find / -exec /usr/bin/stat --format="[ ! -L {} ] && /bin/chmod %a %n" {}

Skyhawk
quelle
4

Ich habe das Skript von oben geändert und es sieht so aus:

#!/bin/bash
# Restores file permissions for all files on a debian system for which .deb
# packages exist. 
#
# Author: Larry Kagan <me at larrykagan dot com>
# Since 2007-02-20

ARCHIVE_DIR=/var/cache/apt/archives/
PACKAGES=`ls $ARCHIVE_DIR`
cd /

function changePerms() {
    CHOWN="/bin/chown"
    CHMOD="/bin/chmod"
    PERMS=`echo $1 | sed -e 's/--x/1/g' -e 's/-w-/2/g' -e 's/-wx/3/g' -e 's/r--/4/g'  -e 's/r-x/5/g' -e 's/rw-/6/g' -e 's/rwx/7/g' -e 's/---/0/g'`
    PERMS=`echo ${PERMS:1}`
    OWN=`echo $2 | /usr/bin/tr '/' '.'`
    PATHNAME=$3
    PATHNAME=`echo ${PATHNAME:1}`

#    echo -e "CHMOD: $CHMOD $PERMS $PATHNAME"    

#    result=`$CHOWN $OWN $PATHNAME`
#    if [ $? -ne 0 ]; then
#   echo -e $result
#        exit 123;
#    fi

    echo -e "CHOWN: $CHMOD $PERMS $PATHNAME"
    result=`$CHMOD $PERMS $PATHNAME`
    if [ $? -ne 0 ]; then
    echo -e $result
    fi
}

for PACKAGE in $PACKAGES;
do
    if [ -d $PACKAGE ]; then
    continue;
    fi
    echo -e "Getting information for $PACKAGE\n"
    FILES=`/usr/bin/dpkg -c "${ARCHIVE_DIR}${PACKAGE}"`

    for FILE in "$FILES";
    do
        #FILE_DETAILS=`echo "$FILE" | awk '{print $1"\t"$2"\t"$6}'`
    echo "$FILE" | awk '{print $1"\t"$2"\t"$6}' | while read line;
        do
            changePerms $line
        done
        #changePerms $FILE_DETAILS
    done
done
user102453
quelle
3

Wenn Sie mit blueben einverstanden sind, ist eine Neuinstallation möglicherweise schneller als die Analyse, welche Datei / welches Verzeichnis welche Berechtigung benötigt. Wenn eine Neuinstallation jedoch nicht möglich ist, finden Sie hier eine Idee:

  1. Installieren Sie eine Ubuntu-Standardinstallation auf einem anderen Computer
  2. Führen Sie diesen Befehl aus, um die Berechtigungen aller Dateien / Verzeichnisse auf dem System abzurufen: find / | xargs stat -c 'chmod %a "'%n'"' > /tmp/chmod.sh
  3. Kopieren Sie die Datei chmod.shmit den falschen Berechtigungen auf den Computer
  4. Führen Sie diese Datei aus chmod +x /tmp/chmod.sh && /bin/bash /tmp/chmod.sh
  5. Hoffe, dass die meisten Dinge funktionieren (nicht alles wird funktionieren, glaube ich)
weh
quelle
2

ERRATUM für meinen Beitrag als Benutzer user100740: zur Unterstützung von Links lautet der kombinierte Befehl:

/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
jlovi
quelle
2

Wenn Sie immer noch starten können /usr/sbin/synaptic, kann dies häufig behoben werden.

Sortieren Sie die Pakete nach Status (installierte Pakete oben), wählen Sie alle installierten Pakete aus, klicken Sie mit der rechten Maustaste und wählen Sie Neu installieren. Wenden Sie dann dpkgan, um alle Dateien für diese Pakete erneut zu extrahieren. (Sie verlieren alle lokalen Änderungen (aber keine Änderungen an der Konfigurationsdatei).)

Es kann jedoch sein, dass nicht alles repariert wird.
Die andere Sache ist, wenn Sie in gehen /var/cache, können Sie dpkg -x <package name> /für jedes installierte Paket aufrufen, und dann anrufen dpkg --reconfigure -a. Wenn Sie Ubuntu verwenden, können Sie auch ein dist-Upgrade durchführen, das häufig viele Fehler behebt (vorausgesetzt, Sie sind noch nicht in der neuesten Version). Wenn ich versuche, einen Fehler wie diesen zu beheben, probiere ich im Allgemeinen diese einfachen Korrekturen aus. Wenn sie nicht einfach wieder funktionieren, ist es Zeit für eine Neuinstallation.

Perkins
quelle
-2

Booten von einer Live-CD. dann starte shell, dann sudo -s. Dann chmod 777 / *, dann chmod 600 / etc / passwd. Kernel gerät in Panik, wenn Init fehlschlägt, was passiert, wenn / lib / init-Skripte nicht ausführbar sind. Booten Sie für Lilo Linux 1 im Einzelbenutzermodus und führen Sie das obige Skript von user102453 aus. Dadurch wird der Systemstart aufgefordert. Muss noch X zum Laufen bringen.

Wiley
quelle
3
Wow, das ist eine ziemlich schreckliche Idee, die du da hast.
HopelessN00b
-3

Das Setzen der Erlaubnis von / auf 755 hat bei mir funktioniert.

Also vorher mit prüfen

root@ubuntu:/# cd /
root@ubuntu:/# ls -ld

Die Berechtigungen sollten "drwxr-xr-x" (755) sein.

Stefan
quelle
1
Hiermit wird der rekursive Teil der Frage nicht angesprochen.
Kasperd
Nein, und es hilft auch beim 4755 2755 und 6755 nicht. Wenn es nur / usr war (was häufig der Fall ist), können Sie rekursiv ls -al ein ähnliches System verwenden und die 755 ausschließen. Dies kann eine Liste von weniger als 1000 Dateien hinterlassen, die manuell bearbeitet werden können. Natürlich sind src und Header nicht wirklich wichtig.
McKenzm