Como restaurar o acesso remoto a um sistema RHEL a partir de permissões expandidas definidas em todo o sistema de arquivos?

Como restaurar o acesso remoto a um sistema RHEL a partir de permissões expandidas definidas em todo o sistema de arquivos?

Causa do problema

Eu pretendia adicionar permissão de gravação de grupo em arquivos ocultos como '.hgignore' com o seguinte:

# senha
/optar
# sudo chmod -R g+w .*

O problema é que '..' corresponde a esse padrão, e agora todo o sistema de arquivos RHEL tem g+w definido. Os problemas imediatos são os seguintes:

  • /etc/sudoers precisa ser definido como 440, não 460, então agora os usuários não podem usar o sudo.
  • Algum mecanismo semelhante ao acima não permite acesso ssh. (Clientes SSH remotos recebem a mensagem de erro "ssh_exchange_identification: Conexão fechada por host remoto")

Pergunta

Para recuperar a capacidade de efetuar login remotamente, alguém com acesso físico ao servidor precisa ser instruído sobre como consertar o sistema.

A questão agora é: quais arquivos e diretórios importantes precisam ter sua permissão revertida para restauração sshe sudofuncionalidade?

Nota sobre "fechado como duplicado"

A questãoPor que "chmod -R 777 /" é destrutivo?fornece explicações detalhadas sobre o efeito que as permissões de expansão recursiva podem ter. Esta questão pretende responder à questão de como recuperar o acesso remoto via ssh para que restaurações e reparos mais extensos possam ser realizados.

Responder1

Para arquivos que fazem parte de um pacote, você pode descobrir o que houve de errado fazendo

rpm --verify "nome do pacote"

onde packagename é um pacote individual, ou você pode percorrer a saída de "rpm -qa"

Então você poderá usar rpm para corrigi-los com algo como

rpm --setperm "nome do pacote"

Responder2

O problema com o ssh não se limita apenas a /etc e também tem a ver com a pasta .ssh do usuário com o qual você está tentando se conectar, com permissões inadequadas. Geralmente a pasta .ssh de um usuário deve ser 700, as chaves privadas devem ser 600 e todo o resto pode ser 644.

A pasta /etc/ssh deve ser 755, em /etc/ssh as chaves privadas devem ser 600 e todo o resto deve ser 644.

Como recuperar um servidor de permissões incorretas em/etc?

Possivelmente, um dos métodos mais fáceis seja restaurar a partir do backup. Você faz backups e testou os procedimentos de restauração, certo? :)

Se você não tiver um backup que possa usar para fazer uma restauração, pode ser necessário configurar um sistema limpo que seja idêntico em uma VM e, em seguida, corrigir as permissões no host com base no seu servidor, comparando os dois.

Responder3

Se você tiver um servidor em bom estado, executar algo como o seguinte no servidor em bom estado pode ajudá-lo a restaurá-lo. (Assume capacidade de globbing recursiva (zsh), poderia usar find com -exec / xargs):

for i in /etc/**/*; do
    perm=$(stat "$i" -c "%a")
    ssh root@badServerHostName "chmod $perm $i"
done

Pode haver alguns subdiretórios para excluir outros podem ser adicionados ... Rsync seria melhor se pudesse fazerapenaspermissões, mas não acho que possa.

Responder4

Se você tiver um backup e LVM e espaço suficiente, poderá fazer o seguinte:

1. restaure o backup para um novo lv temporário (monte-o em /oldperm)
2. faça algo como o seguinte pseudocódigo:

foreach oldfile in /oldperm/* {  
  newf = strip "/oldperm" from oldfile  
  chmod --reference=oldfile newf  
}

Você pode restaurar parcialmente, como tudo em /etc primeiro, caso tenha problemas de espaço. Este truque depende do sinalizador --reference do chmod que toma como modelo outro arquivo e faz com que o argumento corresponda em termos de permissão.

Dessa forma, você apenas restaura as permissões antigas sem alterar o conteúdo dos arquivos.

informação relacionada