Không có viên đạn ma thuật nào ở đây. Các quyền mang thông tin không phải lúc nào cũng dư thừa.
Nếu bạn đã thực hiện việc này trong một thư mục hệ thống, hệ thống của bạn sẽ ở trạng thái rất xấu, bởi vì bạn phải lo lắng về các bit setuid và setgid và về các tệp không được đọc trên thế giới và về các tệp được cho là nhóm hoặc thế giới có thể ghi.
Trong thư mục theo người dùng, bạn phải lo lắng về các tệp không thể đọc được trên thế giới. Không ai có thể giúp bạn ở đó.
Đối với khả năng thực thi, một quy tắc tốt sẽ là làm cho mọi thứ trông không giống như nó có thể được thực thi, không thể thực hiện được. Các hạt nhân có thể thực hiện các kịch bản mà hai byte đầu tiên là #!
, mã nhị phân ELF có bốn byte đầu tiên là \x7fELF
nơi \x7f
là byte với giá trị 12, và một vài loại tập tin hiếm (a.out, bất cứ điều gì đã đăng ký với binfmt_misc
). Do đó, lệnh sau sẽ khôi phục quyền của bạn về trạng thái hợp lý (giả sử bash 4 hoặc zsh, nếu không thì sử dụng find
để duyệt qua cây thư mục; cảnh báo, được nhập trực tiếp vào trình duyệt):
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
Lưu ý rằng có một cách đơn giản để sao lưu và khôi phục quyền của cây thư mục, trên Linux và có thể các thông báo khác có hỗ trợ ACL:
getfacl -R >saved-permissions
setfacl --restore=saved-permissions
/
hoặc thư mục khác?