检查不同用户在Linux上对文件的读写权限

13

我如何检查一个没有 shell 分配的特定用户是否可以写入或读取文件?

以 apache 用户为例... touch 或其他命令中有任何选项吗?

谢谢

2个回答

28

"test" 命令是为此使用情况而设计的。

sudo -u otheruser test -r /path/to/file

如果 otheruser 可以读取该文件,则返回0,否则返回1。您可以运行test -r /path/to/file; echo "$?"查看 test 命令的返回代码。

使用test -w测试写入权限,使用test -x测试执行权限。


7

测试读取权限

尝试读取文件开头并丢弃正常输出。然后,您可以查找空字符串(成功)或“权限被拒绝”消息(您还可以检查其他错误消息,如“没有这样的文件或目录”)。例如:

head -1 /path/to/file 2>&1 > /dev/null | grep 'Permission denied'

测试写入权限

使用带有 -c(--no-create)选项的 touch 命令。将标准输出和标准错误流合并,再次搜索空字符串(成功)或错误消息:

touch -c /path/to/file 2>&1 | grep 'Permission denied'

如果您明确测试目录的写访问权限,请确保测试的是目录而不是其中包含的文件,因为使用 -c 选项时,即使在您没有写访问权限的目录中,文件不存在也不会出现错误条件:
来自维基百科:touch (Unix)

-c,如果文件不存在,则不创建文件并且不报告此情况

以特定用户身份进行测试

问题的最后一部分是如何以不同的用户身份检查此内容。作为 root 用户执行以下命令 "sudo -u [username] [command]",使用建议的用户:
sudo -u apache touch -c /path/to/file 2>&1

4
如果您没有sudo的根权限怎么办? - Siwel
2
好观点-问题在于如何检查特定用户的权限,因此假设“checker”有根权限并不太困难。如果我作为非根用户想要知道另一个用户的权限/访问权限,我看不到明显的方法来做到这一点,除非询问a)系统管理员或b)该用户。 - bgstech
3
是的,这是我希望在没有root权限的情况下完成的事情,但我们找不到解决办法... - Siwel
@Siwel 如果您先查看特定目录的权限和用户/组所有权,然后将其与您感兴趣的用户进行比较,会怎样呢?因此,如果一个目录是userA:groupA - 具有drwxrwxr-x权限,并且userB不属于groupA,则无法访问。 - bgstech

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接