此外,我还注意到我可以使用以下命令和我的密码从终端登录到这个账户:
sudo su nobody
sudo su nobody
它负责运行不需要特殊权限的事务。通常保留给容易受攻击的服务(如httpd等),以便在它们被黑客攻击时,对系统的其他部分造成最小的损害。
与作为真实用户运行某个服务相比,如果该服务被攻陷(Web服务器有时会被利用来运行任意代码),它将作为该用户运行并具有该用户的所有访问权限。在大多数情况下,这和获得root权限一样糟糕。
您可以在Ubuntu维基上阅读更多关于nobody用户的信息:
回答你的后续问题:su
命令时,你必须输入目标用户的密码。尝试从root shell中使用sudo -i
然后su nobody
(这不需要密码)。 - userroot
映射为nobody
,因此本地的root
无法像远程的root
那样访问所有内容。 - Sylwestersudo -u nobody -i
? - Radu Rădeanunobody
用户有并且一直有一个默认的shell - 就是/bin/sh
,正如Oli在他的回答中所说。 - Radu Rădeanusudo -u nobody /bin/bash
,这将使你进入一个相当荒凉的 sh
shell。在我看来,如果使用 /bin/bash
,那么你会进入一个 bash
shell。此外,当我运行 sudo -u nobody /bin/bash
时,会出现错误 bash: /home/radu/.bash_aliases: Permission denied
。所以,我认为这不是最干净的方式。 - Radu Rădeanufind / -user nobody
或find / -group nogroup
返回任何文件,则表示您的系统存在漏洞。 - Born2Smilenobody
用户仅适用于 NFS,不应被其他服务或者系统管理员使用。谢谢。 - sarnold上述答案都相当错误,因为它们假设 nobody
是一个"通用"的匿名/访客风格的用户标识。
在 UNIX/Linux 访问控制模型中,不存在匿名/访客风格的用户标识,以下是错误的建议:
nobody
运行,特别是服务器,以限制恶意用户获取守护进程控制权造成的破坏。",由于下面的原因,这种技术的有用性会降低:" "然而,如果多个守护进程以此方式运行,那么获得其中一个守护进程的控制权就能够控制所有守护进程。"memcached
(一种键值内存缓存/数据库/其他),使用 nobody
账户运行。为什么呢?因为它不需要任何权限,给它一个具有写访问文件权限的账户只会增加不必要的风险。"root_squash
选项时,root
用户会被映射为nobody
用户,因此拥有所有者为nobody
的文件毫无意义。此外,文件由nobody
所有意味着它们对任何人都是不可访问的这种说法也没有多大意义,因为在UNIX系统中,文件权限与所有权是分开的。我并不是说答案中的一切都是错的,只是其中的某些要素对我来说不太合理或没有意义 :) - vidarlonobody
所有。它告诉你的是,nobody
是NFS在映射权限时使用的用户,这对我来说是最重要的一点。 NFS如何使用nobody
并不那么重要,比起它确实使用nobody
来说。谢谢。 - sarnoldman exports
,他可能会非常困惑。 - vidarlonobody
用于多个目的,不仅仅是用于NFS - 例如用于运行Web服务器。 - rajnobody
是专门为 NFS 设计的,不应该被其他服务使用,尤其是系统管理员。谢谢。 - sarnoldnobody
的用户。The
nobody
-owned processes are able to send signals to each others and even ptrace each other in Linux, meaning that a nobody-owned process can read and write the memory of another nobody-owned process.This is a sample entry of the
nobody
user in the/etc/passwd
file:alaa@aa-lu:~$ grep nobody /etc/passwd nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
As you may notice, the
nobody
user has/bin/sh
as a login shell and/nonexistent
as the home directory. As the name suggests, the/nonexistent
directory does not exist, by default.If you are paranoid, you can set
nobody
’s default shell as/usr/sbin/nologin
and so, deny the ssh login for thenobody
user.
nobody
用户还用于具有绑定挂载的非特权容器。请注意,当此选项与--private-users结合使用时,生成的挂载点将由nobody用户拥有。这是因为挂载及其文件和目录仍然归相关主机用户和组所有,而这些在容器中不存在,并以通配符UID 65534(nobody)显示。如果创建此类绑定挂载,建议使用--bind-ro=将其设置为只读。
sudo su nobody
返回“此帐户当前无法使用”,因为用户“nobody”的shell已设置为/usr/sbin/nologin
(getent passwd nobody
)。 - Pablo Bianchiroot_squash
时,它会在远程系统上将root映射为nobody。这与这个答案所陈述的完全相反。 - vidarlogrep
、sed
等)。我不希望这个功能成为一个太大的安全风险(比如将"文本处理"命令指定为rm *
)... 以"nobody"用户身份运行grep
或sed
可以消除这个风险。 - Martin Rosenau