cod*_*nix 16 unix linux directory permissions
嗨,我有2个关于Linux目录权限的问题,我不明白.
我从名为Documents的文件夹中删除了执行标志.之后,我不能使用cd,但我仍然可以从父目录中执行"ls Documents",它仍然会列出Documents目录中的文件.我虽然缺少x-flag否认阅读这个目录?
然后我想知道为什么目录上的粘性位被发明了.我听说它被使用,以便用户无法删除其他用户创建的临时文件.但是这个IMO违反了删除文件的规则,我们只需要这个目录的权限.为什么不简单地给每个用户一个单独的/ tmp /目录而不是在规则系统中引入异常?我知道国旗的作用,但我想知道为何发明的原因.
Dav*_*itt 15
执行位:遍历目录需要执行位.读取目录的权限由读取位控制.
请参阅此shell对话框以获取此差异的示例:
作为根:
# find foo/ -ls drwxr-xr-- 3 root root 4096 Apr 27 12:57 foo/ drwxr-xr-x 2 root root 4096 Apr 27 12:57 foo/bar -rw-r--r-- 1 root root 0 Apr 27 12:57 foo/bar/file
作为用户:
$ ls foo/ bar $ find foo/ -ls drwxr-xr-- 3 root root 4096 Apr 27 12:57 foo/ find: foo/: Permission denied $
通常的用法是另一种方式:删除读取权限但允许遍历,例如允许Web服务器进入〜/ public_html但不允许它通过设置执行默认索引列表--x.
粘性位:这是为了避免在目录中删除的默认规则而发明的/tmp./tmp可能位于/home与不同配额不同的卷上和/或由不同配额管理.
该FHS编纂/ tmp目录 "适用于需要临时文件的程序",而"[他们]不能假定/ tmp中的任何文件或目录被调用之间保留".
就个人而言,我认为/ tmp是vi globals.h && make install被认为是安装程序的异教徒时代的遗产.现在程序应该尊重$TMPDIR,它应该指向一个用户私有系统管理的目录,至少应该在重新启动时清除它.甚至像tmpfile(3)这样的标准化函数也没有规定实际路径.虽然/ tmp似乎有重要的兼容性和安全性问题.但请注意,最后一封邮件是从1999年开始的,因此事情可能会发生变化.
偶然发现了这一点,因为它的谷歌搜索评分很高.执行位问题还没有真正得到解答,所以......
如果未在目录上设置执行位,则它不是"可遍历的",这意味着shell和文件浏览器应设计为禁止您将该目录设置为当前目录,尽管该功能无法通过该文件强制执行 - 系统本身.什么是文件系统并不允许在不执行目录的任何信息,其他不是包含文件的文件名-所以没有日戳或这些文件的文件权限,并没有这些文件的阅读,即使他们已经阅读设置.