Definido incorretamente chmod / 777. Problemas?

33

Eu estava tentando executar, chmod -R 777 ./mas acabei digitando chmod -R 777 /e configurando 777em minha máquina inteira. O que pode dar errado? Como posso corrigir isso?

Vinnycx
fonte
o que pode dar errado no sistema? deixará de trabalhar?
Vinnycx
6
Claro que existem problemas. O SSH falhará, por exemplo.
ceving 11/05/11
2
O SSH sai se o diretório inicial estiver legível mundialmente. Definir tudo como 777 é como fazer tudo como root.
ceving 11/05/11
3
Consulte também serverfault.com/questions/364677/why-is-chmod-r-777-destructive, que fornece mais detalhes sobre o que dará errado.
Gilles 'SO- stop be evil'

Respostas:

46

Problemas? Sim, muitos. Pode ser consertado? Certo. Mais rápido que reinstalar? Provavelmente não.

Minha recomendação é reinstalar. Mantenha um backup do sistema existente e restaure a lista de pacotes e o conteúdo dos arquivos em /etce /var. Para /usr/local, você provavelmente pode restaurar permissões manualmente. Para /homee /srv, você precisará restaurar as permissões dos backups.

Se este é um sistema com vários usuários locais, observe que tornar alguns arquivos legíveis pelo mundo revelou algumas coisas que deveriam ter permanecido confidenciais.

  • Sua lista de senhas agora está comprometida: os usuários locais tiveram acesso à lista de senhas com hash e podem tentar forçá-los com força bruta. Notifique seus usuários sobre isso.
  • Todos os dados privados do usuário (chaves ssh, senhas armazenadas, email, qualquer outra coisa que os usuários possam considerar confidenciais) foram expostos a todos os usuários locais. Notifique seus usuários sobre isso.

Se você realmente deseja tentar reparar (mais um exercício de aprendizado do que uma rota de recuperação prática), primeiro restaure as permissões de alguns arquivos. Observe que, embora a maioria dos arquivos esteja muito aberta, faltam alguns bits de setuid necessários . Aqui estão as etapas que você deve executar antes de qualquer outra coisa. Observe que esta não é uma lista exaustiva, apenas uma tentativa de tornar o sistema quase funcional.

