Il n'y a pas de solution miracle ici. Les autorisations contiennent des informations qui ne sont pas toujours redondantes.
Si vous aviez fait cela dans un répertoire système, votre système serait dans un très mauvais état, car vous devriez vous soucier des bits setuid et setgid, et des fichiers qui ne sont pas censés être lisibles par le monde, et des fichiers qui sont censés être inscriptibles en groupe ou dans le monde.
Dans un répertoire par utilisateur, vous devez vous soucier des fichiers qui ne sont pas censés être lisibles par le monde. Personne ne peut vous y aider.
En ce qui concerne l'exécutabilité, une bonne règle de base serait de faire en sorte que tout ce qui ne semble pas pouvoir être exécuté soit non exécutable. Le noyau peut exécuter des scripts dont les deux premiers octets sont #!
, des binaires ELF dont les quatre premiers octets sont \x7fELF
où \x7f
est l'octet avec la valeur 12, et quelques types de fichiers plus rares (a.out, tout ce qui est enregistré avec binfmt_misc
). Par conséquent, la commande suivante devrait restaurer vos autorisations dans un état raisonnable (suppose que bash 4 ou zsh, sinon utilisez find
pour parcourir l'arborescence de répertoires; avertissement, tapé directement dans le navigateur):
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
Notez qu'il existe un moyen simple de sauvegarder et de restaurer les autorisations d'une arborescence de répertoires, sous Linux et éventuellement d'autres unités avec prise en charge ACL:
getfacl -R >saved-permissions
setfacl --restore=saved-permissions
/
ou dans un autre répertoire?