Linux下无需切换用户,如何查询其他用户对指定文件的权限?
在Linux中不切换用户查询非当前用户对文件的权限
当然有办法,以下是几种不用su切换用户就能实现的实用方法:
1. 使用access命令(部分系统可用)
access命令可以直接测试指定用户对文件的权限,语法如下:
access -u 目标用户名 -r/-w/-x 文件路径
-r:测试读权限-w:测试写权限-x:测试执行权限
命令返回0表示该用户拥有对应权限,非0则没有。比如测试用户alice对/var/log/syslog的读权限:
access -u alice -r /var/log/syslog echo $? # 输出0表示可读,非0不可读
2. 用getfacl分析ACL权限
如果文件设置了ACL(访问控制列表),getfacl能列出详细的权限规则,帮你判断目标用户的权限:
getfacl 文件路径
输出里会包含:
- 所有者(
owner)、所属组(group)的基础权限 - 针对特定用户的ACL条目(比如
user:alice:rwx) - 针对特定组的ACL条目
- 掩码(
mask)限制的有效权限
结合目标用户的所属组(用id 目标用户名查看),就能精准判断其实际拥有的权限。
3. 手动计算基础权限
如果文件只有传统的Unix权限位,你可以通过两步手动判断:
- 查看文件的权限位和属主属组:
ls -l 文件路径
比如输出-rwxr-xr-- 1 bob staff 1024 Aug 1 10:00 test.txt,表示所有者bob有rwx,组staff有r-x,其他用户有r--。
2. 查看目标用户的UID、GID和所属组:
id 目标用户名
对比文件的属主、属组,就能对应判断权限:
- 如果目标用户是文件所有者,匹配所有者权限位
- 如果目标用户属于文件的所属组,匹配组权限位
- 否则匹配其他用户权限位
4. 用runuser以目标用户身份测试(需root权限)
如果你有root权限,可以用runuser直接以目标用户的身份执行权限测试命令,不用切换会话:
runuser -l 目标用户名 -c 'test -r 文件路径 && echo "可读" || echo "不可读"' runuser -l 目标用户名 -c 'test -w 文件路径 && echo "可写" || echo "不可写"' runuser -l 目标用户名 -c 'test -x 文件路径 && echo "可执行" || echo "不可执行"'
这个方法最直接,因为是模拟目标用户的实际访问情况,但需要root权限才能执行。
内容的提问来源于stack exchange,提问作者Fifi
相关产品推荐
相关产品推荐

