1. Linux系统密码管理基础在Linux系统中密码管理是系统安全的第一道防线。root账户作为系统的超级用户拥有对系统的完全控制权而普通用户账户则是日常操作的主要载体。这两种账户的密码管理策略既有共性也有差异。密码存储机制上Linux系统使用/etc/shadow文件存储加密后的密码哈希值。这个文件只有root用户可读确保了密码数据的安全性。密码字段的格式通常是$id$salt$hash其中id表示加密算法类型1为MD55为SHA-2566为SHA-512。重要提示现代Linux发行版默认使用SHA-512加密算法这是目前最安全的密码哈希方式之一。不建议修改为较弱的加密算法。密码策略方面建议遵循以下原则密码长度至少12个字符包含大小写字母、数字和特殊字符避免使用字典单词或常见组合定期更换密码建议每90天不同账户使用不同密码2. root密码修改全流程2.1 已知原密码的修改方法对于大多数Linux用户来说最常用的修改root密码方式是通过passwd命令。具体步骤如下首先切换到root用户su -或使用sudo如果当前用户在sudoers列表中sudo -i执行密码修改命令passwd系统会提示输入新密码并确认。密码强度检查在某些发行版中Changing password for user root. New password: Retype new password: passwd: all authentication tokens updated successfully.实测经验在CentOS/RHEL 7和Ubuntu 18.04系统中如果输入的密码过于简单系统会拒绝设置并提示BAD PASSWORD。可以通过修改/etc/security/pwquality.conf文件调整密码强度策略。2.2 忘记root密码的恢复方法当忘记root密码时需要通过单用户模式或恢复模式重置。以下是通用方法重启系统在GRUB菜单界面按e键编辑启动参数找到以linux或linux16开头的行在行尾添加rw init/bin/bash按CtrlX启动系统挂载文件系统为可写mount -o remount,rw /执行密码修改passwd root强制同步并重启sync exec /sbin/init对于使用systemd的系统如CentOS 7Ubuntu 15.04可以在GRUB编辑时将ro改为rw并在行尾添加init/bin/sh然后执行mount -o remount,rw / passwd root touch /.autorelabel # 仅SELinux系统需要 exec /sbin/init3. 普通用户密码管理3.1 修改自己的密码普通用户可以使用passwd命令修改自己的密码无需特殊权限passwd系统会先验证当前密码然后提示输入新密码。3.2 root修改其他用户密码管理员可以使用以下命令修改任意用户的密码passwd username这会直接进入新密码设置流程无需验证原密码。3.3 批量修改用户密码对于需要批量修改密码的场景可以使用chpasswd命令echo username:newpassword | chpasswd或者从文件批量导入chpasswd users.txt其中users.txt格式为每行username:password。安全警告这种方法会在命令行历史或文件中留下明文密码痕迹。建议使用openssl passwd生成加密密码后再设置openssl passwd -6 password1234. 特殊场景密码管理4.1 MySQL root密码重置当遇到127.0.0.1状态:root用户连接失败错误时可按以下步骤重置MySQL root密码停止MySQL服务systemctl stop mysqld启动无权限检查的MySQLmysqld_safe --skip-grant-tables 连接MySQL并更新密码mysql -u rootFLUSH PRIVILEGES; ALTER USER rootlocalhost IDENTIFIED BY newpassword; exit;重启MySQL服务systemctl restart mysqld对于MySQL 8.0密码修改语法略有不同ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY newpassword;4.2 ESXi root密码重置VMware ESXi系统的root密码重置需要以下步骤重启ESXi主机在启动菜单选择ESXi-Reset System Configuration按F11确认重置选择Reset root password选项输入新密码并确认完成重置后重启系统4.3 SSH密钥认证与密码禁用为提高安全性建议对重要系统禁用密码登录改用SSH密钥认证生成SSH密钥对ssh-keygen -t ed25519将公钥部署到目标服务器ssh-copy-id userhostname禁用密码认证 编辑/etc/ssh/sshd_configPasswordAuthentication no ChallengeResponseAuthentication no UsePAM no重启SSH服务systemctl restart sshd5. 密码策略与安全加固5.1 密码过期策略设置通过/etc/login.defs文件设置全局密码策略PASS_MAX_DAYS 90 PASS_MIN_DAYS 7 PASS_WARN_AGE 14 PASS_MIN_LEN 12对特定用户设置单独策略chage -M 90 -m 7 -W 14 username5.2 密码复杂度要求编辑/etc/security/pwquality.conf配置密码复杂度minlen 12 dcredit -1 ucredit -1 ocredit -1 lcredit -15.3 密码历史记录防止重复使用旧密码在/etc/pam.d/system-auth或/etc/pam.d/common-password中添加password required pam_unix.so remember55.4 账户锁定策略防止暴力破解设置连续失败后的账户锁定auth required pam_tally2.so deny5 unlock_time9006. 常见问题排查6.1 密码修改后仍无法登录可能原因及解决方案SELinux上下文问题 - 执行restorecon -v /etc/shadowPAM模块配置错误 - 检查/etc/pam.d/system-auth配置家目录权限问题 - 确保家目录属主正确chown -R user:user /home/user6.2 passwd命令报错Authentication token manipulation error常见原因/etc/shadow文件权限错误应为640文件系统以只读方式挂载NIS/LDAP认证配置问题解决方法chmod 640 /etc/shadow mount -o remount,rw /6.3 密码包含特殊字符的处理当密码包含$、!等特殊字符时在交互式passwd命令中直接输入即可在脚本中使用单引号包裹passwd user EOF p$$w0rd! EOF7. 高级技巧与自动化管理7.1 非交互式密码设置使用--stdin选项仅部分发行版支持echo newpassword | passwd --stdin username更通用的方法chpasswd username:newpassword7.2 随机密码生成生成高强度随机密码openssl rand -base64 16或tr -dc A-Za-z0-9!#$%^*() /dev/urandom | head -c 167.3 密码过期强制修改强制用户下次登录时修改密码chage -d 0 username7.4 密码策略检查工具使用pwscore检查密码强度echo password | pwscore使用cracklib-check检查常见漏洞echo password | cracklib-check在实际运维中我习惯将重要系统的root密码存储在加密密码管理器中并设置每60天自动提醒更换。对于普通用户建议配置LDAP或单点登录系统集中管理认证避免分散的密码管理带来的安全风险。