“无人”用户的目的是什么?
在我阅读List所有人类用户后,我注意到在我的Ubuntu系统中有一个名为“nobody”的用户帐户。
另外我注意到我可以使用以下命令和密码从终端登录此帐户:
sudo su nobody
它根本不介意我,但我想知道这个用户的目的是什么? 它是在新安装的Ubuntu上默认创建的还是通过安装特定的包创建的?
它可以运行不需要任何特殊权限的东西。 它通常被保留用于易受攻击的服务(httpd等),因此如果它们被黑客入侵,它们对系统的其余部分的损害最小。
相比之下, 作为真实用户运行某些东西,如果该服务遭到破坏(Web服务器偶尔被利用来运行任意代码),它将作为该用户运行并且可以访问用户拥有的所有内容。 在大多数情况下,这与获得root 一样糟糕 。
您可以在Ubuntu Wiki上阅读更多关于nobody用户的信息:
回答你的后续行动:
为什么我无法访问此帐户?
sudo grep nobody /etc/shadow
会告诉你没有人没有密码,如果没有帐户密码你也不能su
。 最干净的方式是sudo su nobody
。 这将让你陷入一个非常荒凉的sh
shell。
当您指示使用此帐户时,您能给出一个特定的例子吗?
当程序的操作不需要权限时。 当没有任何磁盘活动时,这是最值得注意的。
一个真实世界的例子是memcached
(一个键值内存缓存/数据库/东西),坐在我的计算机上,我的服务器在nobody帐户下运行。 为什么? 因为它只是不需要任何权限并且给它一个对文件具有写访问权限的帐户只是一个不必要的风险。
在许多Unix变体中,“nobody”是用户帐户的常规名称,它不拥有任何文件,没有特权组,除了每个其他用户拥有的能力之外没有任何能力。
将守护进程作为无人运行(尤其是服务器)是很常见的,以便限制可以通过控制它们的恶意用户造成的损害。 但是,如果像这样运行多个守护进程,这种技术的有用性会降低,因为获得对一个守护进程的控制将提供对它们的控制。 原因是没有人拥有的进程能够相互发送信号,甚至相互调试,允许它们读取甚至修改彼此的内存。
信息来自http://en.wikipedia.org/wiki/Nobody_(username) 。
默认情况下,在全新安装时创建nobody
用户(在Ubuntu Desktop 13.04上检查)。
在许多* nix变体中,
nobody
是没有文件的用户帐户的常规名称,没有特权组,并且没有其他用户拥有的能力(nobody
用户和组没有任何条目)/etc/sudoers
文件)。将守护进程作为
nobody
运行(尤其是服务器)是很常见的,以便限制可以通过控制它们的恶意用户造成的损害。 但是,如果像这样运行多个守护进程,这种技术的有用性会降低,因为获得对一个守护进程的控制将提供对它们的控制。 原因是nobody
拥有的进程能够相互发送信号甚至相互调试,允许它们读取甚至修改彼此的内存。来源 : 维基百科 – 没人(用户名)
nobody
拥有的进程能够向彼此发送信号,甚至在Linux中相互交换,这意味着没有人拥有的进程可以读取和写入另一个没有人拥有的进程的内存。这是
/etc/passwd
文件中nobody
用户的示例条目:alaa@aa-lu:~$ grep nobody /etc/passwd nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
您可能会注意到,
nobody
用户将/bin/sh
作为登录shell并且/nonexistent
作为主目录。 顾名思义,默认情况下,/nonexistent
目录不存在。如果你是偏执狂,你可以将
nobody
的默认shell设置为/usr/sbin/nologin
,因此,拒绝nobody
用户的ssh登录。来源 : LinuxG.net – Linux和Unix无人用户
上面的答案是错误的,因为他们认为nobody
是“通用”匿名/客户风格的用户ID。
在UNIX / Linux访问控制模型中,匿名/来宾样式用户ID不存在,这些都是错误的建议:
- “ 通常将守护进程作为
nobody
运行,尤其是服务器,以便限制恶意用户可以对其进行控制所造成的损害。 ”因为以下内容:“ 然而,如果更多,这种技术的有用性会降低比这样运行一个守护进程,因为然后获得对一个守护进程的控制将提供对它们的控制 “。 - “ 一个真实世界的例子是
memcached
(一个键值内存缓存/数据库/东西),坐在我的计算机上,我的服务器在nobody
帐户下运行。为什么?因为它不需要任何权限和给它一个对文件具有写访问权限的帐户只会是一种不必要的风险。 “
用户ID为65534的nobody
用户名已创建并保留用于特定目的,并且仅应用于此目的:作为“未映射”用户的占位符和NFS树导出中的用户ID。
也就是说,除非为NFS树导出设置了user / id映射,否则导出中的所有文件将显示为nobody
。 这样做的目的是防止导入系统上的所有用户访问这些文件(除非他们具有“其他”权限),因为它们( root
除外)都不能成为nobody
。
因此,将nobody
用于任何其他目的是一个非常糟糕的主意,因为它的目的是成为任何人都无法访问的文件的用户名/用户ID。
Wiki条目也是非常错误的。
UNIX / Linux实践是为需要单独访问控制域的每个“应用程序”或应用程序区域创建一个新帐户,并且永远不会重复使用NFS之外的nobody
。
nobody是特殊用户和组帐户。 因为它是一个实际的用户名(和组名),并且可以被进程甚至用户使用,所以它实际上并不是没有人 。 例如,某些Apache配置将nobody作为拥有网站文件和目录的用户/组。 当多个进程可能使用nobody用户时,例如NFS目录和Web服务器,就会出现问题。