You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux中如何统计可访问指定文件的用户数量及列出相关用户?

Linux下统计可访问指定文件的用户数量及列出用户列表的方法

Linux的文件权限体系和Windows不同,要统计/列出能访问指定文件的用户,得结合文件本身权限、所属用户/组,甚至目录权限、ACL规则来判断,下面是具体方法:

一、快速判断范围(基于基础权限)

先通过ls -l 目标文件或stat -c "%a %U %G" 目标文件获取文件的权限码、所有者、所属组:

  • 比如输出644 alice dev,表示所有者alice有读写权限,dev组用户有读权限,其他用户有读权限。
  1. 如果其他用户(other)权限允许访问(比如权限码最后一位是4/5/6/7,对应读/读执行/读写/读写执行):

    • 所有系统内的有效用户都能访问,统计数量直接用:
      cat /etc/passwd | wc -l
      
    • 列出所有用户可以直接提取用户名:
      cut -d: -f1 /etc/passwd
      
  2. 如果其他用户权限不允许:

    • 能访问的用户包括文件所有者 + 所属组的所有成员。
    • 统计数量:
      # 获取所属组成员数量,加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规则,也会影响访问权限。这种情况可以用脚本遍历所有用户,逐个验证:

  1. 新建脚本文件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[@]} 个用户"
    
  2. 给脚本加执行权限:

    chmod +x check_file_access.sh
    
  3. 运行脚本(需要sudo权限,因为要切换用户验证):

    sudo ./check_file_access.sh /path/to/your/file
    

这个脚本会准确列出所有能读取目标文件的用户并统计总数。如果要验证写或执行权限,把脚本里的test -r换成test -w或test -x即可。

内容的提问来源于stack exchange,提问作者MPSC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 03:35:17