检查其他用户是不是对 linux 上的文件具有读/写权限

Posted

技术标签:

【中文标题】检查其他用户是不是对 linux 上的文件具有读/写权限【英文标题】:Check if different user has read/write permissions to a file on linux检查其他用户是否对 linux 上的文件具有读/写权限 【发布时间】:2015-05-28 10:32:45 【问题描述】:

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

作为一个例子,我们可以使用 apache 用户...有没有 touch 选项或任何其他命令?

谢谢

【问题讨论】:

【参考方案1】:

“测试”命令专为此用例而设计。

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

如果其他用户可以读取该文件,则返回 0,如果其他用户无法读取该文件,则返回 1。可以运行test -r /path/to/file; echo "$?"查看test命令的返回码。

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

【讨论】:

【参考方案2】:

测试读取权限

尝试读取文件的开头并丢弃正常输出。然后,您可以查找空字符串(成功)或“Permission denied”消息(您还可以检查其他错误消息,例如“No such file or directory”)。例如:

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

测试写入权限

使用带有 -c (--no-create) 选项的 touch 命令。结合 stdout 和 stderr 再次搜索空字符串(成功)或错误:

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

如果您要明确测试目录的写访问权限,请确保测试目录而不是其中包含的文件,因为使用 -c 选项,即使文件不存在于目录中也不会出现错误情况您没有写入权限:

来自Wikipedia: touch (Unix)

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

作为特定用户进行测试

难题的最后一部分是如何以不同的用户身份进行检查。以 root 身份使用“sudo -u [username] [command]”以所需用户身份执行测试命令,因此请使用您建议的用户:

sudo -u apache touch -c /path/to/file 2>&1

【讨论】:

如果你没有 sudo 的 root 权限怎么办? 好点 - 问题是如何检查特定用户的权限,因此假设“checker”具有root权限并不是一件容易的事。如果我作为非 root 用户想知道另一个用户的权限/访问权限,那么如果不询问 a) 系统管理员或 b) 用户,我就看不到明确的方法...... 是的,这是我想在没有 root 的情况下做的事情,但我们找不到解决方案...... @Siwel 如果您从查看特定目录的权限和用户/组所有权开始,然后将其与您感兴趣的用户进行比较呢?因此,如果一个目录是 userA:groupA - 具有权限 drwxrwxr-x,并且 userB 不在 groupA 中,那么没有。

以上是关于检查其他用户是不是对 linux 上的文件具有读/写权限的主要内容,如果未能解决你的问题,请参考以下文章

linux常用命令

检查用户是不是对windows中的文件具有读取权限

Linux文件系统权限

Linux文件权限赋值

Linux脚本练习之script013-判断当前用户对指定参数文件,是否不可读并且不可写。

在Linux系统中,一个文件的访问权限是755,其含义是什么?