You need to enable JavaScript to run this app. Linux系统非属主用户如何查询被其他用户写入/锁定的文件对应进程
优惠活动
大模型
产品
解决方案
定价
更多

Linux系统非属主用户如何查询被其他用户写入/锁定的文件对应进程

问题根因

这一现象是Linux系统的安全访问限制导致的:

  • fuser、lsof这类查询进程打开文件的工具,核心原理是遍历/proc目录下所有进程的/proc/<pid>/fd子目录,匹配目标文件的inode信息
  • 大部分Linux发行版默认将/proc文件系统的hidepid参数配置为1,这种配置下,普通用户仅能查看自己启动的进程的相关信息,无权读取其他用户进程的/proc/<pid>/fd目录内容,因此无法查到其他用户持有的文件句柄
  • 目录的写入权限不代表用户有权限查看其他进程对目录内文件的占用信息,二者权限逻辑完全独立
可行解决方案

下面是3种不同场景的实现方式:

方案1:配置sudo提权(推荐,安全性最高)

给需要查询的用户配置sudo权限,仅允许其针对/apps/tmp路径下的文件执行fuser、lsof命令,不会放开多余权限:

  1. 以root用户执行visudo编辑sudo规则文件
  2. 新增如下规则,可根据需要调整允许的用户/用户组:
# 允许所有普通用户无密码查询/apps/tmp下的文件占用
%users ALL=(ALL) NOPASSWD: /usr/bin/fuser /apps/tmp/*, /usr/bin/lsof /apps/tmp/*
  1. 后续B/C/D用户执行查询时,加上sudo前缀即可:
    $ sudo fuser /apps/tmp/Test.txt
    $ sudo lsof /apps/tmp/Test.txt

方案2:调整/proc挂载参数(全局生效,安全性较低)

如果需要全局放开所有用户查看进程信息的权限,可以修改/proc的挂载配置,关闭hidepid限制:

  1. 编辑/etc/fstab文件,找到proc的挂载行,修改为:
    proc /proc proc defaults,hidepid=0 0 0
  2. 执行mount -o remount /proc立即生效,无需重启

注意:该配置会允许所有普通用户查看系统所有进程的打开文件、启动参数等敏感信息,生产环境不建议使用。

方案3:无权限替代判断逻辑(无需提权)

如果不想修改权限配置,可以通过判断文件的修改时间是否持续更新,间接确认文件是否处于写入状态,普通用户即可执行:

# 间隔10秒两次检查文件的最后修改时间,一致则说明写入已结束
prev_mtime=$(stat -c %Z /apps/tmp/Test.txt)
sleep 10
curr_mtime=$(stat -c %Z /apps/tmp/Test.txt)
if [ "$prev_mtime" -eq "$curr_mtime" ]; then
    echo "文件写入完成"
else
    echo "文件正在写入中"
fi

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 19:00:04