Jak naprawić / przywrócić system Ubuntu 10.04 po „sudo chmod / 777”

12

Zobacz także:
Dlaczego „chmod -R 777 /” jest destrukcyjny?

Zmieniłem rekurencyjnie uprawnienia do plików w katalogu głównym /poprzez wykonanie sudo chmod -R / 777, a potem mój system nie będzie rozruchowy (Dostaję dużo „Permission denied” błędy).

Proszę pomóż.

Marcin
źródło
Może mógłbyś użyć systemu Ubuntu na żywo. Czy zainstalować pakiety zainstalowane w normalnym systemie, a następnie napisać skrypt, aby je „sklonować”? To tylko pomysł. Może ktoś inny może powiedzieć, czy to jest dobre.
Darokthar
Postępuj dokładnie według tego: Otwórz w trybie odzyskiwania> Zamontuj dysk> Otwórz interaktywną powłokę> cd na zamontowany dysk twardy (dla mnie to było w / mnt / [katalog])> chmod -R 755 ./**> #cd ./etc/ ssh / #chmod 600 moduły #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
Nie mam wystarczającej reputacji, aby opublikować odpowiedź w StackExchange, ale chciałem ci pomóc.
Smit Patel,

Odpowiedzi:

23

Patrzysz na przegraną sprawę. Zapisz potrzebne dane i ponownie zainstaluj system operacyjny.

blueben
źródło
Tak. Ilość czasu spędzonego na robieniu tego będzie szalona i nigdy nie będziesz mieć pewności, że masz rację. Rozpocznij czyszczenie, przywróć dane z kopii zapasowej.
ThatGraemeGuy
1
Jest to jeden z tych kroków i wyciągnij z niego wnioski. Najważniejsze obszary to zawartość folderu domowego, dokonane zmiany konfiguracji /etc, /var/wwwzawartość serwera WWW i bazy danych. Weź inny dysk twardy, włącz go jako podstawowy i zainstaluj. Pozwala to zachować drugi dysk jako kopię zapasową, dopóki nie będzie można go przenieść.
Fiasco Labs,
Zrobiłem to samo (i tak, wiem lepiej) i wypróbowałem kilka pomysłów tutaj, ale zajęłoby mi kilka tygodni, aby przywrócić maszynę do przyzwoitego stanu. Zamiast tego spróbuj wykonać kopię zapasową danych i ponownie zainstalować Ubuntu.
MikeHoss
5

Wiem, że dpkg przechowuje uprawnienia w bazach danych i znalazłem następujący skrypt google, który może pomóc.

Edycja: faktycznie rzuciłem okiem na skrypt i wygląda na to, że brakuje mu trochę magii, która przechodzi z PERMS do MODE, np. Dpkg -c daje na przykład „-rw-r - r--”, ale chcesz 0644, jestem teraz w pracy, więc nie jestem pewien, czy mam czas na konwersję w tej chwili, ale mogę wrócić później, jeśli nikt inny nie wskoczył, aby dodać ten fragment.

Jest tutaj skrypt , który wygląda interesująco

#!/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
źródło
czy dotyczy to również plików 04555?
Pierścień Ø
4

Z takiej nieuporządkowanej sytuacji można wrócić bez ponownej instalacji systemu. Dokładniej, uruchamiając nowy system z klucza USB lub w Virutal Box (lub tak), jeśli masz system podwójnego rozruchu.

Uruchomiłem ponownie ten sam rodzaj problemu (jakiś błąd w pisanym przeze mnie skrypcie) i rozwiązałem go, ale musisz poprosić o pomoc eksperta. Bądź bardzo ostrożny!

Po pierwsze, moja sytuacja była łatwiejsza do rozwiązania, ponieważ miałem system podwójnego rozruchu (ubuntu i moją starą instalację Fedory), ale uruchomienie systemu dla klucza USB (lub może CD / DVD) powinno zrobić to samo.

MPOINT = / mount / ubuntu

Najpierw zamontowałem swoje systemy plików w ten sposób (nie zapomnij utworzyć punktów montowania): mount / dev / ubuntu / root $ MPOINT mount / dev / ubuntu / home $ MPOINT / home

Następnie uruchomiłem następujące polecenie (mój problem był tylko w kilku - krytycznych - katalogach), aby skopiować uprawnienia z działającego systemu do bałaganu (w rzeczywistości, w moim przypadku, zainstalowałem system ubuntu w Virtual Box pod Fedorą i mam tam uprawnienia):

znajdź / etc / usr / bin -exec stat --format "chmod% a $ {MPOINT}% n" {} \; > /tmp/restoreperms.sh

A potem uruchomiłem skrypt restoreperms.sh.

Byłem w stanie ponownie uruchomić na Ubuntu.

Zawartość pliku restoreperms.sh będzie wyglądać następująco:

(...)
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
(...)

Nie przetestowałem tego, ale musi działać również dla właścicieli i grup właścicieli. Coś jak:

znajdź / 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
(...)

Oczywiście musisz tutaj uważać, aby UID i GID były takie same w obu systemach, ale dla użytkowników i grup związanych z systemem nie powinno to stanowić problemu.

Rk:

Ważną rzeczą jest synchronizacja dysku instalacyjnego z używaną wersją lub przynajmniej praca z bieżącą wersją Ubuntu. Teraz mam te polecenia w koledze, uruchamiane codziennie (może być tygodnie), aby zachować te informacje. Ułatwi to rozwiązanie następnym razem, ale oczywiście, skoro mam to teraz, nigdy więcej się nie powtórzy. ;-) Coś takiego:

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

EDYCJA: aby obsługiwać łącza, połączone polecenie to:

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

Podniebny Jastrząb
źródło
4

Zmodyfikowałem skrypt z góry i wygląda to tak:

#!/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
użytkownik102453
źródło
3

Zgadzam się z blueben, po prostu ponowna instalacja może być szybsza niż analiza, który plik / katalog potrzebuje uprawnień. Ale jeśli ponowna instalacja nie jest opcją, oto pomysł:

  1. Zainstaluj domyślną instalację Ubuntu na innym komputerze
  2. Uruchom to polecenie, aby uzyskać uprawnienia do każdego pliku / katalogu w systemie: find / | xargs stat -c 'chmod %a "'%n'"' > /tmp/chmod.sh
  3. Skopiuj plik chmod.shna komputer z niewłaściwymi uprawnieniami
  4. Uruchom ten plik chmod +x /tmp/chmod.sh && /bin/bash /tmp/chmod.sh
  5. Mam nadzieję, że większość rzeczy działa (nie wszystko zadziała, wierzę)
weeheavy
źródło
2

ERRATUM do mojego postu opublikowanego jako użytkownik user100740: aby obsługiwać linki, połączone polecenie to:

/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
źródło
2

Jeśli nadal możesz uruchomić /usr/sbin/synaptic, często można to naprawić.

Posortuj pakiety według stanu (zainstalowane pakiety u góry), wybierz wszystkie zainstalowane pakiety, kliknij prawym przyciskiem myszy i wybierz ponownie zainstaluj. Następnie zastosuj, który poprosi dpkgo ponowne rozpakowanie wszystkich plików dla tych pakietów. (Utracisz wszelkie lokalne modyfikacje (ale nie zmiany pliku konfiguracyjnego).)

Może to nie wszystko naprawić.
Inną rzeczą jest to, że jeśli wejdziesz /var/cache, możesz zadzwonić dpkg -x <package name> /po każdy zainstalowany pakiet, a następnie zadzwonić dpkg --reconfigure -a. Ponadto, jeśli używasz Ubuntu, możesz dokonać aktualizacji dist, która często naprawia wiele błędów (zakładając, że nie masz jeszcze najnowszej wersji). Zasadniczo, gdy próbuję naprawić taki błąd, wypróbowuję te proste poprawki, a jeśli nie tylko sprawią, że znowu będzie działać, to czas na ponowną instalację.

Perkins
źródło
-2

boot z live CD. następnie uruchom powłokę, a następnie sudo -s. Następnie chmod 777 / *, a następnie chmod 600 / etc / passwd. jądro wpadnie w panikę, jeśli init się nie powiedzie, co się stanie, jeśli skrypty / lib / init nie są wykonywalne. uruchom system w trybie pojedynczego użytkownika dla Lilo Linux 1 i uruchom skrypt user102453 powyżej. Spowoduje to uruchomienie systemu sytem w celu wyświetlenia monitu. Nadal muszę uruchomić X.

Wiley
źródło
3
Wow, to całkiem okropny pomysł, który tam masz.
HopelessN00b
-3

Ustawienie pozwolenia na / na 755 działało dla mnie.

Więc najpierw sprawdź

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

Uprawnienia powinny być „drwxr-xr-x” (755).

Stefan
źródło
1
Nie dotyczy to rekurencyjnej części pytania.
kasperd
Nie, i to nie pomaga w 4755 2755 i 6755. Jeśli był to po prostu / usr (często jest), możesz rekurencyjnie ls -al podobny system i wykluczyć 755, może to pozostawić listę mniej niż 1000 plików, z którymi można ręcznie sobie poradzić. Oczywiście src i nagłówki tak naprawdę nie mają znaczenia.
mckenzm