让 su 多次询问密码

让 su 多次询问密码

我使用的是 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

相关内容