Lar*_*ang 22 permissions chmod files
嗯,具体来说,它是chmod -R 755
。现在每个文件都是可执行的,这是我不想要的。我想我应该查看每个文件的前两个字节#!
,但这会涵盖所有内容吗?我应该使用file
查看所有内容并以此为基础做出决定吗?或者,更有可能的是,有没有更好的方法来做到这一点?
递归遍历目录并在不“应该”可执行的文件上设置 -x 的首选方法是什么?
Gil*_*il' 16
这里没有灵丹妙药。权限携带并不总是多余的信息。
如果您在系统目录中执行此操作,您的系统将处于非常糟糕的状态,因为您必须担心 setuid 和 setgid 位,以及不应该是世界可读的文件以及文件应该是组或世界可写的。
在每个用户的目录中,您必须担心不应该是世界可读的文件。在那里没有人可以帮助你。
至于可执行性,一个好的经验法则是让所有看起来不能执行的东西都不可执行。内核可以执行前两个字节是 的脚本,前#!
四个字节是\x7fELF
其中\x7f
值为 12 的字节的ELF 二进制文件,以及一些罕见的文件类型(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
Run Code Online (Sandbox Code Playgroud)
请注意,在 Linux 和其他支持 ACL 的 unice 上,有一种简单的方法可以备份和恢复目录树的权限:
getfacl -R >saved-permissions
setfacl --restore=saved-permissions
Run Code Online (Sandbox Code Playgroud)
我相信你会想要类似的东西
find dir -type f -exec chmod ugo-x '{}' +
这会在目录中递归查找所有常规文件(不包括目录和设备)并删除可执行位。
我将从这里开始,然后努力制作应该是可执行的、可执行的文件。
以下应该完全按照您的要求工作(它将找到所有常规文件,将它们搜索为 #! 然后删除 x 位(如果未找到)
find . -type f | xargs grep -L #! | xargs chmod ugo-x
Run Code Online (Sandbox Code Playgroud)
可能是上述版本的更好版本(更少的管道)
find . -type f -exec grep -L #! '{}' + | xargs chmod ugo-x
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15285 次 |
最近记录: |