Como posso reverter um chmod no diretório etc?

8

Eu acidentalmente executei o seguinte comando no diretório etc:

sudo chmod -R 700 /etc

Eu sei que fiz algo muito errado. Meu terminal agora imprime:

I have no name!@ubuntu: /$

Como posso reverter meu diretório etc para seu estado anterior?

Eu tentei alterar as permissões, mas está falhando agora. Além disso, seria muito útil se alguém pudesse explicar o que realmente deu errado quando eu executei o comando em etc. Foi apenas permissões de arquivo. Então, por que todo o sistema parece completamente explodido? Por que nenhuma senha de login está funcionando agora? Eu sei que existe um arquivo no diretório etc que tem a ver com os usuários. Mas como a mudança de permissões prejudicou tudo? Alguns detalhes técnicos sobre isso seriam muito úteis.

    
por Rafay 23.07.2013 / 12:59

3 respostas

14

Uma coisa deu errado: o uso de sudo com esse comando. A opção -R informa chmod para definir recursivamente as permissões para esse diretório, que é, em todos os casos, uma ação não recomendada (devemos chamá-lo de heresia) se você não sabe o que está fazendo (uma vez isso aconteceu comigo, eu não emiti o comando, mas uma GUI defeituosa fez isso, e meu sistema passou a fio).

It was only file permissions. Then why does the whole system seems completely blown up?

O GNU / Linux é muito sensível a permissões de arquivos, já que foi construído com estabilidade e segurança em mente. O mesmo se aplica à maioria dos programas executados no GNU / Linux (ou seja, apache2 descarta privilégios de root e usa www-data , ou usuário semelhante, e sua permissão 700 não permitiria que ele lesse / escrevesse seus próprios arquivos). p>

Why is it that no login passwords are working now?

Como você já mencionou, as senhas de login são armazenadas em um arquivo em /etc/passwd e somente root (suponho que você não alterou isso) pode lê-lo, mas o prompt de login (ou login da GUI) usa um privilégio conta, portanto, não é possível ler o arquivo.

But how did changing permissions jeopardize everything?

O mesmo que foi dito acima, o Linux é muito sensível às permissões de arquivos. Alguns programas até verificam as permissões de seus arquivos de configuração e, se não forem esperados, não serão executados.

How can I revert my etc directory to its earlier state?

Se você usar uma distro baseada em RPM, isso pode ser feito usando o comando rpm --setperms , seria dolorosamente revertendo um por um os pacotes, no sistema parecido com o Debian apt-get --reinstall install é seu amigo. Outras soluções podem estar disponíveis, mas precisariam de um sistema funcional para isso.

    
por 23.07.2013 / 13:29
4

Vamos ver, o que você fez é definir permissões em todo o diretório / etc como leitura / gravação / execução permitido somente para o proprietário do arquivo / dir, negado para todos os outros. Se você estiver confuso com as permissões de arquivo, poderá ler mais em Wikipedia: Permissões tradicionais do UNIX .

O motivo pelo qual você explodiu seu sistema é porque muitos processos não podem mais ler suas configurações, não podendo acessar / etc. Não será fácil recuperar o diretório / etc inteiro para seu estado anterior. Como fazer isso dependerá da sua distro, mas basicamente isso significa reinstalar cada pacote que contém qualquer arquivo dentro de / etc.

Como um rápido band-aid para poder usar o sistema, a fim de corrigi-lo corretamente (reinstalando todos os pacotes com conteúdo dentro de / etc, como dito acima), você poderia fazer:

    # sudo find /etc -type d -exec chmod 775 '{}' \;
    # sudo find /etc -type f -exec chmod 664 '{}' \;

Com essas duas linhas, você estará definindo permissões liberais em todo o diretório / etc, com permissão de leitura / gravação para o proprietário e o grupo e leitura permitida para todos os outros. A razão dos dois chmod é definir o bit de execução apenas em dirs. Alguns processos vão reclamar ou falhar, mesmo assim, incluindo qualquer executável dentro de / etc, mas você deve ser capaz de fazer a reinstalação descrita acima.

Por favor, esteja ciente que, até recuperar as permissões originais, seu sistema estará, no mínimo, em um estado inseguro.

    
por 23.07.2013 / 13:31
0

700 removeram o acesso a muitos arquivos para grupos e usuários do mundo todo (por exemplo, os arquivos agora têm rwx------ permissões). Por exemplo, todos os usuários precisam ler /etc/passwd . Com sua configuração, somente o root agora pode ler /etc/passwd . Muitas coisas vão quebrar se você quebrar as permissões em arquivos em /etc/ de maneiras imprevisíveis.

Você pode tentar reconstruir as permissões (supondo que você ainda pode mudar para o root) com base em um servidor em funcionamento, mas isso é propenso a erros.

Eu sugiro restaurar /etc/ do backup se você tiver um (certificando-se de que a restauração retorne as permissões ou, se sua solução de backup suportar, restaure apenas as permissões).

    
por 23.07.2013 / 13:22