我发现很多文章提到用户使用后没有密码passwd -d
。虽然在我的某些系统上它确实可以工作(我可以su
从非特权帐户访问它们而无需提供密码),但在某些系统上却不能。我尝试了两个*
和空,但这些都不起作用:
lapsio@pi-car1:~ $ sudo useradd potato -p '*'
lapsio@pi-car1:~ $ su potato
Password:
su: Authentication failure
lapsio@pi-car1:~ $ sudo passwd -d potato
passwd: password expiry information changed.
lapsio@pi-car1:~ $ su potato
Password:
su: Authentication failure
lapsio@pi-car1:~ $
请注意,我是不是谈论空的密码(可以使用空字符串哈希设置)。我是不是也谈论锁定帐户。我预计在和中Password:
根本不会出现任何提示的情况su
getty
我能立即登录该帐户无需输入密码根本不。它似乎适用于旧系统。是否有一些系统级配置可以控制此行为?
为了说得非常清楚,我期待以下行为:
lapsio@pi-car1:~ $ su potato
potato@pi-car1:~ $ #I'm potato user here, without being asked for password
有点像当你从 root 启动时它会起作用,但我也su
希望能够从任何非特权帐户启动。su
并且在没有密码提示的情况下登录getty
,就像您在 Arch liveCD 上登录 root 帐户一样。
是的我知道这是一种糟糕的安全做法,我知道这种做法的后果,但我仍然想知道该怎么做。
答案1
PAM 配置su
通常位于,/etc/pam.d/su
并且它可以使用该指令引用同一目录中的其他文件@include
。在某些时候,将会有一行以 开头auth
并提及pam_unix.so
。在旧版本中,它可能包含一个nullok
允许空密码的选项;现代发行版通常使用nullok_secure
,仅当使用 中列出的 TTY 设备之一进行“身份验证”时才允许使用空密码/etc/securetty
。此外,该选项的实施nullok
可能会有所不同。
为了允许在su
没有密码提示的情况下明确允许访问特定帐户,您可以添加如下行:
auth sufficient pam_succeed_if.so quiet_fail user = potato
(笔记:user
、=
和之间的空格potato
很重要!)
为了在之前生效pam_unix.so
,并且su
仅使用该命令,该行应放置在/etc/pam.d/su
前任何@include
以 . 开头的指令或其他行auth
。
su
然而,在不首先了解 PAM 配置如何工作的情况下,通过像这样的 PAM 配置创建快捷方式有点冒险。你的未指定的 Linux 发行版。使用前请仔细测试。