Linux系统PAM模块pam_echo消息重复打印问题求助
PAM pam_echo模块消息重复打印问题排查与解决
问题现象
在Linux系统中配置PAM实现SSH登录认证时,使用pam_echo模块打印的消息会重复显示:
- 常规
ssh dummy@<host>登录时,每条pam_echo消息会在控制台打印两次 - 若先输入错误密码再输入正确密码,消息会打印三次
- 使用
ssh -q dummy@<host>(抑制非错误消息)时,每条消息仅显示一次,符合预期
PAM配置详情
auth required pam_echo.so test1 auth required pam_unix.so auth required pam_echo.so test account optional pam_echo.so test_account account sufficient pam_unix.so password required pam_unix.so session required pam_unix.so # to prevent to not run systemd --user for root, use trick session sufficient pam_succeed_if.so uid = 0 session required pam_systemd.so
预期输出
dummy@<host>'s password: test1 test test_account [dummy@localhost /home/dummy] #
实际输出
dummy@<host>'s password: test1 test test_account test1 test test_account [dummy@localhost /home/dummy] #
问题原因
- pam_echo的输出流特性:默认情况下,
pam_echo模块会将消息同时输出到**标准输出(stdout)和标准错误(stderr)**两个流 - SSH客户端的流转发:普通SSH登录时,sshd会将stdout和stderr的内容都转发给客户端,导致同一消息被两次显示
ssh -q的作用:-q参数会抑制客户端的非错误stdout输出,此时仅stderr的消息会被显示,因此只出现一次- 错误密码触发重复认证:输入错误密码时,PAM的auth阶段会重新执行一次,导致消息次数叠加
解决方法
修改pam_echo的配置,添加err选项,强制模块仅将消息输出到stderr,避免双流重复:
修改后的PAM配置片段:
auth required pam_echo.so err test1 auth required pam_unix.so auth required pam_echo.so err test account optional pam_echo.so err test_account # 其余配置保持不变
修改完成后,重新使用ssh dummy@<host>登录,每条pam_echo消息将仅显示一次,符合预期。
内容的提问来源于stack exchange,提问作者Arjun Manidheer
相关产品推荐
相关产品推荐

