Corrigir permissões do servidor após acidental chmod debian

0

no meu pânico eu postei para o fórum do Ubuntu por engano, im reposting no lugar correto (eu acho)

Ao tentar depurar um servidor de e-mail, digitei:

chmod -R 777 /

em vez de:

chmod -R 777 .

e a cereja no topo do bolo, devido a eu ter esquecido que tinha mudado um script que usei para entrar para consertar algo, eu fiz tudo isso como root. Eu não tenho backups da maioria do sistema (má escolha eu sei).

Diferentemente das perguntas "Recuperando de chmod -R -777 /" e "O que fazer depois de 'chmod -R 777 /'?" Eu ainda estou conectado como root, e nem todo o sistema foi alterado, então eu tenho algum controle sobre o sistema. Eu também saí do comando dentro de um segundo para minimizar o dano. Desde então, desliguei fisicamente o servidor da Internet.

Eu acredito que um script poderia consertá-lo se ele restaurasse as permissões do sistema de arquivos com base nos dados do gerenciador de pacotes, mas eu não sei como eu faria isso. Se isso não for possível, como eu salvaria os dados do servidor para reinstalar o sistema operacional?

Estou ciente dos possíveis riscos de perder um arquivo, mas prefiro que a recuperação seja reinstalada, apesar deles.

esta é a saída atual de ls -la / :

drwxrwxrwx  22 root root  4096 Sep  7  2016 .
drwxrwxrwx  22 root root  4096 Sep  7  2016 ..
drwxr-xr-x   2 root root  4096 May 18 07:55 bin
drwxr-xr-x   3 root root  4096 Sep 21 07:53 boot
drwxr-xr-x  19 root root  3180 Sep 11 20:54 dev
drwxrwxrwx  92 root root  4096 Aug 23 07:50 etc
drwxr-xr-x   4 root root  4096 May 23  2016 home
lrwxrwxrwx   1 root root    31 Feb 24  2016 initrd.img -> /boot/initrd.img-3.16.0-4-amd64
drwxrwxrwx  18 root root  4096 Feb 24  2016 lib
drwxr-xr-x   2 root root  4096 Jun 20 07:00 lib64
drwx------   2 root root 16384 May 19  2016 lost+found
drwxrwxrwx   2 root root  4096 May  5  2015 media
drwxr-xr-x   2 root root  4096 May  5  2015 mnt
drwxr-xr-x   3 root root  4096 May 28  2016 opt
dr-xr-xr-x 148 root root     0 Sep  3 21:55 proc
drwxrwxrwx  10 root root  4096 Aug 19 17:58 root
drwxr-xr-x  22 root root   800 Sep 21 17:09 run
drwxrwxrwx   3 root root  4096 Jun 20 07:00 sbin
drwxr-xr-x   4 root root  4096 Sep 20 23:18 sftp
dr-xr-xr-x  13 root root     0 Sep  3 21:55 sys
drwxrwxrwx   8 root root  4096 Sep 21 17:17 tmp
drwxrwxrwx  11 root root  4096 Feb 24  2016 usr
drwxr-xr-x  14 root root  4096 Jun 25 06:21 var
lrwxrwxrwx   1 root root    27 Feb 24  2016 vmlinuz -> boot/vmlinuz-3.16.0-4-amd64

estou ciente de que não é assim que você conserta um servidor de e-mail. Foi uma correção descuidada hacky para ver o que quebrou. confie em mim, eu não vou fazer isso de novo

    
por kaioker2 21.09.2017 / 23:39

3 respostas

3

comentário de LasVegasCoder do outro fórum que eu postei por engano:

Corrigindo erro de permissão

Como restaurar a permissão do diretório raiz para o padrão?

Regra # 1: Se você não estiver confortável com as linhas de comando, não execute nenhum comando como root.

Executar o chmod -R 777 / as root irá quebrar o seu sistema.

A execução de rm -rf / as root resultará em um desastre!.

Se você executou o chmod -R 777 / as root, siga estas etapas para restaurá-lo:

Etapa 1:

Copie o seguinte script, cole-o no seu console para gerar o script fixpermission

echo '
chmod -R 755 /bin /boot /dev /etc/ /home /lib /lib64 \
/media /mnt /opt /run /sbin /srv /usr /var

chmod -R 777 /initrd.img /vmlinuz
chmod -R 1777 /tmp
chmod -R 555 /sys
chmod -R 555 /proc
chmod -R 700 /root

' > fixpermission

chmod +x fixpermission

./fixpermission

O acima irá criar um script chamado fixpermission e executá-lo por ./fixpermission se ainda não for invocado.

Etapa 2:

Execute stat -c '% A% a% n' / * para mostrar seu diretório adequado e sua permissão conforme restaurado.

Exemplo: sua estrutura de permissões de diretório deve ser semelhante à seguinte:

root@plab:~# stat -c '%A %a %n' /*
drwxr-xr-x 755 /bin
drwxr-xr-x 755 /boot
drwxr-xr-x 755 /dev
drwxr-xr-x 755 /etc
drwxr-xr-x 755 /home
lrwxrwxrwx 777 /initrd.img
lrwxrwxrwx 777 /initrd.img.old
drwxr-xr-x 755 /lib
drwxr-xr-x 755 /lib64
drwx------ 700 /lost+found
drwxr-xr-x 755 /media
drwxr-xr-x 755 /mnt
drwxr-xr-x 755 /opt
dr-xr-xr-x 555 /proc
drwx------ 700 /root
drwxr-xr-x 755 /run
drwxr-xr-x 755 /sbin
drwxr-xr-x 755 /srv
dr-xr-xr-x 555 /sys
drwxrwxrwt 1777 /tmp
drwxr-xr-x 755 /usr
drwxr-xr-x 755 /var
lrwxrwxrwx 777 /vmlinuz
lrwxrwxrwx 777 /vmlinuz.old

