Linux中如何统计可访问指定文件的用户数量及列出相关用户?
Linux下统计可访问指定文件的用户数量及列出用户列表的方法
Linux的文件权限体系和Windows不同,要统计/列出能访问指定文件的用户,得结合文件本身权限、所属用户/组,甚至目录权限、ACL规则来判断,下面是具体方法:
一、快速判断范围(基于基础权限)
先通过ls -l 目标文件或stat -c "%a %U %G" 目标文件获取文件的权限码、所有者、所属组:
- 比如输出
644 alice dev,表示所有者alice有读写权限,dev组用户有读权限,其他用户有读权限。
如果其他用户(other)权限允许访问(比如权限码最后一位是4/5/6/7,对应读/读执行/读写/读写执行):
- 所有系统内的有效用户都能访问,统计数量直接用:
cat /etc/passwd | wc -l - 列出所有用户可以直接提取用户名:
cut -d: -f1 /etc/passwd
- 所有系统内的有效用户都能访问,统计数量直接用:
如果其他用户权限不允许:
- 能访问的用户包括文件所有者 + 所属组的所有成员。
- 统计数量:
# 获取所属组成员数量,加1(所有者) group_member_count=$(getent group $(stat -c "%G" 目标文件) | cut -d: -f4 | tr ',' '\n' | wc -l) total=$((group_member_count + 1)) echo "总计:$total 个用户" - 列出具体用户:
# 输出所有者 stat -c "%U" 目标文件 # 输出所属组成员 getent group $(stat -c "%G" 目标文件) | cut -d: -f4 | tr ',' '\n'
二、精确统计/列出(考虑目录权限、ACL等)
上面的方法只看文件本身权限,实际中用户要访问文件,还需要有路径上所有目录的执行权限(才能进入目录),如果文件设置了ACL规则,也会影响访问权限。这种情况可以用脚本遍历所有用户,逐个验证:
新建脚本文件
check_file_access.sh:#!/bin/bash TARGET_FILE="$1" if [ -z "$TARGET_FILE" ] || [ ! -f "$TARGET_FILE" ]; then echo "请传入有效的文件路径" exit 1 fi access_users=() echo "具备访问权限的用户:" # 遍历系统所有有效用户 while IFS=: read -r user _ _ _ _ _ _; do # 切换到该用户,尝试读取文件(可根据需要换成-w(写)或-x(执行)) if sudo -u "$user" test -r "$TARGET_FILE" 2>/dev/null; then echo "$user" access_users+=("$user") fi done < /etc/passwd echo "------------------------" echo "总计:${#access_users[@]} 个用户"给脚本加执行权限:
chmod +x check_file_access.sh运行脚本(需要sudo权限,因为要切换用户验证):
sudo ./check_file_access.sh /path/to/your/file
这个脚本会准确列出所有能读取目标文件的用户并统计总数。如果要验证写或执行权限,把脚本里的test -r换成test -w或test -x即可。
内容的提问来源于stack exchange,提问作者MPSC
相关产品推荐
相关产品推荐

