Como reparar / restaurar o Ubuntu 10.04 depois de 'sudo chmod / 777'

12

See Also:
Why is “chmod -R 777 /” destructive?

Eu alterei as permissões de arquivo recursivamente no diretório raiz / executando sudo chmod -R / 777 e depois disso meu sistema não inicializa (estou recebendo muitos erros de "permissão negada").

Por favor ajude.

    
por Marcin 12.01.2011 / 08:59

9 respostas

23

Você está olhando para uma causa perdida. Salve os dados de que você precisa e reinstale o sistema operacional.

    
por 12.01.2011 / 09:18
4

Eu sei que o dpkg armazena as permissões nos bancos de dados e eu encontrei o seguinte script google que pode ajudar.

Edit: Eu realmente dei uma olhada rápida no script e parece que está faltando um pouco de mágica que vai de PERMS para MODE, por exemplo, dpkg -c dá por exemplo "-rw-r - r--" mas você quer 0644, estou trabalhando agora, então não tenho certeza se tenho tempo para fazer a conversão neste instante, mas posso voltar mais tarde se ninguém mais entrar para adicionar esse bit.

Existe um script aqui que parece 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
    
por 12.01.2011 / 09:36
4

É possível voltar de uma situação tão confusa , sem reinstalar o sistema. Bem, mais exatamente executando um novo sistema a partir de uma chave USB ou em uma caixa Virutal (ou mais) se você tiver um sistema de inicialização dupla.

Eu corri novamente o mesmo tipo em questão (algum bug em um script que eu estava escrevendo) e resolvi isso, mas você precisa pedir ajuda a algum especialista. Seja muito cauteloso!

Primeiro, minha situação foi mais fácil de resolver porque eu tinha um sistema dual boot (Ubuntu e minha antiga instalação do Fedora), mas rodar o sistema por uma chave USB (ou talvez um CD / DVD) deveria fazer a mesma coisa. / p>

MPOINT = / mount / ubuntu

Primeiro montei meus sistemas de arquivos assim (não esqueça de criar os pontos de montagem): mount / dev / ubuntu / root $ MPOINT mount / dev / ubuntu / home $ MPOINT / home

Então eu executei o seguinte comando (meu problema era apenas em alguns - diretórios críticos) para copiar as permissões do sistema em execução para o bagunçado (na verdade, no meu caso, eu instalei um sistema ubuntu no Virtual Caixa sob o fedora e obteve as permissões lá):

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

E então eu executei o script restoreperms.sh.

Eu consegui novamente inicializar no Ubuntu.

O conteúdo de restoreperms.sh será algo como:

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

Eu não testei, mas também deve funcionar para proprietários e grupos de proprietários. Algo como:

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

É claro que você tem que tomar cuidado aqui, que o UID e o GID são os mesmos em ambos os sistemas, mas para os usuários e grupos relacionados ao sistema, isso não deve ser um problema.

Rk:

Uma coisa importante para isso é manter um disco de instalação sincronizado com a versão que você está usando, ou pelo menos trabalhar com a versão atual do Ubuntu. Agora, eu tenho esses comandos em um cronjob, rodando todos os dias (podem ser semanas) para manter essa informação. Isso tornará a solução mais fácil da próxima vez, mas, é claro, como eu tenho isso agora, isso nunca acontecerá novamente. ;-) Algo parecido com isto:

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: para suportar links, o comando combinado é:

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

    
por 12.11.2011 / 11:18
4

Eu modifiquei o script acima e é assim:

#!/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
    
por 29.11.2011 / 15:13
3
Concorde com blueben, apenas reinstalar pode ser mais rápido do que analisar qual arquivo / diretório precisa de qual permissão. Mas se a reinstalação não for uma opção, aqui vai uma ideia:

  1. Instale uma instalação padrão do Ubuntu em outra máquina
  2. Execute este comando para obter as permissões de todos os arquivos / diretórios no sistema: find / | xargs stat -c 'chmod %a "'%n'"' > /tmp/chmod.sh
  3. Copie o arquivo chmod.sh para o computador com as permissões incorretas
  4. Execute esse arquivo chmod +x /tmp/chmod.sh && /bin/bash /tmp/chmod.sh
  5. Espero que a maioria das coisas funcione (nem tudo vai funcionar, acredito)
por 12.01.2011 / 09:43
2

ERRATA para minha postagem postada como usuário user100740: para dar suporte a links, o comando combinado é:

/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
    
por 13.11.2011 / 16:38
2

Se você ainda pode lançar /usr/sbin/synaptic , geralmente é possível corrigi-lo.

Classifique os pacotes por status (pacotes instalados no topo), selecione todos os pacotes instalados, clique com o botão direito e selecione reinstalar. Em seguida, aplique, que solicitará dpkg para extrair novamente todos os arquivos desses pacotes. (Você perderá quaisquer modificações locais (mas não alterações no arquivo de configuração).)

Pode não conseguir tudo consertado.
A outra coisa é se você entrar em /var/cache , você pode chamar dpkg -x <package name> / para cada pacote instalado e, em seguida, chamar dpkg --reconfigure -a . Além disso, se você estiver usando o Ubuntu, você pode fazer uma atualização dist que muitas vezes corrige muitos erros (supondo que você ainda não esteja na versão mais recente). Geralmente, quando estou tentando corrigir um erro como este, tento essas correções simples e, se elas não apenas funcionarem novamente, é hora de reinstalar.

    
por 09.01.2012 / 10:24
-2

inicialize a partir do live CD. em seguida, inicie o shell e, em seguida, sudo -s. Então chmod 777 / *, então chmod 600 / etc / passwd. O kernel irá entrar em pânico se o init falhar, o que acontecerá se os scripts / lib / init não forem executáveis. inicialize no modo de usuário único, para o Lilo Linux 1, e execute o script do user102453 acima. Isso faz com que o boot do sistema seja solicitado. Ainda precisa executar o X.

    
por 23.09.2012 / 06:58
-3

Definindo a permissão de / para 755 funcionou para mim.

Portanto, verifique primeiro com

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

As permissões devem ser "drwxr-xr-x" (755).

    
por 08.04.2015 / 12:20