从https://unix.stackexchange.com/a/314732/674
与用户帐户相反,服务帐户通常没有“正确的”登录 shell,即它们有/usr/sbin/nologin作为登录 shell(或者,回到过去,/bin/假)。此外,服务帐户通常被锁定,即无法登录(对于传统的 /etc/passwd 和 /etc/shadow 可以通过以下方式实现)将密码哈希设置为任意值,例如 * 或 x)。
它似乎提供了几种阻止用户登录的方法。
/etc/passwd
:nologin
,/bin/false
, /bin/true,
/dev/null`的 shell 字段;密码字段
/etc/shadow
:*
或x
他们的目的有什么区别?他们都达到同样的目的吗?
谢谢。
答案1
它们有些不同。如果某些方式允许用户无需密码即可登录(例如使用 SSH 和授权密钥),则具有“错误”密码哈希的用户仍可能登录。但如果没有有效的 shell,这是不可能的。
另一方面,在某些情况下,用户可能会在没有 shell 的情况下被授予某些访问权限(我正在考虑 IMAP 或 SMTP 服务器)。然后,具有“良好”密码哈希的用户可以使用该服务,即使他没有有效的登录 shell。
答案2
仅仅因为做事有多种方法,并不意味着有一个真正的目的。系统用户和普通用户之间存在一些细微差别。
/usr/sbin/nologin
是一个简单的“外壳”,旨在通过立即退出来拒绝访问。任何程序都可以作为 shell 运行(只要它列在 /etc/shells 中),如果该程序立即退出,那么用户将无法访问系统。这就是为什么类似的东西/bin/false
也有效。
在影子文件中使用星号作为密码正是 Linux 表示锁定帐户密码的方式。如果您passwd -l username
以 root 身份运行,它将使用此方法锁定帐户。
另一种方法是通过将过期日期设置为 1 来使帐户过期。这可以通过运行以下命令来完成:
usermod -L -e 1 username