在 Linux 中有没有办法让一个非 root 用户检查另一个非 root 用户是否有权访问文件夹/文件?

Era*_*dan 7 permissions files

场景是这样的 - 我有一个可能无法以 root 身份运行的命令行程序,部分要求是警告其他用户是否对某个文件夹/文件具有写权限

例如

  • 我以非 root 用户 A 身份运行
  • 我想得到以下问题的答案:“用户 B 是否对文件夹 F 具有写权限”

所以我的问题是

  • 甚至可以以root用户身份进行操作吗?如果是这样怎么办?
  • 有没有办法以非 root 用户身份执行此操作?

der*_*ert 6

通常,知道用户 B 是否可以写入目录 D 的唯一方法是让用户 B 尝试写入目录 D。

所以,作为 root,你可以 su给用户并尝试它。尽管这可能不是 100% 准确,因为用户登录并输入其密码可能会改变一些事情(例如,pam 模块可能会根据用户的密码设置加密密钥)。

几乎与 root 一样准确,您可以su对用户使用access(2)系统调用或类似方法。如果您使用 ,这可能就是 shell 所做的test -w,也是/usr/bin/test如此。虽然正如联机帮助页警告的那样,在 NFSv2 上,实际检查是由服务器完成的,但是对access系统调用的测试是在本地完成的,所以它可能是错误的。同样,FUSE 文件系统也可以这样做。

(手册access(2)页还提到了一个竞争条件,这是您所做的事情的基础:B 对 D 的权限可能会在您检查和 B 实际尝试写入 D 之间发生变化。)

除此之外,您必须决定您愿意接受的准确程度:

  1. 您可以统计目录,并检查用户和组(如其他几个答案所示)
  2. 您还可以检查目录上的 ACL。

但即使你这样做,以下内容也会绊倒你:

  1. 对于 NFS 和其他各种网络文件系统,服务器决定是否允许访问。它可以根据自己的喜好做出决定。例如,考虑各种压缩 NFS 导出选项。
  2. 权限检查实际上是由文件系统完成的;非 Unix 文件系统可能会给出意想不到的答案(Unix 用户如何映射到 NTFS 的 SID?)。所有的赌注都与例如 FUSE 文件系统有关。


Mar*_*cel 2

回答第一个问题(以root身份运行):

是 ->su - userB -c '<command as userB to touch file in folderF>'

回答第二个问题:

可能 -> 仅当非用户与 userB 位于同一组并尝试触摸folderF 中的文件时