Здесь нет волшебной пули. Разрешения несут информацию, которая не всегда избыточна.
Если бы вы сделали это в системном каталоге, ваша система была бы в очень плохом состоянии, потому что вам пришлось бы беспокоиться о битах setuid и setgid, а также о файлах, которые не должны быть доступны для чтения всем пользователям, и о файлах. которые должны быть написаны группой или миром.
В каталоге для каждого пользователя вам нужно беспокоиться о файлах, которые не должны быть доступны для чтения всем пользователям. Там никто не сможет тебе помочь.
Что касается выполнимости, хорошее эмпирическое правило состояло бы в том, чтобы сделать все, что не похоже на его выполнение, неисполнимым. Ядро может выполнять сценарии с первыми двумя байтами #!
, двоичные файлы 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
/
или другом каталоге?