问题现象描述
在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脚本,会同时调用passwd
和pam_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
通过日志可以清晰看到两次密码提示的系统调用过程。