阅读完“列出所有人类用户”后,我注意到Ubuntu系统中有一个名为“ nobody”的用户帐户。
另外,我注意到我可以使用以下命令和密码从终端登录此帐户:
sudo su nobody
根本不介意我,但是我想知道这个用户的目的是什么?它是默认在全新安装的Ubuntu上创建还是通过安装特定软件包创建的?
sudo su nobody
返回此帐户当前不可用。因为用户的外壳nobody
设置为/usr/sbin/nologin
(getent passwd nobody
)。
阅读完“列出所有人类用户”后,我注意到Ubuntu系统中有一个名为“ nobody”的用户帐户。
另外,我注意到我可以使用以下命令和密码从终端登录此帐户:
sudo su nobody
根本不介意我,但是我想知道这个用户的目的是什么?它是默认在全新安装的Ubuntu上创建还是通过安装特定软件包创建的?
sudo su nobody
返回此帐户当前不可用。因为用户的外壳nobody
设置为/usr/sbin/nologin
(getent passwd nobody
)。
Answers:
它在那里运行不需要任何特殊权限的事物。它通常是为易受攻击的服务(httpd等)保留的,因此,如果它们被黑客入侵,它们对系统其余部分的损害将最小。
与以实际用户身份运行某些程序相反,如果该服务受到损害(有时会利用Web服务器来运行任意代码),它将以该用户身份运行并可以访问该用户拥有的所有内容。在大多数情况下,这和扎根一样糟糕。
您可以在Ubuntu Wiki上了解有关nobody用户的更多信息:
要回答您的后续问题:
su nobody
?sudo grep nobody /etc/shadow
会告诉您没有人没有密码,您也无法su
没有帐户密码。最干净的方法是sudo su nobody
改为。这会让您陷入一个非常荒凉的sh
外壳中。
当程序的操作不需要权限时。当永远不会有任何磁盘活动时,这是最值得注意的。
一个真实的例子是memcached
(一个键值内存缓存/数据库/事物),它位于我的计算机上,我的服务器在nobody帐户下运行。为什么?因为它不需要任何权限,并且为它提供对文件具有写访问权的帐户,这将是不必要的风险。
su nobody
以及2)当指示使用该帐户时,您可以举一个特定的示例吗?
su
作为普通用户时,必须提供目标用户的密码。sudo -i
然后su nobody
从root shell(不需要密码)尝试。
Network File System
映射root
到nobody
本地根无法像远程根可以那样访问所有内容。
nobody
NFS实际上/主要是作为linuxstandardbase状态使用的。
在许多Unix变体中,“ nobody”是用户帐户的常规名称,该用户帐户不拥有文件,没有特权组并且除所有其他用户具有的能力外没有其他功能。
通常,不要以任何人(尤其是服务器)身份运行守护程序,以限制获得控制它们的恶意用户可能造成的损害。但是,如果像这样运行多个守护程序,则会降低该技术的实用性,因为如果获得对一个守护程序的控制权,则将提供对所有这些守护程序的控制权。原因是没有人拥有的进程能够相互发送信号甚至相互调试,从而允许它们读取甚至修改彼此的内存。
nobody
严格用于NFS,不应由其他服务使用,当然也不应由系统管理员使用。谢谢。
上面的答案非常错误,因为它们假定这nobody
是一个“通用”匿名/来宾风格的用户ID。
在UNIX / Linux访问控制模型中,不存在匿名/来宾风格的用户ID,这是错误的建议:
nobody
,特别是服务器,以限制可能由谁获得了他们的控制恶意用户可能造成的损害。 ”因为是如下:“ 然而,这项技术的有用性,如果超过减少这样运行一个守护程序,因为如果获得对一个守护程序的控制权,则将全部控制它们。memcached
(一个键值内存缓存/数据库/事物),它位于我的计算机上,我的服务器在该nobody
帐户下运行。为什么?因为它不需要任何权限就可以给它拥有对文件的写访问权的帐户只是不必要的风险。 ”nobody
创建并保留了具有用户ID 65534 的用户名用于特定目的,并且仅应将其用于该目的:作为NFS树导出中“未映射”用户和用户ID的占位符。
也就是说,除非为NFS树导出设置了用户/标识映射,否则导出中的所有文件将显示为所拥有nobody
。这样做的目的是防止导入系统上的所有用户访问这些文件(除非他们具有“其他”权限),因为它们(除之外root
)都不能成为/ become nobody
。
因此,将其nobody
用于任何其他用途是一个非常糟糕的主意,因为其用途是成为任何人都不能访问的文件的用户名/用户ID。
Wiki条目也是非常错误的。
UNIX / Linux的做法是为每个需要单独访问控制域的“应用程序”或应用程序区域创建一个新帐户,并且永远不要nobody
在NFS之外重用。
root_squash
on root
映射到user nobody
,因此拥有所有者的文件nobody
绝对没有意义。另外,由于在UNIX中文件权限与所有权是分开的,因此声明没有人拥有的文件意味着任何人都无法访问的说法毫无意义。我并不是说答案中的所有内容都是错误的,只是它的元素对我而言几乎没有意义:)
nobody
。它告诉您nobody
NFS在映射权限时要使用,这对我来说是最重要的一点。如何 NFS使用nobody
比事实不感兴趣并使用nobody
。谢谢。
man exports
,他可能会很困惑。
该nobody
用户默认情况下,在全新安装(在Ubuntu桌面13.04检查)创建的。
在许多* nix变体中,
nobody
是用户帐户的常规名称,该用户帐户不拥有文件,不具有特权组并且除其他用户具有的能力之外没有其他功能(该nobody
用户和组在/etc/sudoers
文件中没有任何条目) 。通常,将守护程序作为
nobody
,特别是服务器运行,以限制由控制它们的恶意用户可能造成的损害。但是,如果像这样运行多个守护程序,则会降低该技术的实用性,因为如果获得对一个守护程序的控制权,则将提供对所有这些守护程序的控制权。原因是nobody
拥有的进程能够相互发送信号,甚至相互调试,从而允许它们读取甚至修改彼此的内存。来源: 维基百科-没人(用户名)
该
nobody
股权的过程中能够将信号发送到每个人,甚至PTRACE在Linux中对方,这意味着没有人拥有的进程可以读取和写入另一个人拥有的进程的内存。这是文件中
nobody
用户的示例条目/etc/passwd
:alaa@aa-lu:~$ grep nobody /etc/passwd nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
您可能会注意到,
nobody
用户具有/bin/sh
登录外壳程序和/nonexistent
主目录。顾名思义,/nonexistent
默认情况下该 目录不存在。如果您偏执狂,则可以将
nobody
的默认shell 设置为/usr/sbin/nologin
等等,从而拒绝nobody
用户的ssh登录。
对' 的细微修改' 用户nobody只保留给NFS。回答。此时,该nobody
用户还用于具有绑定安装的非特权容器。
这取自systemd-nspawn,特别是--bind挂载选项:
请注意,当此选项与--private-users结合使用时,生成的安装点将归nobody用户所有。这是因为装载及其文件和目录继续由相关的主机用户和组拥有,而这些主机用户和组在容器中不存在,因此显示在通配符UID 65534(没人)下。如果创建了这样的绑定安装,建议使用--bind-ro =将它们设置为只读。