Como reverter o comando chown?

16

Se eu correr:

sudo chown -R user:user /

Posso reverter para o que era antes de executá-lo?

fronthem
fonte
1
Apenas como um aviso para outras pessoas: O comando a seguir sudo chown -R user:user ..pode ter o mesmo efeito que o mencionado aqui, se você estiver um nível abaixo da raiz do sistema de arquivos. Não tente algo assim.
passerby51

Respostas:

22

Em resumo: não.

Você precisará restaurar a partir de um backup. (Algumas ferramentas de backup podem ter opções para restaurar apenas a permissão, outras podem listar arquivos de backup com suas permissões e você pode usá-lo para corrigir seu sistema.)

Se você não tiver um backup, precisará corrigir tudo isso manualmente.

Esteira
fonte
Depois sudo chown -R user:user /, é provável que o sistema seja tão mal administrado que você não possa restaurar a partir de um backup.
Keith Thompson
1
Se você não conseguir recuperar as partes importantes dos dados do usuário nesse cenário a partir do seu backup, seu "backup" não será realmente um. Se você não conseguir recuperar o sistema operacional inteiro, ainda poderá reinstalar a base e restaurar a partir do backup. Provavelmente, será necessário um CD ao vivo ou inicialização de rede nesse caso, mas se sua estratégia de backup não puder se recuperar disso, não será realmente suficiente.
Tapete de
Meu comentário anterior provavelmente não estava claro. Um sistema em funcionamento pode ser restaurado usando o próprio sistema. Depois de fazer o chowndescrito, é provável que você não consiga fazer nada antes de instalar todo o sistema do zero; o sistema nem tem uma rootconta e sudonão funciona. Provavelmente vale a pena tentar inicializar em um shell de usuário único, mas não espere que funcione.
21412 Keith Thompson
1
A conta raiz não se foi (ainda é o UID 0); ele não possui mais nenhum arquivo, mas o root ignora as permissões normais de qualquer maneira. A questão de continuar sudoou sunão funcionar quando todos os seus arquivos relevantes pertencerem a useruma questão é diferente (provavelmente não porque, entre outras coisas, o bit SUID no exe terá desaparecido).
Jw013 04/04
6

Somente se você souber a propriedade do usuário e do grupo de cada arquivo e diretório em seu /diretório.

Mesmo assim, você já detestou a propriedade de arquivos críticos do sistema que precisam pertencer à raiz, incluindo o sudocomando. Você provavelmente precisará montar o disco rígido em outro sistema - e esteja ciente de que o outro sistema provavelmente não terá os mesmos mapeamentos UID e GID que o que você acabou de derrotar.

Faça uma cópia de todo o disco rígido, se puder, e reinstale o sistema operacional. Depois de fazer isso, você pode tentar copiar os arquivos de volta para o sistema recém-limpo e restaurar suas propriedades. Provavelmente, você pode assumir (embora não seja 100% confiável) que tudo o que está abaixo /home/foopertence ao usuário fooe que cada arquivo de spool de correio /var/mailpertence ao usuário apropriado (se você tiver um email no sistema). Você pode fugir sem restaurar a maioria dos arquivos que não estão abaixo /home, dependendo do que você fez com o sistema.

E então comece a cultivar o hábito de verificar novamente qualquer comando sob o qual você executa sudo antes de clicar Enter.

Keith Thompson
fonte
6

Se sua distribuição for baseada em RPM, você poderá restaurar SOMENTE os arquivos instalados pelos pacotes rpm.

Para restaurar todas as permissões de pacote:

rpm --setperms -a

Para restaurar todo o proprietário do pacote (usuário / grupo):

rpm --setugids -a

Se -a não for executado, você poderá executar um loop bash:

Para permissões:

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

Para o proprietário:

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

Extraído de: http://www.sysadmit.com/2016/10/linux-restaurar-permisos-de-un-paquete.html

Egon Spengler
fonte
1

Você pode armazenar as versões atuais e analisá-las para reverter usando a opção -v.

chown -R nobody:nobody -v /tmp/some_file > /tmp/chown.log
cat /tmp/chown.log

O conteúdo seria:

changed ownership of `/tmp/some_file' from me:users to nobody:nobody

Usando sua linguagem de script favorita e expressões regulares, você pode executar o doloroso processo de revertê-las (se necessário).

Eu recomendo fortemente não fazer uma checagem recursiva em / como você expõe o / etc / shadow ou qualquer outro arquivo importante.

SailorCire
fonte
0

se a distribuição for baseada em rpm:

rpm -a --setperms
shcherbak
fonte