我正在运行 Debian 服务器,并为少数朋友提供 shell 访问权限。我想向这些普通用户隐藏正在运行的进程,例如,top
只显示他们自己的进程,而不显示任何其他人启动的进程。但显然 root 应该可以看到所有进程。
我该怎么做?我见过许多提供 shell 帐户的共享托管服务都使用这种方法,但我自己还没找到办法。
答案1
只有 Linux 才不可能。使用 SeLinux 或 GrSecurity,您可以“隐藏”(实际上,您不授予其访问权限)用户之间的进程。这有点复杂,但并非不可能。
答案2
有命令行选项 -U
按用户监控:-U someone 仅监控具有与给定匹配的 UID 或用户名的进程。这将匹配实际、有效、已保存和文件系统 UID。
或 -u
按用户监控:-u someone 仅监控具有给定的有效 UID 或用户名的进程。
我真的不知道如何有效地对具有命令行访问权限的用户强制执行此操作。考虑到用户可以访问命令行,他们可以使用各种其他工具来查看其他人的进程。
答案3
如果你对 SELinux 不感兴趣,你可以可能通过对 /proc/ 中的 PID 子目录的权限进行创造性的改进,可以解决这个问题,但必须进行一些大规模的测试。
答案4
使用 重新挂载 procfshidepid=1
不需要 SELinux 或 GRSecurity,并且应该在较新的内核中可用。只需使用与现在相同的挂载选项重新添加 procfs 即可,/etc/fstab
或者更改现有的(不太可能的)条目。