Тут немає ніякої чарівної кулі. Дозволи мають інформацію, яка не завжди є зайвою.
Якщо ви зробили це в системному каталозі, ваша система була б у дуже поганому стані, тому що вам доведеться турбуватися про встановлені і встановлені жорсткі біти, а також про файли, які не повинні бути читаними у всьому світі та про файли які повинні бути зареєстровані груповим або світовим.
У каталозі на кожного користувача ви повинні турбуватися про файли, які не повинні читатись у всьому світі. Там ніхто не може вам допомогти.
Що стосується виконуваності, то гарним правилом було б зробити так, щоб все, що не виглядало так, як воно могло бути виконане, було невиконаним. Ядро може виконувати скрипти, у яких перші два байти #!
, бінарні файли ELF, перші чотири байти яких є \x7fELF
де \x7f
байт зі значенням 12, та кілька рідкісних типів файлів (a.out, все, що зареєстровано у binfmt_misc
). Отже, наступна команда повинна відновити ваші дозволи до розумного стану (передбачає bash 4 або zsh, в іншому випадку використовуйте find
для переходу до дерева каталогів; попередження, введене безпосередньо в браузер):
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
Зауважте, що існує простий спосіб резервного копіювання та відновлення дозволів дерева каталогів у Linux та, можливо, інших об'єднань із підтримкою ACL:
getfacl -R >saved-permissions
setfacl --restore=saved-permissions
/
іншому каталозі?