Como reparar / restaurar o ubuntu 10.04 após 'sudo chmod / 777'

12

Veja também:
Por que “chmod -R 777 /” é destrutivo?

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

Por favor ajude.

Marcin
fonte
Talvez você possa usar um sistema Ubuntu ao vivo. Instale os pacotes que você instalou no seu sistema normal e depois escreva um script para 'cloná-los'? Isto é apenas uma idéia. Talvez alguém possa dizer se isso é bom.
Darokthar
Siga isso com cuidado: Abra no modo de recuperação> Montar unidade> Abrir shell interativo> cd no disco rígido montado (para mim estava em / mnt / [diretório])> chmod -R 755 ./**> #cd ./etc/ ssh / #chmod 600 módulos #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
Não tenho reputação suficiente para postar a resposta no StackExchange, mas queria ajudá-lo.
perfil completo de Smit Patel

Respostas:

23

Você está olhando para uma causa perdida. Salve os dados necessários e reinstale o sistema operacional.

blueben
fonte
Sim. A quantidade de tempo que você gasta fazendo isso será uma loucura e você nunca saberá ao certo se está certo. Comece limpo, restaure seus dados do backup.
precisa saber é o seguinte
1
Este é um daqueles que retrocede e aprende com as coisas. Suas áreas mais importantes são o conteúdo da sua pasta pessoal, alterações na configuração em que você fez /etc, /var/wwwconteúdo do servidor da web e bancos de dados. Pegue outro disco rígido, ative-o como primário e instale. Isso preserva sua outra unidade como backup até que você possa transferi-la.
Fiasco Labs
Fiz a mesma coisa (e, sim, eu sei melhor) e tentei várias das idéias aqui, mas levaria semanas para que eu voltasse a máquina a um estado decente. Em vez disso, tente fazer backup de seus dados e reinstalar o Ubuntu.
MikeHoss #
4

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

Edit: Na verdade, dei uma olhada rápida no script e parece que falta um pouco de mágica que vai de PERMS a MODE, por exemplo, dpkg -c fornece, por exemplo, "-rw-r - r--", mas você deseja 0644, estou no trabalho agora, então não tenho certeza de que tenho tempo para fazer a conversão nesse instante, mas posso voltar mais tarde se mais ninguém tiver entrado para adicionar essa parte.

Há 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
James
fonte
ele lida também com os arquivos 04555?
Ring Ø
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 um Virutal Box (mais ou menos) se você tiver um sistema de inicialização dupla.

Corri novamente o mesmo tipo de problema (algum bug em um script que estava escrevendo) e o resolvi, mas você precisa pedir a ajuda de algum especialista. Seja muito cauteloso!

Primeiro, minha situação foi mais fácil de resolver porque eu tinha um sistema de inicialização dupla (ubuntu e meu antigo fedora instalado), mas executar o sistema com uma chave USB (ou talvez um CD / DVD) deve fazer a mesma coisa.

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

Em seguida, executei o seguinte comando (meu problema estava apenas em alguns diretórios críticos) para copiar as permissões do sistema em execução para o mais complicado (de fato, no meu caso, instalei um sistema ubuntu no Virtual Box no fedora e obteve as permissões lá):

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

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

Consegui novamente inicializar no ubuntu.

O conteúdo do 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
(...)

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

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

Obviamente, você deve tomar cuidado aqui, que o UID e o GID são iguais nos dois 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, executando todos os dias (pode demorar semanas) para manter essas informações. Isso facilitará a solução da próxima vez, mas, é claro, como eu tenho isso agora, isso nunca acontecerá novamente. ;-) Algo assim:

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 oferecer suporte a links, o comando combinado é:

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

Falcão do céu
fonte
4

Eu modifiquei o script de cima e fica 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
user102453
fonte
3

Concorde com o blueben, apenas a reinstalação pode ser mais rápida do que analisar qual arquivo / diretório precisa de qual permissão. Mas se a reinstalação não for uma opção, eis uma idéia:

  1. Instale uma instalação padrão do Ubuntu em outra máquina
  2. Execute este comando para obter as permissões de cada arquivo / diretório no sistema: find / | xargs stat -c 'chmod %a "'%n'"' > /tmp/chmod.sh
  3. Copie o arquivo chmod.shpara 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 (acredito que nem tudo funcionará)
pesado
fonte
2

ERRATUM para minha postagem postada como usuário user100740: para oferecer 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
jlovi
fonte
2

Se você ainda pode iniciar /usr/sbin/synaptic, geralmente é corrigível.

Classifique os pacotes por status (pacotes instalados na parte superior), selecione todos os pacotes instalados, clique com o botão direito do mouse e selecione reinstalar. Em seguida, aplique, que solicitará dpkga extração novamente de todos os arquivos desses pacotes. (Você perderá quaisquer modificações locais (mas não as alterações no arquivo de configuração).)

Talvez não consiga tudo corrigido.
A outra coisa é que, se você entrar /var/cache, poderá chamar dpkg -x <package name> /todos os pacotes instalados e, em seguida, ligar dpkg --reconfigure -a. Além disso, se você estiver usando o Ubuntu, poderá fazer uma atualização dist que geralmente corrige muitos erros (supondo que você ainda não esteja na versão mais recente). Geralmente, quando estou tentando corrigir um erro como esse, tento essas correções simples e, se não o fizerem funcionar novamente, é hora de reinstalar.

Perkins
fonte
-2

inicialize a partir do CD ao vivo. depois inicie o shell, depois sudo -s. Em seguida, chmod 777 / * e, em seguida, chmod 600 / etc / passwd. O kernel 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 a inicialização do sistema seja solicitada. Ainda precisa fazer o X rodar.

Wiley
fonte
3
Uau, é uma péssima ideia que você tem aí.
HopelessN00b
-3

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

Stefan
fonte
1
Isso não trata da parte recursiva da pergunta.
kasperd
Não, e também não ajuda com o 4755 2755 e o 6755. Se fosse apenas / usr (geralmente é), você pode recursivamente usar um sistema semelhante e excluir o 755, isso pode deixar uma lista com menos de 1000 arquivos que podem ser tratados manualmente. É claro que src e cabeçalhos não importam.
mckenzm