CentOS 7系统修改密码的核心答案是:普通用户直接执行passwd命令修改自己的密码,root用户执行passwd 用户名即可重置任意账户的密码,忘记密码时则需通过重启进入GRUB引导界面进行重置。这道题看着简单,但实际工作中翻车的人不在少数,比如普通用户输错root密码、远程连接时改完密码掉线、SELinux导致重置后无法登录,下面把最常见的几个场景拆开讲清楚。
centos7改密码命令的完整实操
普通用户修改自己的密码
登录系统后,在终端输入passwd,系统会依次提示输入当前密码、新密码和确认密码,新密码输入时屏幕不会显示任何字符,这是正常现象,不是键盘坏了,实际操作中经常有人因为这个问题反复输入导致账户被锁。
- 先输入当前密码验证身份
- 再输入新密码,注意长度和复杂度
- 最后再次输入新密码确认,输入一致才会生效
这套逻辑跟上文提到的passwd交互式流程完全对应,适合在本地终端或已建立的SSH会话中操作。
root用户强制修改普通用户密码
如果你是root管理员,想给某个用户改密码,不需要知道对方的旧密码,直接执行:
passwd 用户名
比如要给用户zhangsan改密码,就是passwd zhangsan,系统会直接让你输入两次新密码,不需要验证旧密码,这里有个容易忽略的点:root修改普通用户密码时,不会强制校验新密码的复杂度,系统只会给个警告,但不会阻止你设置弱密码。
修改root自己的密码
root用户想改自己的密码,跟普通用户一样执行passwd,区别在于不需要输入旧密码,如果你是普通用户想给root改密码,在命令前加sudo:
sudo passwd root
注意sudo权限不是所有普通用户都有的,只有加入wheel组的用户才能执行,不知道自己的账户在不在wheel组里,可以用groups 用户名查看。
批量修改密码的场景
有些运维场景需要一次性改多个账户的密码,逐个敲passwd效率太低,这时可以用chpasswd命令配合管道符:
echo "用户名:新密码" | chpasswd
多个账户就写多行,用文件导入:
chpasswd < 密码文件.txt
chpasswd的适用场景和passwd对比:
| 场景 | passwd | chpasswd |
|---|---|---|
| 单个用户交互式改密 | 推荐,有确认步骤更安全 | 不适用 |
| 脚本批量改密 | 不推荐,需要交互输入 | 推荐,无需交互 |
| root改他人密码 | 可用,但一次只改一个 | 可用,支持一次改多个 |
centos7忘记root密码怎么重置
这是服务器运维中最常见的需求,CentOS 7重置root密码不用重装系统,也不需要登录系统,核心思路是通过GRUB引导进入单用户模式,把系统挂载为可写状态,然后直接改密码,下面是完整操作流程。
第一步:重启服务器并进入GRUB界面
在服务器上执行reboot,或者在云控制台选择重启,开机时看到GRUB菜单(黑底白字的系统选择列表)时,按下键盘上的e键进入编辑模式,注意这个界面只停留几秒,错过就重新来一遍。
第二步:修改内核启动参数
进入编辑界面后,找到以linux16或linuxefi开头的那一行(不同机器显示略有差异,但都在靠下的位置),用方向键移动光标到这一行的末尾,找到ro字样,把它改成rw(意思是让根文件系统以可写模式挂载),然后在这行末尾追加:
rd.break
改完后按Ctrl+x或F10启动系统,系统会进入一个类似switch_root:/#的紧急模式提示符,到这里就成功一半了。
第三步:挂载根目录并重置密码
在switch_root:/#提示符下,依次执行以下命令:
mount -o remount,rw /sysroot chroot /sysroot passwd root
- 第一条命令把系统根目录重新挂载为可写
- 第二条命令切换到真实的系统环境
- 第三条命令就是重置root密码,输入两次一致的新密码即可
第四步:让SELinux重新标记文件
从chroot环境退出后,需要处理SELinux的上下文标签问题,因为在紧急模式下修改了/etc/shadow文件,SELinux可能会把它识别为异常文件,导致重启后登录时被拒绝。
执行以下操作:
touch /.autorelabel exit exit
第一条命令创建一个标记文件,系统重启时会自动重新整理SELinux的文件标签,后面两条exit先退出chroot环境,再退出紧急模式,系统会自动重启。
重启过程比较久,取决于服务器文件数量,5到10分钟都很正常,别以为卡死了,耐心等。
重置后登录不了的常见原因
不少人在重置完密码后,输入新密码提示认证失败,但又没有报错信息,这种情况多半是SELinux的问题:
- 检查是否执行了
touch /.autorelabel,漏掉这步重启后大概率登录失败 rd.break模式下系统时间可能不同步,极少情况下会影响认证,按上述步骤重新操作一遍即可- 云服务器控制台有VNC登录功能,用它连接可以看到更详细的报错信息
另外说一句,GRUB界面如果设置了密码保护,按e编辑时会要求先输入GRUB密码,这个密码跟root密码无关,只能联系之前设置的人获取。
centos7改密码过后SSH连不上的排查
改完密码后最常见的问题就是SSH连接断开,或者新密码死活登不上,这未必是密码改错了,多数情况出在SSH服务配置或密码规则上。
密码规则过强导致设置失败
CentOS 7默认启用了pam_pwquality密码质量检查模块,如果你的新密码太简单,比如纯数字、全是小写字母、跟用户名相似,系统会直接拒绝,报错提示类似”Password is too simple”或”BAD PASSWORD”。
修改密码前最好先确认系统的密码策略要求,查看/etc/security/pwquality.conf文件,重点关注minlen(最小长度)和dcredit(数字字符要求)这几个参数,多数云服务器默认要求密码长度不低于8位,且包含至少两种字符类型。
SSH服务用了密钥认证但密码过期
如果服务器当初配置的是SSH密钥登录,且禁用了密码认证,那么你改了密码也登不上,因为SSH压根就不接受密码,检查/etc/ssh/sshd_config里的PasswordAuthentication参数,如果是no,说明密码登录被关掉了,只能通过控制台VNC进入系统,改回yes并重启sshd服务才能用密码登录。
修改密码后掉线,新密码无法登录
先确认是不是自己把密码输错了,排除这个因素后,检查PAM锁定配置:
pam_tally2 --user root
这条命令查看root账户的登录失败次数,CentOS 7默认连续输错5次密码会锁定账户一段时间,如果你是改完密码后连续尝试登录,极有可能触发了锁定机制,用上面命令确认后,执行pam_tally2 --user root --reset解锁。
还有一种情况是密码修改成功了,但SSH服务还保持着旧会话的缓存,新会话无法建立,重启sshd服务:
systemctl restart sshd
不会影响已有连接,只是让新连接重新加载配置。
centos7密码策略的设置与加固
密码复杂度和长度策略
生产环境的服务器不建议用太随意的密码,通过修改/etc/security/pwquality.conf可以强制所有用户设置符合规则的密码:
vi /etc/security/pwquality.conf
常用配置项说明:
minlen = 12:密码最短12位dcredit = -1:必须包含至少1个数字ucredit = -1:必须包含至少1个大写字母lcredit = -1:必须包含至少1个小写字母ocredit = -1:必须包含至少1个特殊字符
配置后,任何用户通过passwd改密码时,都会强制执行这些规则,不满足就无法设置成功。
密码有效期与强制更换
很多企业安全基线要求root密码定期更换,CentOS 7可以通过chage命令管理密码有效期:
chage -M 90 root
这条命令设置root密码每90天必须更换一次,查看当前密码的有效期信息:
chage -l root
输出里能看到”密码过期时间””密码失效时间”等字段,行业共识认为,定期更换服务器密码是最基本的安全习惯,尤其是面向公网开放的服务,更应缩短更换周期。
centos7密码修改常见问题
修改密码后提示successfully但新密码用不了
先确认修改的是不是当前登录用户,执行id看看当前身份,另外检查是否有密码过期策略,比如chage -l 用户名显示账户已过期,即使密码正确也登录不了,最后看系统日志:
journalctl -u sshd | tail -20
日志能反馈认证失败的具体原因,比盲目试密码有用得多。
passwd和chpasswd选哪个更合适
如果是本地登录或SSH交互式修改单个账户,用passwd更稳妥,它有两次确认步骤,避免误输,如果是在脚本里批量修改多个账户的密码,用chpasswd更高效,一行一个账户,无需交互。
云服务器密码在控制台改还是系统里改
云服务器控制台提供的”重置密码”功能,本质上也是把密码写入系统认证文件,但需要重启实例才生效,如果你能正常登录系统,直接在系统里用passwd修改即可,无需重启,只有忘记密码又无法通过GRUB操作时,才需要走云控制台的重置通道。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/787351.html


