Tu nie ma magicznej kuli. Uprawnienia zawierają informacje, które nie zawsze są zbędne.
Jeśli zrobiłbyś to w katalogu systemowym, twój system byłby w bardzo złym stanie, ponieważ musiałbyś się martwić o bity setuid i setgid oraz o pliki, które nie powinny być czytelne dla całego świata, oraz o pliki które mają być zapisywane w grupie lub w świecie.
W katalogu dla poszczególnych użytkowników musisz się martwić o pliki, które nie powinny być czytelne w świecie. Nikt ci tam nie pomoże.
Jeśli chodzi o wykonywalność, dobrą zasadą byłoby, aby wszystko, co nie wygląda na to, że mogłoby być wykonane, było niewykonalne. Jądro może wykonywać skrypty, których pierwsze dwa bajty są #!
, binaria ELF których pierwsze cztery bajty są \x7fELF
gdzie \x7f
jest bajt o wartości 12, a kilka typów plików rzadsze (a.out, cokolwiek zarejestrowanych binfmt_misc
). Dlatego następujące polecenie powinno przywrócić twoje uprawnienia do rozsądnego stanu (zakłada bash 4 lub zsh, w przeciwnym razie użyj find
do przejścia przez drzewo katalogów; ostrzeżenie wpisane bezpośrednio w przeglądarce):
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
Należy pamiętać, że istnieje prosty sposób tworzenia kopii zapasowych i przywracania uprawnień drzewa katalogów, w systemie Linux i ewentualnie innych unikach z obsługą ACL:
getfacl -R >saved-permissions
setfacl --restore=saved-permissions
/
innym katalogu?