Come riparare / ripristinare Ubuntu 10.04 dopo 'sudo chmod / 777'


12

Vedi anche:
Perché “chmod -R 777 /” è distruttivo?

Ho modificato le autorizzazioni dei file in modo ricorsivo sulla directory principale /eseguendomi sudo chmod -R / 777e dopo che il mio sistema non si avvia (ricevo molti errori "permesso negato").

Per favore aiuto.


Forse potresti usare un sistema Ubuntu live. Installa i pacchetti che hai installato sul tuo sistema normale e poi scrivi uno script per "clonarli"? Questa è solo un'idea Forse qualcun altro può dire se questo va bene.
Darokthar,

Seguire attentamente: Apri in modalità di ripristino> Monta unità> Apri shell interattiva> cd nel disco rigido montato (per me era in / mnt / [directory])> 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

Non ho abbastanza reputazione per pubblicare la risposta in StackExchange ma volevo aiutarti.
Smit Patel

Risposte:


23

Stai guardando una causa persa. Salvare i dati necessari e reinstallare il sistema operativo.


Sì. Il tempo che passerai a fare questo sarà pazzo e non saprai mai per certo che hai fatto esattamente. Inizia pulito, ripristina i tuoi dati dal backup.
ThatGraemeGuy

1
Questo è uno di quelli che fanno un passo indietro e imparano da esso. Le aree più importanti sono i contenuti della cartella principale, le modifiche alla configurazione apportate /etc, /var/wwwi contenuti del server Web e i database. Prendi un altro disco rigido, abilitalo come principale e installa. Ciò conserva l'altra unità come backup fino a quando non è possibile trasferirla.
Fiasco Labs,

Ho fatto la stessa cosa (e, sì, lo so meglio) e ho provato molte delle idee qui, ma ci sarebbero volute settimane per riportare la macchina in uno stato decente. Prova invece a eseguire il backup dei dati e reinstalla Ubuntu.
MikeHoss,

5

So che dpkg archivia i permessi nei database e ho trovato il seguente script google che potrebbe aiutare.

Modifica: in realtà ho dato una rapida occhiata allo script e sembra che manchi un po 'di magia che va da PERMS a MODE, ad esempio dpkg -c dà ad esempio "-rw-r - r--" ma tu vuoi 0644, sono al lavoro in questo momento, quindi non sono sicuro di avere il tempo di fare la conversione in questo istante, ma potrei tornare più tardi se nessun altro è saltato dentro per aggiungere quel bit.

C'è una sceneggiatura qui che sembra interessante

#!/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

si occupa anche dei file 04555?
Anello Ø

4

È possibile tornare da una situazione così disordinata , senza reinstallare il sistema. Bene, più esattamente eseguendo un nuovo sistema nuovo o da una chiave USB o in una Virutal Box (o giù di lì) se si dispone di un sistema a doppio avvio.

Ho eseguito di nuovo lo stesso tipo di problema (qualche bug in una sceneggiatura che stavo scrivendo) e l'ho risolto, ma è necessario chiedere l'aiuto di un esperto. Sii molto cauto!

Innanzitutto, la mia situazione era più facile da risolvere perché avevo un sistema a doppio avvio (ubuntu e la mia vecchia installazione fedora), ma eseguire il sistema per una chiave USB (o forse un CD / DVD) dovrebbe fare la stessa cosa.

Mpoint = / mount / ubuntu

Per prima cosa ho montato i miei file system in questo modo (non dimenticare di creare i punti di mount): mount / dev / ubuntu / root $ MPOINT mount / dev / ubuntu / home $ MPOINT / home

Quindi ho eseguito il seguente comando (il mio problema era solo in alcune directory - critiche -) per copiare le autorizzazioni dal sistema in esecuzione a quello disordinato (in effetti, nel mio caso, ho installato un sistema Ubuntu in Virtual Box sotto fedora e ottenuto le autorizzazioni lì):

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

E poi ho eseguito lo script restoreperms.sh.

Sono stato di nuovo in grado di avviare Ubuntu.

