可以看到其他用户的进程,是否属于设计缺陷?

MS Windows 下的受限用户只能看到自己的进程,而 Linux 下的受限用户能看到所有用户的进程。不仅能看到进程名,甚至连运行的命令行参数都能看到。这似乎并非单单 Linux 如此,其他的 Unix-like 系统好像也这样。

这是一种设计缺陷吗?按理来说,应该只允许超级用户查看其他用户的进程。如果是早期的设计缺陷,那么为何一直延续不修改呢?难道面临什么兼容性的问题?假如修改成只能看到自己的进程,我想不出会有什么兼容性问题。

我不知道「MS Windows 下的受限用户」是什么意思,但是 Linux 是没有「受限用户」这个概念的。
自从 Linux 3.3 开始,可以通过 hidepid 挂载参数来隐藏其它用户的进程信息。我也不知道为什么很少见到有人用这个,就像我很少见到有人设置比较严格的 umask 一样。

2赞

受限用户就是普通用户的意思, Windows 下的超级用户属于 Administrators 组,另外还有 Power Users 组和 Users 组等等. Power Users 能否看到其他用户的进程我不清楚,反正 Users 不能看到。当然这是以前我在 Windows XP 下测试发现的,现在的 Windows 是否有改动不得而知。

居然有 hidepid 挂载参数,我现在才知道。谢谢您的提示,等有时间我来玩玩,看是否存在什么兼容性问题。

网上搜到的

When using Linux the /proc filesystem can be remounted with additional arguments:
使用 Linux 时, /proc 可以使用其他参数重新挂载文件系统:

mount -o remount,rw,hidepid=2 /proc

  • hidepid=1 hides all processes information but not the process itself from other users, except root.
    hidepid=1 对其他用户隐藏所有进程信息,但不隐藏进程本身,但 root 除外。
  • hidepid=2 hides all processes from other users, except root.
    hidepid=2 对其他用户隐藏所有进程,但 root 除外。

Reasons not using hidepid=2:
不使用 hidepid=2 的原因:

This can be a problem for a lot of system and monitoring tools, which are executed with a specific user. Those tools should not run as root user.
对于许多系统和监视工具来说,这可能是一个问题,这些工具和监视工具是与特定用户一起执行的。这些工具不应以 root 用户身份运行。

For example, you are using htop to monitor your whole system, htop needs to be run as root user or with sudo to get the right privileges.
例如,您正在使用 htop 监视整个系统, htop 需要以 root 用户身份运行或使用sudo 获得正确的权限。

In a corporate network tools like Monit or Nagios are installed on servers and each tool has it’s own user.
在企业网络中,工具如 MonitNagios 安装在服务器上,每个工具都有自己的用户。

Using hidepid can result in using root accounts more often and this can result in a higher risk to get compromised.
使用 hidepid 可能会导致更频繁地使用 root 帐户,这可能会导致更高的泄露风险。

Advantages when using hidepid=1 or hidepid=2:
使用 hidepid=1 或 hidepid=2 时的优点:

The system becomes harder to compromise. For example you have a shared server and other users can connect via SSH to this server. Each user can access all processes and read process information.
系统变得更加难以妥协。例如,您有一个共享服务器,其他用户可以通过 SSH 连接到此服务器。每个用户都可以访问所有进程并读取进程信息。

Some applications can be started with username and password as an argument. Those information can be read by any user. Using hidepid=1 or hidepid=2 hides this information from other users.
某些应用程序可以使用用户名和密码作为参数启动。任何用户都可以读取这些信息。使用 hidepid=1 或 hidepid=2 会对其他用户隐藏此信息。

Conclusion: 结论:

Using hidepid can improve the security, but you have to know the disatvantages. For most users and systems it’s not necessary to hide the information.
使用 hidepid 可以提高安全性,但您必须了解缺点。对于大多数用户和系统,没有必要隐藏信息。

For example, if you have a single user system (desktop) you have already root privileges and it’s likely, that you are the only user working on this system.
例如,如果您有一个单用户系统(桌面),那么您已经拥有 root 权限,并且您很可能是唯一在此系统上工作的用户。

A dedicated company webserver should allow SSH logins only for system administrators and most of them needs root privileges for administrative tasks.
专用的公司 Web 服务器应仅允许系统管理员使用 SSH 登录,并且大多数管理员需要 root 权限才能执行管理任务。

There are also some best practices which can reduce the risk of information lost. You should never provide a password as a command line argument. Most applications provide a dedicated prompt to enter the password. If you need the application in a batch job, you should use configuration files, which are only accessible by the service user, to configure credentials.
还有一些最佳实践可以降低信息丢失的风险。切勿提供密码作为命令行参数。大多数应用程序都提供输入密码的专用提示。如果需要批处理作业中的应用程序,则应使用只有服务用户才能访问的配置文件来配置凭据。

2赞