chmod -R go-w /
chmod 440 /etc/sudoers
chmod 640 /etc/shadow /etc/gshadow
chmod 600 /etc/ssh/*_key /etc/ssh*key   # whichever matches
chmod 710 /etc/ssl/private /etc/cups/ssl
chmod 1777 /tmp /var/tmp /var/lock
chmod 4755 /bin/su /usr/bin/passwd /usr/bin/sudo /usr/bin/sudoedit
chmod 2755 /var/mail /var/spool/mail

Então você precisará restaurar todas as permissões em todos os lugares. Para arquivos abaixo /usr, você pode reinstalar os pacotes com um dos seguintes comandos, dependendo da sua distribuição:

  • Se você estiver usando Debian, Ubuntu ou outra distribuição baseada no APT, poderá executar apt-get --reinstall install
  • Se você estiver usando o Arch Linux, poderá executar pacman -S $(pacman -Qq --dbpath /newarch/var/lib/pacman) --root /newarch --dbpath /newarch/var/lib/pacman, assumindo que você esteja em um Live CD e que sua instalação do Arch esteja montada em /newarch.

Para arquivos abaixo /etce /var, que não funcionará, muitos deles serão deixados como estão: você precisará replicar as permissões em uma instalação em funcionamento. Para arquivos sob /srve /home, você terá que restaurar de backups de qualquer maneira. Como você pode ver, você também pode reinstalar.

Gilles 'SO- parar de ser mau'
fonte
6
Concordado, a menos que você seja um especialista, você quase não tem chance de reparar essa situação sem fazer uma reinstalação completa ou restaurar os backups. É muito perigoso deixar o sistema funcionando como está.
Arrowmaster
3
Se houver usuários no sistema, tenho pena deles.
Jürgen A. Erhard
19

Você pode não perceber a princípio, mas muitas coisas podem dar errado. O principal problema é que todo o modelo de segurança de todo o sistema está quebrado. É como ter um corpo sem pele, órgãos no ar. É provável que seja infectado porque não deve funcionar assim. Mesmo que pareça funcionar por alguns minutos, você precisa limpar isso.

A melhor maneira seria começar do zero. Dessa forma, você reduzirá bastante o risco e fornecerá um resultado mais limpo em menos tempo. Se você tiver backups adequados, isso não deve ser uma experiência muito difícil.

Se você tentar limpá-lo, a maneira principal seria solicitar ao gerente de pacotes da sua distribuição que reinstale TUDO no sistema, incluindo a substituição de arquivos de configuração. Em seguida, use o sistema de verificação necessário para examiná-los e verifique se nenhum deles está sinalizado como tendo arquivos com permissões fora do comum. Em seguida, trabalhe com diretórios pessoais do usuário e redefina tudo para permissões sãs em massa, depois trabalhe com as poucas coisas que devem ter permissões especiais (como arquivos de chaves ssh). Por fim, faça um sistema completo para localizar tudo marcado como 777 e percorrer a lista (deve ser pequeno se você executou as outras etapas completamente) e trabalhá-los um por um, certificando-se de que devem estar do jeito que estão.

Caleb
fonte
Mas, além da segurança, o que pode dar errado em termos de aplicativos? Eles deixarão de trabalhar? Ou a segurança é a maior preocupação aqui?
Vinnycx
A segurança é a maior preocupação, mas muitos programas, principalmente nos bastidores, como log de daemons, cron, etc. falharão por várias razões, em vez de se colocarem na situação perigosa que vêem.
Caleb
O cron deixará de funcionar apenas por causa do 777?
Vinnycx
1
Existem vários sistemas cron diferentes, mas nenhum cron que se preze deve executar tarefas no cron do root quando o arquivo crontab for gravável mundialmente! Além disso, o daemon de email que lida com notificações cron deve reclamar por outros motivos.
Caleb
10

SOLUÇÃO: TESTEI ISSO NO CENTOS

Esse cara salvou meu trabalho! (Você precisa acessar de alguma forma)

http://www.adminlinux.org/2009/07/how-to-restore-default-system.html

1) Para redefinir uids e gids em arquivos e diretórios:

for u in $(rpm -qa); do rpm --setugids $u; done

2) Para permissões em arquivos e diretórios

for p in $(rpm -qa); do rpm --setperms $p; done

altere manualmente as permissões para esses arquivos:

# ll /etc/ssh/
# chmod 600 /etc/ssh/ssh_host_rsa_key
# chmod 600 /etc/ssh/ssh_host_dsa_key
# service sshd restart
saul scv
fonte
5

Alguns programas preocupados com segurança não serão iniciados se determinados arquivos tiverem permissões "frouxas" demais. Como o @ceving disse, sshdé o mais típico disso.

A principal coisa que pode dar errado agora é que qualquer usuário pode abrir, ler e gravar qualquer arquivo em seu sistema. As duas razões pelas quais isso é ruim são: A) se um usuário mal-intencionado obtém o controle do seu sistema através de uma exploração ou configuração incorreta, ele pode modificar qualquer coisa no seu sistema agora e B) você pode excluir o que quiser, mesmo que você não é root, então acabou de negar a maioria das proteções de não executar como root.

Se você não fez o backup das permissões de antemão, você está com um pouco de situação. Você poderá criar um script que "busque" uma lista de permissões de um sistema recém-instalado e, em seguida, "aplique" essas coisas a tudo em seu sistema. Eu não tenho esse script à mão, no entanto.

LawrenceC
fonte
Mas, além da segurança, o que pode dar errado em termos de aplicativos? Eles deixarão de trabalhar? Ou a segurança é a maior preocupação aqui?
Vinnycx
Apenas alguns aplicativos que se recusam a iniciar se as permissões forem muito soltas. A segurança é a maior preocupação. Mas também é estabilidade do sistema. Se você faz o rm -rf /seu usuário normal agora, você interrompe o sistema.
11132 LawrenceC
Quais aplicativos podem deixar de funcionar?
Vinnycx
Além do SSH? O que mais pode falhar? Preciso agora se eu puder deixar o sistema assim por um tempo.
Vinnycx
5
@Vinnycx: Não, você não pode. Está quebrado. Você deve fazer disso uma prioridade para corrigi-lo. Caso contrário, espere que seus serviços falhem um por um e os hackers consumam seus dados. Deixar / * @ 777 não é uma opção.
Caleb