我有一个具有以下权限的目录:
lighttpd drwx------
其中包含以下文件:
lighttpd.pid -rw-r--r--
不幸的是,当尝试运行时:
cat lighttpd/lighttpd.pid
对于既不是所有者也不是所属组成员的用户,我收到以下消息:
cat: lighttpd/lighttpd.pid: 权限被拒绝
如何让既不是所有者也不是组成员的用户能够访问lighttpd.pid?
答案1
在目录外创建到该文件的硬链接将起作用 - EG ln lighttpd/lighttpd.pid example/lighttpd.pid
。用户example/lighttpd.pid
无需访问即可查看lighttpd/
。
答案2
x
授予“其他”目录的lighthttpd
执行/搜索 ( ) 权限。
$ chmod o+X lighthttpd
大写X
文件模式位选择器chmod
仅当文件是目录(或已具有某些用户的执行权限)时才启用执行/搜索。
当在目录上设置执行/搜索位时,受影响的用户可以进入(调用open()
)目录并访问其中的文件和目录。此外,他们还需要 read ( r
) 权限文件本身(根据问题已经设置)。
没有read( r
)权限在目录上,用户无法获取目录的内容,因此他们需要提前知道他们要访问的文件的名称。
如果底层文件系统支持Posix 访问控制列表,您还可以使用以下命令授予目录的执行/搜索权限setfacl
对于特定用户不调整所有者或组分配:
$ setfacl -m u:user:x lighthttpd
您可以通过验证文件系统是否已使用acl
挂载选项/运行来挂载来确定文件系统是否支持 Posix ACLmount
:
$ mount | grep /dev/sdaX
/dev/sdaX on /mountpoint type ext4 (rw,acl)
如果acl
mount 的输出中不存在,它可能仍然是该文件系统类型的默认选项之一。您可以通过以下方式验证这一点tune2fs
:
$ sudo tune2fs -l /dev/sdaX |grep acl
Default mount options: user_xattr acl
如果acl
没有启用您由于某种原因不想授予所有用户进入目录的能力,您可以按照拉基斯的建议并将您希望用户能够访问的文件链接到文件系统中的另一个路径名。
答案3
我没有深入阅读man setfacl
,但似乎你需要它。
man setfacl
部分内容:
例子
Granting an additional user read access setfacl -m u:lisa:r file Revoking write access from all groups and all named users (using the effective rights mask) setfacl -m m::rx file Removing a named group entry from a file's ACL setfacl -x g:staff file Copying the ACL of one file to another getfacl file1 | setfacl --set-file=- file2 Copying the access ACL into the Default ACL getfacl --access dir | setfacl -d -M- dir