当您这样做时apt-get install bind9
,就会bind
创建一个用户。
我在安装绑定时遇到了一些问题。
看
了解更多信息。
su
我尝试通过从root
到用户bind
(root
因为我不知道密码)进行调试。
通常这对任何用户都有效。
但是当我输入
su bind
我没有收到任何错误消息,但 bash 上的用户仍然显示为,root
并且whoami
还告诉我我仍然是root
。
如果我对任何其他用户执行相同操作,bash 会更改为该用户,并且 whoami 也会告诉我我是该用户。
那么...为什么我不能su
成为用户bind
?
以下是摘录自/etc/passwd
:
root@zotac:/etc# cat passwd | grep "bind"
bind:x:107:119::/var/cache/bind:/bin/false
我尝试/bin/false
用替换/bin/bash
,但没有什么变化。那么问题是什么?
答案1
像您的系统一样,正确配置的系统不允许以 身份成功登录(即使使用su
或sudo -u
)bind
。但您能bind
如果需要的话,可以以 shell 的形式运行命令。
为什么会发生(并且应该发生)
该用户bind
不是应该能够登录的用户。这是设计使然。
bind:x:107:119::/var/cache/bind:/bin/false
/bin/false
是bind
的登录 shell。false
不是像sh
或 这样的真正 shell bash
。相反,它不执行任何操作,并向调用进程发出失败信号。将用户配置为/bin/false
作为其 shell 是使(可能)能够以用户身份进行身份验证以运行命令但无法以用户身份有效登录的标准方法之一。当用户以 作为其 shell 时/bin/false
,用户登录时会发生以下情况:
- 身份验证完成。假设身份验证成功...
/bin/false
调用shell 。- shell 立即退出。
- 由于登录 shell 已退出,登录会话已终止。
- 现在您已恢复正常
root
,因此可以使用诸如whoami
显示为您这样的命令root
。
如果您更改配置以允许bind
登录,则根据您执行的操作和配置的其他细节,可能会导致系统不安全。您几乎肯定不应该这样做。
为什么即使/bin/bash
更换也会出现这种情况/bin/false
如果您/etc/passwd
直接修改,我相信缓存数据可能尚未更新。如果您重新启动,问题可能会得到解决。但如上所述,这不是一个好主意。如果您还没有这样做,我建议(小心地)将该行编辑回原始版本(使用/bin/false
)。
以以下方式运行命令bind
反而,如果你确实需要以用户身份运行命令bind
,使用sudo
运行特定命令:
sudo -u bind command
和如果你确实需要以用户身份运行登录 shellbind
,使用sudo
以 身份运行 shell bind
,并告诉 shell 像初始登录 shell 一样运行:
sudo -u bind bash -l
如果不同,请替换bash
为您要使用的 shell 的名称。
该-l
标志使它bash
像登录 shell 一样运行(参见man bash
)。这在功能上对应于su - bind
(参见man su
)或sudo -i bind
(见man sudo
)。只不过,您指定的 shell(在此示例中为bash
)运行,而不是/bin/false
。
如果您想要与su bind
或相对应的东西sudo -s bind
(不是登录 shell 并且主要保留调用者的环境变量,包括 的 shell HOME
),但运行/bin/bash
而不是/bin/false
,请使用以下命令:
sudo -u bind bash
如果由于某种原因您想要使用su
(以 身份运行root
)来以 身份运行命令bind
,则可以使用以下-c
标志来实现:
su bind -c command
不要做的事情
- 可以使用
usermod
bind
将 的 shell 从更改/bin/false
为其他内容。这将使管理员能够使用sudo -u -i bind
或sudo -u -s bind
,并root
使用su bind
,至少在操作正确的情况下是这样。但您几乎肯定不应该这样做——这违反了没有人可以以 身份登录的设计假设bind
。 - 您甚至可以运行
sudo passwd bind
为 设定密码bind
,这样任何人(除访客外)只要知道密码,就可以使用 以 身份登录bind
。su
这样还可以bind
通过 SSH 在虚拟控制台上以 身份登录,甚至可能使用图形登录屏幕以 身份登录。为 设定密码bind
甚至比更改其登录 shell 更糟糕,您不应该这样做。
如上所述,您不需要需要做这两件事中的任何一件。