Como recuperar metadados de permissão perdida em / etc? [duplicado]

1

Por engano foi executado o comando:

sudo chmod -R 777 /etc/

Existe alguma maneira de retornar as permissões no estado correto?

    
por demas 02.09.2018 / 17:50

2 respostas

0

Esta resposta assume que você não tem um backup.

Como as informações - os metadados de permissão - foram perdidas no seu sistema, não há como voltar atrás sem uma fonte externa.

Pode ser outro Linux, idealmente a mesma distribuição e lançamento que o seu.

Primeiro, defina as permissões, todo o diretório para 755 e todos os arquivos para 644. Você pode fazer isso em /etc com o seguinte script:

find -type d -print0|xargs -n 500 -P 1 -0 chmod 755
find -type f -print0|xargs -n 500 -P 1 -0 chmod 644

Em segundo lugar, despeje os dados de permissão em um arquivo de texto no outro sistema com o comando

find -print 0|xargs -0 -P 1 -n 500 ls -ld|sort -k +9 > permdata_ok.txt

Você receberá um permdata.txt no sistema remoto. Ordenar é necessário, depois eu explico, porque. Mova este arquivo do sistema remoto para o seu local.

Faça o mesmo script também no seu sistema local, mas em vez disso permdata_ok.txt use permdata_bad.txt .

Agora vem o truque. Compare estes arquivos juntos!

O comando é: diff -urNw permdata_bad.txt permdata_ok.txt . Sua sintaxe de saída não será muito bonita se você não for um desenvolvedor, mas pode se acostumar com isso.

Você verá as diferenças nos modos de arquivo e no arquivo. Se houver muita diferença, defina-a manualmente.

Como nem todos os arquivos existem em ambos os sistemas, você precisará de um raciocínio racional.

Se o seu sistema é sensível à segurança, é melhor definir para 700 / 600 tudo no primeiro passo. Então você terá muito mais problemas relacionados à permissão mais tarde, mas não causará violação de segurança.

    
por 02.09.2018 / 19:11
0

Se você tiver um backup, mesmo que seja antigo, use star :

cd /
star -xpU -meta pat=etc* < backup.tar

Ths não restaura o conteúdo, mas apenas os metadados dos arquivos, por exemplo, proprietário das permissões ....).

Se você tiver uma segunda instalação com a mesma versão do sistema operacional, faça um backup de metadados a partir desse sistema usando:

cd /
star -c -meta etc > /tmp/backup.tar

e depois extrair os metadados no sistema corrompido usando:

cd /
star -xpU -meta < backup.tar

Se isso não se aplicar a você, você precisará reinstalar ...

Veja a página de manual link para obter mais informações.

Como mencionado por @ dsstorefile1, copiar metadados de outro sistema será apenas uma solução completa se não houver arquivos no sistema corrompido que estejam faltando no sistema de refefence, mas você poderá verificar os arquivos em / etc / após a meta restauração de dados para arquivos que são tão jovens quanto a cura, mas mais antigos que a restauração e ainda tem 777.

BTW: star também pode ser usado para comparar as permissões, pois star -diff permite comparar o conteúdo do arquivo e todos os metadados e, mais importante, star permite configurar o que é comparado usando a opção diffopts= .

Portanto, se você tiver um backup de outro sistema semelhante, poderá executar:

cd /
star -diff -v diffopts=perm pat=etc* < backup.tar

para comparar apenas as permissões. Se esse backup foi criado com star -c -dump ... ,

cd /
star -diff -vv diffopts=perm,dir pat=etc* < backup.tar

também listará os arquivos que estão no sistema local, mas que estão faltando no backup.

    
por 02.09.2018 / 18:29