导读:本期聚焦于老毕创作的《如何配置CentOS系统以限制用户对系统进程的访问权限》,敬请观看详情。把普通用户放到生产服务器上,常常会看到他能用ps aux翻出root启动的进程,甚至顺着命令行参数摸到敏感配置。这种越权查看在多人共用主机时是实打实的风险。CentOS默认安装的procps工具集并不隔离进程视图,所有登录用户都能枚举全部PID。通过修改systemd的隐藏挂载选项、调整/proc权限以及使用cgroup隔离,可以让指定用户只能看见自己的进程树。本文说明具体的pam和mount配置步骤,并对比两种方案的运维成本,帮你按团队规模选合适做法。

在CentOS服务器多人共用场景下,默认的所有用户均可查看全部系统进程的状态,不仅暴露了其他用户的命令行参数,也可能泄露数据库密码等敏感信息。通过合理的系统配置,我们可以限制特定用户只能看到自己相关的进程,从而提升主机的安全性和多租户隔离能力。本文从原理到实践,逐步说明在CentOS中限制用户进程访问权限的完整方法。

如何配置CentOS系统以限制用户对系统进程的访问权限

理解Linux进程可见性机制与/proc作用

Linux系统的进程信息主要来源于虚拟文件系统/proc。每一个运行的进程都会在/proc下以数字PID命名创建目录,里面包含cmdline、environ、status等文件。像pstop这类工具本质上就是遍历/proc目录来收集数据。在CentOS默认的systemd初始化系统中,所有登录会话都共享同一个挂载命名空间,因此任何用户执行ps aux都能读到全部进程的目录内容。

内核从3.3版本开始引入了hidepid挂载选项,可以直接控制/proc的可见性规则。当使用hidepid=2挂载时,非root用户只能看到自己拥有的进程,其他进程目录虽然存在但无法访问,从而实现了进程视图隔离。理解这一点是后续配置的基础,因为我们并不是去修改ps命令本身,而是从文件系统层面切断越权读取的路径。

除了hidepid,还有gid选项可以配合,指定某个用户组不受隐藏限制。例如将运维组设为白名单,让他们仍可使用传统监控脚本。这种设计比完全禁止更为灵活,也符合企业里不同角色权限不同的实际情况。在动手修改前,建议先在测试机上确认CentOS内核版本支持该特性,避免生产环境重启后无法挂载。

通过fstab与systemd重新挂载/proc实现限制

最稳定的做法是修改/etc/fstab并配合systemd的挂载单元,让系统启动时自动以隔离模式挂载/proc。我们可以直接在fstab中加入如下配置行,指定hidepid和允许的组。

# 在 /etc/fstab 中添加
proc    /proc    proc    defaults,hidepid=2,gid=procview    0    0

上面的配置中,gid=procview表示名为procview的用户组中的成员依然能看到所有进程。我们需要提前用groupadd procview创建该组,并把管理员加入。修改fstab后执行mount -o remount /proc即可立即生效,不需要重启。但要注意,某些依赖读取全部进程的工具如一些老旧的监控agent可能会失效,需要评估影响。

由于CentOS 7及以上使用systemd,仅仅改fstab有时会被systemd的proc挂载单元覆盖。我们需要新建文件/etc/systemd/system/proc-hidepid.service,内容如下,确保开机早于其他服务完成重挂。

[Unit]
Description=Remount /proc with hidepid
DefaultDependencies=no
Before=local-fs.target

[Service]
Type=oneshot
ExecStart=/bin/mount -o remount,rw,nosuid,nodev,noexec,relatime,hidepid=2,gid=procview -t proc proc /proc
RemainAfterExit=yes

[Install]
WantedBy=local-fs.target

启用该服务后,重启机器验证普通用户执行ps -ef只能列出自身进程。这种方案的优点是对所有新会话统一生效,缺点是需要谨慎处理依赖全量进程信息的自动化脚本。如果团队规模小、用户固定,fstab方式运维成本最低;若用户动态变化频繁,则建议结合目录权限脚本来管理。

利用cgroup与用户会话隔离增强控制

对于需要更细粒度控制的场景,例如只允许某用户看特定服务的进程,可以结合cgroup v2与systemd用户实例。systemd默认会给每个用户分配user-.slice,我们可以借助systemctl set-property限制用户可使用的进程数,并配合Delegate=yes让用户级tree内部自管理。

# 限制用户testuser最多看到和管理自身cgroup内进程
systemctl set-property user@1000.slice Delegate=yes
echo 200 > /sys/fs/cgroup/user.slice/user-1000.slice/pids.max

上面的命令将UID 1000的用户进程数上限设为200,且通过cgroup命名空间使其在部分工具中只枚举到所属slice的进程。虽然ps仍依赖/proc,但结合前面hidepid后,用户连其他cgroup的目录都无法读取,实现了双重隔离。此方法适合多租户容器宿主场景,能够防止某个用户通过大量fork耗尽系统PID。

从架构角度看,cgroup方案比单纯改/proc更偏向资源与视图综合管控。它的配置稍复杂,但能和Kubernetes、Podman等上层编排系统更好地对接。如果企业已经使用systemd-run启动用户任务,只需在单元文件加入ProtectProc=invisible即可让该单元内进程看不见别人,这是一种更现代的声明式做法,值得在新部署的CentOS 8以后版本中推广。

综合来看,限制用户对系统进程的访问权限并不是单一命令能解决的,而是挂载选项、用户组策略与cgroup三者的配合。小团队用hidepid加fstab一天就能落地;中大型环境应把procview组与systemd单元结合,并写进配置管理工具如Ansible,保证节点间策略一致。只有这样,才能在便利性与安全性之间找到平衡。

CentOS进程权限用户隔离修改时间:2026-08-17 00:20:14

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。