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

理解Linux进程可见性机制与/proc作用
Linux系统的进程信息主要来源于虚拟文件系统/proc。每一个运行的进程都会在/proc下以数字PID命名创建目录,里面包含cmdline、environ、status等文件。像ps、top这类工具本质上就是遍历/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,保证节点间策略一致。只有这样,才能在便利性与安全性之间找到平衡。