在 SLES 15 SP1 系统上,我已向wheel
组添加了一个用户:
wheel:x:1003:joeuser
但是,当joeuser
他们以自己的身份登录,然后尝试su
(成为 root)时,系统会要求他们输入密码。为什么会发生这种情况?
这里是/etc/pam.d/su
:
#%PAM-1.0
auth sufficient pam_wheel.so trust
auth sufficient pam_rootok.so
auth include common-auth
account sufficient pam_rootok.so
account include common-account
password include common-password
session include common-session
session optional pam_xauth.so
您如何测试?您是
joeuser
直接以 身份登录,还是以 身份(或其他用户)登录root
,然后su
登录joeuser
帐户?我尝试在 SLES 容器中重现您描述的行为,并且成功(?)遇到了同样的问题:
我打开了
pam_wheel
模块的调试输出.........并注意到我遇到了这个错误:
这是因为在我的容器环境中我缺少
utmp
文件(/run/utmp
,又名/var/run/utmp
)。它用于pam_wheel
识别最初在当前 tty 上登录的用户。该文件由login
程序填充,并且它必须首先存在。一旦我 (a) 创建一个空
/run/utmp
文件,然后 (b) 安排login
在假的 pty 设备上运行,我就可以以测试用户身份登录,而su
无需密码:运行
su -
仍然会失败,直到我也更新了/etc/pam.d/su-l
。但是:如果我以 身份登录
root
,然后切换到非特权用户:我将再次被提示输入密码:
因为:
pam_wheel
看到那root
是最初登录终端的用户,因此即使我su
以该testuser
用户身份运行,pam_wheel
也会根据的组成员身份做出决定root
。您可以修改此行为,以便
pam_wheel
不咨询/run/utmp
(而是使用调用进程的 uid 来确定权限)该use_uid
选项;如果我/etc/pam.d/su
像这样修改:然后上述过程就会按预期进行。