“无人”用户的目的是什么?

Rad*_*anu 111 users username switch-user

在阅读List all human users 后,我注意到我的 Ubuntu 系统中有一个名为“nobody”的用户帐户。

我还注意到我可以使用以下命令和我的密码从终端登录此帐户:

sudo su nobody
Run Code Online (Sandbox Code Playgroud)

没有人

我一点都不介意,但我想知道这个用户的目的是什么?它是在全新安装的 Ubuntu 上默认创建的还是通过安装特定软件包创建的?

Oli*_*Oli 94

它可以运行不需要任何特殊权限的东西。它通常是为易受攻击的服务(httpd 等)保留的,这样如果它们被黑客攻击,它们对系统其余部分的损害就会最小。

与以真实用户身份运行某些内容相比,如果该服务受到威胁(Web 服务器偶尔会被利用来运行任意代码),它将以该用户身份运行并有权访问该用户拥有的所有内容。在大多数情况下,这与获得 root 权限一样糟糕

您可以在 Ubuntu Wiki 上阅读更多有关 nobody 用户的信息:

回答您的后续问题:

为什么我无法访问此帐户su nobody

sudo grep nobody /etc/shadow会告诉你没有人没有密码,你不能su没有帐户密码。最干净的方法是sudo su nobody代替。那会让你处于一个非常荒凉的sh外壳中。

你能举一个具体的例子,当被指示使用这个帐户时吗?

当程序的操作不需要权限时。当永远不会有任何磁盘活动时,这一点最为显着。

一个真实世界的例子是memcached(一个键值内存缓存/数据库/东西),坐在我的电脑上,我的服务器在没有人帐户下运行。为什么?因为它不需要任何权限,并且给它一个对文件有写访问权限的帐户只会带来不必要的风险。

  • Ubuntu 人声称:[一些误导的程序或指南表明该用户应该用于不受信任的程序执行或处理不受信任的数据。这是个坏建议。](https://wiki.ubuntu.com/nobody) 在 QNAP NAS 上,uid 65534 是用户 Guest,并且没有任何人(也没有 root,而是“admin”)。属于 guest 的文件在 QTV 和该 NAS 上运行的其他 docker/容器上显示为不属于任何人。在 Samba 上以 guest 身份创建的文件将拥有 65534,guest/nobody。似乎对这个 uid 有点困惑。 (4认同)
  • “网络文件系统”将“root”映射到“nobody”,因此本地 root 无法像远程 root 那样访问所有内容。 (2认同)

小智 36

用户nobody 仅为NFS 保留。

上面的回答是相当错误的,因为他们假设这nobody是一个“通用”匿名/访客风格的用户 ID。

在 UNIX/Linux 访问控制模型中,匿名/访客风格的用户 ID 不存在,这些是不好的建议:

  • 运行守护进程很常见nobody,尤其是服务器,以限制控制它们的恶意用户可能造成的损害。 ”因为如下:“但是,如果超过一个守护进程是这样​​运行的,因为获得对一个守护进程的控制将提供对所有守护进程的控制”。
  • "一个真实世界的例子是memcached(一个键值内存缓存/数据库/东西),坐在我的电脑上,我的服务器在该nobody帐户下运行。为什么?因为它不需要任何权限并授予它一个对文件有写访问权限的帐户只会带来不必要的风险。

nobody用户 ID 为 65534的用户名是为特定目的而创建和保留的,并且应该仅用于该目的:作为 NFS 树导出中“未映射”用户和用户 ID 的占位符。

也就是说,除非为 NFS 树导出设置了用户/ID 映射,否则导出中的所有文件都将显示为nobody. 这样做的目的是防止导入系统上的所有用户访问这些文件(除非他们具有“其他”权限),因为他们(除了root)都不能成为/成为nobody.

因此,将其nobody用于任何其他目的是一个非常糟糕的主意,因为它的目的是成为任何人都不能访问的文件的用户名/用户 ID。

维基条目也非常错误。

UNIX/Linux 的做法是为每个需要单独访问控制域的“应用程序”或应用程序区域创建一个新帐户,并且永远不要nobody在 NFS 之外重用

  • 这个答案没有引用任何来源,并且明确与其他几个答案相矛盾,这些答案*确实*引用了来源。当前的赏金表明这个答案特别好,在这种情况下它“应该”引用一些来源,或者至少有一些推理。 (7认同)
  • https://wiki.ubuntu.com/nobody,http://refspecs.linuxbase.org/LSB_3.0.0/LSB-PDA/LSB-PDA/usernames.html (6认同)
  • @vidarlo,这个答案并不建议您将文件设置为“nobody”拥有。它告诉你“nobody”是 NFS 在映射权限时使用的,这对我来说是最重要的一点。NFS *如何*使用“nobody”并不比它“确实”使用“nobody”这一事实更有趣。谢谢。 (2认同)

Pau*_*kys 32

在许多 Unix 变体中,“nobody”是用户帐户的常规名称,该帐户不拥有文件,不属于特权组,并且除了每个其他用户都拥有的能力之外没有任何其他能力。

通常以无人身份运行守护程序,尤其是服务器,以限制控制它们的恶意用户可能造成的损害。但是,如果像这样运行多个守护程序,则此技术的有用性会降低,因为获得对一个守护程序的控制将提供对所有守护程序的控制。原因是没有人拥有的进程有能力相互发送信号,甚至相互调试,允许它们读取甚至修改彼此的内存。

信息取自http://en.wikipedia.org/wiki/Nobody_(username)

  • -1:`nobody` 严格用于 NFS,不应该被其他服务使用,当然也不应该被系统管理员使用。谢谢。 (3认同)

Ala*_*Ali 17

nobody用户默认情况下,在全新安装(在Ubuntu桌面13.04检查)创建的。

在许多 *nix 变体中,nobody是一个用户帐户的常规名称,它不拥有文件,不属于特权组,并且除了每个其他用户都拥有的能力之外没有其他能力(nobody用户和组在/etc/sudoers文件中没有任何条目) .

通常将守护程序作为运行nobody,尤其是服务器,以限制控制它们的恶意用户可能造成的损害。但是,如果像这样运行多个守护程序,则此技术的有用性会降低,因为获得对一个守护程序的控制将提供对所有守护程序的控制。原因是nobody拥有的进程有能力相互发送信号,甚至相互调试,允许它们读取甚至修改彼此的内存。

来源维基百科 - 没有人(用户名)


-nobody拥有的进程能够相互发送信号,甚至在 Linux 中相互跟踪,这意味着一个无人拥有的进程可以读取和写入另一个无人拥有的进程的内存。

这是文件中nobody用户的示例条目/etc/passwd

alaa@aa-lu:~$ grep nobody /etc/passwd
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
Run Code Online (Sandbox Code Playgroud)

您可能已经注意到,nobody用户具有/bin/sh登录 shell 和/nonexistent主目录。顾名思义,/nonexistent默认情况下该 目录不存在。

如果您是偏执狂,您可以设置nobody的默认外壳 /usr/sbin/nologin,因此拒绝nobody用户的 ssh 登录。

来源LinuxG.net - Linux 和 Unix 无人用户