我正在制作一个运行 LAMP 的 Web 服务器,并想使用 SSH 访问它。
当我打开文件时passwd
,我会看到所有这些帐户,我想知道我可以放入哪些帐户false
。我有以下帐户:
root, daemon, bin, sys, sync, games, man, lp, mail, news, uucp, proxy, www-data
backup, list, irc, gnats, nobody, libuuid, syslog, messagebus, whoopsie,
mandscape, sshd, eric
除了root
、sshd
和eric
,哪些我不应该禁用?www-data
和怎么样sshd
?
答案1
您对登录系统的工作原理以及这些帐户的用途都存在一些误解。
首先,除 和 之外,大多数这些帐户root
都是eric
系统帐户,不供人们登录,但允许不同的服务以普通用户身份运行,而无需帐户root
拥有的所有权限。例如,OpenSSH 守护程序通常以用户 的身份运行sshd
,因此如果有人设法控制该sshd
进程,它将只允许他访问和修改相应用户sshd
有权限的文件。
其次,禁用用户登录的首选方法是禁用其密码,而不是将登录 shell 更改为/bin/false
。在现代 Linux 系统上,用户数据库实际上由两部分组成,/etc/passwd
和/etc/shadow
。密码存储在 中(请参阅下文了解原因),如果 中的密码字段为 ,/etc/shadow
则帐户将被禁用。/etc/shadow
*
在以下示例中,用户sshd
被禁用,而 则sven
设置了加密密码。您无法以用户 身份登录sshd
,无论是通过控制台还是 ssh 会话,但 的登录sven
将起作用。
sshd:*:15533:0:99999:7:::
sven:$6$ckP43saI2$Xjoxh52LLJxz2VXa.:15538:0:99999:7:::
最有可能的是,你会发现全部系统上除eric
(可能还有root
)之外的所有用户都以这种方式被禁用,这意味着您想要完成的事情已经由开发人员完成了。此外,您会发现许多帐户的登录 shell 也已设置为/bin/false
,/etc/passwd
这意味着即使是 root 也无法使用“su”切换到这些帐户。
为什么要将/etc/passwd
和分开/etc/shadow
?
许多程序需要访问用户数据库以用于各种目的,但授予读取权限允许/etc/passwd
每个人都可以读取所有用户的加密密码,这是非常不安全的,尤其是密码加密长期以来一直很薄弱。通过将密码放入单独的文件中解决了这个问题/etc/shadow
,该文件只能由 root 读取。