No hay una bala mágica aquí. Los permisos llevan información que no siempre es redundante.
Si hubiera hecho esto en un directorio del sistema, su sistema estaría en muy mal estado, porque tendría que preocuparse por los bits setuid y setgid, y por los archivos que no deberían ser legibles en todo el mundo, y por los archivos que se supone que se pueden escribir en grupo o en el mundo.
En un directorio por usuario, debe preocuparse por los archivos que no deberían ser legibles en todo el mundo. Nadie puede ayudarte allí.
En cuanto a la capacidad de ejecución, una buena regla general sería hacer que todo lo que no parece que pueda ejecutarse, sea no ejecutable. El kernel puede ejecutar scripts cuyos primeros dos bytes son #!
, binarios ELF cuyos primeros cuatro bytes son \x7fELF
donde \x7f
está el byte con el valor 12 y algunos tipos de archivos más raros (a.out, cualquier cosa registrada con binfmt_misc
). Por lo tanto, el siguiente comando debería restaurar sus permisos a un estado razonable (supone bash 4 o zsh; de lo contrario, use find
para recorrer el árbol de directorios; advertencia, escrita directamente en el 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
Tenga en cuenta que hay una manera simple de hacer una copia de seguridad y restaurar los permisos de un árbol de directorios, en Linux y posiblemente en otros dispositivos compatibles con ACL:
getfacl -R >saved-permissions
setfacl --restore=saved-permissions
/
otro directorio?