Il contenuto di restoreperms.sh sarà simile a:

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

Non l'ho provato ma deve funzionare anche per proprietari e gruppi di proprietari. Qualcosa di simile a:

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

Naturalmente, devi fare attenzione qui, che UID e GID sono uguali su entrambi i sistemi, ma per gli utenti e i gruppi relativi al sistema, questo non dovrebbe essere un problema.

RK:

Una cosa importante per questo è mantenere un disco di installazione sincronizzato con la versione che stai usando, o almeno lavorare con l'attuale versione di Ubuntu. Ora, ho questi comandi in un cronjob, in esecuzione ogni giorno (potrebbero essere settimane) al fine di mantenere tali informazioni. La prossima volta renderà la soluzione più semplice ma, ovviamente, dato che ho questa ora, non accadrà mai più. ;-) Qualcosa come questo:

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: per supportare i collegamenti, il comando combinato è:

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


4

Ho modificato lo script dall'alto ed è simile al seguente:

#!/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

3

Concordo con blueben, la reinstallazione potrebbe essere più rapida dell'analisi di quale file / directory necessita di quale autorizzazione. Ma se la reinstallazione non è un'opzione, ecco un'idea:

  1. Installa un'installazione Ubuntu predefinita su un altro computer
  2. Esegui questo comando per ottenere le autorizzazioni di ogni file / directory sul sistema: find / | xargs stat -c 'chmod %a "'%n'"' > /tmp/chmod.sh
  3. Copia il file chmod.shsul computer con le autorizzazioni sbagliate
  4. Esegui quel file chmod +x /tmp/chmod.sh && /bin/bash /tmp/chmod.sh
  5. Spero che la maggior parte delle cose funzioni (non tutto funzionerà credo)

2

ERRATO al mio post pubblicato come utente user100740: per supportare i collegamenti, il comando combinato è:

/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

2

Se è ancora possibile avviare /usr/sbin/synaptic, è spesso risolvibile.

Ordina i pacchetti per stato (pacchetti installati nella parte superiore), selezionare tutti i pacchetti installati, fare clic con il tasto destro e selezionare Reinstalla. Quindi applicare, che richiederà dpkgdi riestrarre tutti i file per quei pacchetti. (Perderai le modifiche locali (ma non le modifiche al file di configurazione).)

Tuttavia, potrebbe non essere tutto risolto.
L'altra cosa è che se vai in /var/cache, puoi chiamare dpkg -x <package name> /per ogni pacchetto installato, quindi chiamare dpkg --reconfigure -a. Inoltre, se stai usando Ubuntu, puoi fare un aggiornamento dist che spesso corregge molti errori (supponendo che tu non sia già nell'ultima versione). In genere, quando provo a correggere un errore del genere, provo queste semplici correzioni e se non si limitano a farlo funzionare di nuovo, è ora di reinstallare.


-2

avvio da live CD. quindi avvia shell, quindi sudo -s. Quindi chmod 777 / *, quindi chmod 600 / etc / passwd. il kernel andrà in panico se init fallisce, cosa che succederà se gli script / lib / init non sono eseguibili. avviare in modalità utente singolo, per Lilo Linux 1, ed eseguire lo script di user102453 sopra. Questo richiede l'avvio del sistema. Devo ancora far funzionare X.


3
Caspita, è un'idea davvero orribile che hai lì.
HopelessN00b

-3

L'impostazione dell'autorizzazione di / su 755 ha funzionato per me.

Quindi controlla prima con

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

Le autorizzazioni dovrebbero essere "drwxr-xr-x" (755).


1
Questo non affronta la parte ricorsiva della domanda.
Kasperd,

No, e non aiuta neanche con il 4755 2755 e il 6755. Se fosse solo / usr (spesso lo è) puoi ricorsivamente ricorrere a un sistema simile ed escludere il 755, questo può lasciare un elenco di meno di 1000 file che possono essere gestiti manualmente. Ovviamente src e headers non contano davvero.
mckenzm,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.