Etapa 3:

Reinicie seu sistema!

Espero que isso ajude.

    
por 22.09.2017 / 02:02
4

Se este for um sistema ao qual você tem acesso físico, você pode simplesmente montar sua unidade em outro sistema em funcionamento e, no mínimo, copiar os dados que desejar salvar. Este é provavelmente o meio mais seguro e confiável de recuperar apenas os dados em si.

Você também pode encontrar as permissões de um sistema em funcionamento (idealmente da mesma versão do sistema operacional e com exatamente os mesmos pacotes instalados nele) e alterar as permissões do sistema quebrado para corresponder a ele - mais uma vez, isso é mais fácil feito se você pode montar o drive do sistema quebrado em um sistema funcional, mas também pode ser possível fazer se o sistema for remoto e você ainda puder ssh nele, tornar-se root e chmod.

Nota : Antes de fazer qualquer coisa, recomendo fazer um backup completo do sistema quebrado (mais uma vez, isso é mais fácil se você tiver acesso físico a ele). Se algo der errado, faça uma cópia nova do backup e tente novamente na cópia, mantendo o backup original intocado para que possa ser restaurado novamente se houver outro erro.

No sistema de trabalho, você deve ser capaz de criar uma lista de arquivos e permissões de trabalho separados por nulas como esta:

# find / -name '*' -printf '%m %p
# perl -0ne '$_ =~ m{^(\d*\d\d\d) (.*)
# perl -0ne '$_ =~ m{^(\d*\d\d\d) (.*)
# find / -name '*' -printf '%m %p
# perl -0ne '$_ =~ m{^(\d*\d\d\d) (.*)
# perl -0ne '$_ =~ m{^(\d*\d\d\d) (.*)%pre%$} ; print "chmod $1 $2\n" ; chmod oct($1), "/mnt/broken/$2" ;' working-permissions.txt
$} ; print "chmod $1 $2\n" ; chmod oct($1), $2 ;' working-permissions.txt
' > working-permissions.txt
$} ; print "chmod $1 $2\n" ; chmod oct($1), "/mnt/broken/$2" ;' working-permissions.txt
$} ; print "chmod $1 $2\n" ; chmod oct($1), $2 ;' working-permissions.txt
' > working-permissions.txt

Sidenote : É separado por nulo porque é muito provável que você não tenha nenhum nome de arquivo com nulos, por isso é mais seguro separá-los assim do que usar novas linhas (você ainda provavelmente não terão nomes de arquivos com novas linhas, mas é melhor prevenir do que remediar, e a separação nula é mais segura).

Dê uma olhada na saída de xargs --null -n1 --arg-file=working-permissions.txt echo | less para garantir que as permissões e nomes de arquivos pareçam normais. Se o fizerem, você tem agora uma escolha de maneiras de proceder:

Opção 1 :

Se você ainda pode entrar no sistema quebrado e se tornar root, você pode tentar copiar o arquivo working-permissions.txt para o sistema quebrado e quando conectado ao sistema quebrado executar:

%pre%

Opção 2 :

Você pode montar o disco do sistema quebrado no sistema de trabalho. Agora você precisará alterar o comando perl acima para refletir onde você o montou. Por exemplo, se você montou em /mnt/broken , você faria:

%pre%

O script perl agora mudará as permissões em /mnt/broken .

Observação : a opção 2 é realmente mais perigosa para o sistema de trabalho (no caso de haver um erro no script). Portanto, quando você estiver pronto para executar o script perl para alterar as permissões, sugiro usar uma unidade LiveDVD ou USB para inicializar o sistema de trabalho e não ter nenhuma unidade, exceto a unidade do sistema quebrada conectada a ela.

Finalmente , depois que o sistema quebrado estiver funcionando novamente, faça backups frequentes para que, se alguma catástrofe o atingir novamente, você possa restaurar de backup e seguir em frente.

    
por 22.09.2017 / 06:21
1

Realmente, se você fez o backup das configurações & arquivos de dados e, em seguida, fez uma nova instalação & restaurar arquivos (com as permissões corretas, deve ser fácil para apenas esses arquivos, correspondendo o diretório padrão pode ser bom o suficiente), que é provavelmente o mais fácil. Mas você disse que o servidor está quebrado de qualquer maneira, então, mesmo depois de consertar as permissões, ele ainda estará quebrado, então por que se incomodar? Basta reinstalar.

Eu não sei como seu servidor está configurado ou onde os dados estão, mas isso deve ser fácil para você pesquisar na web por si mesmo, e realmente deve ser o primeiro passo para fazer um backup de qualquer maneira.

Se você realmente quiser uma lista de permissões de arquivo, você pode fazer uma nova instalação separada (mesmo em uma VM) e compará-la à sua instalação quebrada atual e, em seguida, ajustar conforme necessário.

    
por 22.09.2017 / 01:48