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.