Não há bala mágica aqui. As permissões carregam informações que nem sempre são redundantes.
Se você tivesse feito isso em um diretório do sistema, seu sistema estaria em um estado muito ruim, porque você teria que se preocupar com setuid e setgid bits, e sobre arquivos que não deveriam ser legíveis pelo mundo, e sobre arquivos que devem ser escritos em grupo ou mundo.
Em um diretório por usuário, você precisa se preocupar com arquivos que não devem ser legíveis para o mundo. Ninguém pode te ajudar lá.
Quanto à executabilidade, uma boa regra seria fazer com que tudo que não pareça ser executado, não seja executável. O kernel pode executar scripts cujos primeiros dois bytes são #!
, binários ELF cujos primeiros quatro bytes são \x7fELF
onde \x7f
é o byte com o valor 12 e alguns tipos de arquivos mais raros (a.out, qualquer coisa registrada com %código%). Portanto, o seguinte comando deve restaurar suas permissões para um estado razoável (assume bash 4 ou zsh, caso contrário use binfmt_misc
para percorrer a árvore de diretórios; aviso, digitado diretamente no navegador):
for x in **/*; do
if ! [ -f "$x" ]; then continue; fi # skip all but regular files
case $(head -c 4 "$x") in
"#!"??) :;; # skip script
"\x7fELF") :;; # skip ELF executable
*) chmod a-x "$x";;
esac
done
Observe que há uma maneira simples de fazer backup e restaurar permissões de uma árvore de diretórios, no Linux e possivelmente em outros unices com suporte a ACL:
getfacl -R >saved-permissions
setfacl --restore=saved-permissions