检查其他用户是不是对 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 上的文件具有读/写权限的主要内容,如果未能解决你的问题,请参考以下文章