Ubuntu中adduser命令为何提示两次密码?排查与解决方案


阅读 7 次

问题现象描述

在Ubuntu 10.04.2 LTS系统中,以root身份执行adduser命令时,命令行界面会先后提示输入两种密码:

Enter new password:
Retype new password:
Enter new UNIX password:

密码机制解析

这种现象实际上反映了Linux系统的双重认证机制:

  • 第一组密码:对应PAM(Pluggable Authentication Modules)系统的密码设置
  • UNIX密码:传统/etc/passwd和/etc/shadow文件系统的密码存储

根本原因排查

通过检查系统配置发现:

# 查看PAM配置
cat /etc/pam.d/common-password

# 检查adduser脚本
vim /usr/sbin/adduser

在Ubuntu 10.04中,adduser是perl脚本,会同时调用passwdpam_chauthtok函数。

解决方案

方案1:统一密码提示

# 修改PAM配置
auth sufficient pam_unix.so nullok_secure
password sufficient pam_unix.so nullok obscure min=4 max=8 md5

方案2:使用替代命令

# 使用useradd命令
useradd -m -s /bin/bash username
passwd username

实际案例测试

测试环境:Ubuntu 10.04 LTS虚拟机

# 创建测试用户
adduser testuser
# 观察密码提示顺序
# 验证登录
ssh testuser@localhost

深入技术细节

密码存储位置对比:

类型 存储文件 加密方式
PAM密码 /etc/security/passwd 取决于PAM模块
UNIX密码 /etc/shadow MD5/SHA256/SHA512

最佳实践建议

  • 对于新系统建议升级到Ubuntu 12.04+版本
  • 生产环境推荐使用useradd+passwd组合命令
  • 重要系统建议配置LDAP统一认证

调试技巧

使用strace跟踪命令执行过程:

strace -f -o adduser.log adduser testuser

通过日志可以清晰看到两次密码提示的系统调用过程。