我使用的是 Debian 8,当我输入su
密码时,提示仅出现一次。如果我输入错误的密码,我希望重试并立即开始再次输入,但部分密码会在 shell 上可见。
如何配置su
重新提示输入密码,直到我使用Ctrl+取消密码C?
我尝试查看/etc/sudoers
, /etc/pam.d/*
,/etc/login.defs
以及这个unix.SE 问题不幸的是,这是不完整的。
答案1
这些PAM
模块可以提供一定程度的灵活性,几乎可以完全满足您的需求。根据您在评论中的回复,您会很乐意允许su
在失败之前进行三次尝试。这就是我在这里提供的。
我强烈推荐您备份PAM
您更改的每个配置文件,并且您已经在某处打开了根 shell,准备恢复损坏的更改。进行任何更改后,PAM
测试您是否仍然可以登录并获得 root 访问权限非常重要。如果你弄错了,你可以彻底冲洗你的系统。
这些PAM
文件位于 中/etc/pam.d
,您需要 root 访问权限才能更改它们。
Debian 8 上的文件su
包含一个身份验证行和对包含文件的引用common-auth
。把它们放在一起我们得到这个:
auth sufficient pam_rootok.so
auth [success=1 default=ignore] pam_unix.so nullok_secure
auth requisite pam_deny.so
auth required pam_permit.so
auth optional pam_cap.so
令人兴奋的部分是对 的调用pam_unix.so
,它根据密码数据库(/etc/passwd
和/etc/shadow
)进行身份验证。该[success=N]
组件告知PAM
,如果模块返回成功状态,则跳过接下来的 N 个模块。因此如果你从pam_unix.so
配置中获得成功返回将跳过失败模块pam_deny.so
。
我们可以使用这种方法来构建另外两次身份验证尝试,如下所示:
auth sufficient pam_rootok.so
auth [success=3 default=ignore] pam_unix.so nullok_secure
auth [success=2 default=ignore] pam_unix.so nullok_secure
auth [success=1 default=ignore] pam_unix.so nullok_secure
auth requisite pam_deny.so
auth required pam_permit.so
auth optional pam_cap.so
到了这里,工作就完成了。
请注意,如果您正在运行 SAMBA 或其他一些外部身份验证方案,您将需要稍微调整更改。在我的一个系统上有这样一个额外的检查pam_winbind.so
。这也需要复制,所以你可以从这里开始:
auth [success=2 default=ignore] pam_unix.so nullok_secure
auth [success=1 default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
auth requisite pam_deny.so
对此:
auth [success=6 default=ignore] pam_unix.so nullok_secure
auth [success=5 default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
auth [success=4 default=ignore] pam_unix.so nullok_secure
auth [success=3 default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
auth [success=2 default=ignore] pam_unix.so nullok_secure
auth [success=1 default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
auth requisite pam_deny.so