在 CentOS 系统中,root 账户拥有最高权限,可以执行系统中的任何操作,root 密码的安全性直接关系到整个服务器的安全,无论是出于安全策略需要定期更换密码,还是不慎忘记了密码,掌握如何正确地修改或重置 root 密码都是每一位系统管理员的必备技能,本文将详细阐述在不同场景下管理 CentOS root 密码的方法,并提供相关的安全建议。
已知当前 root 密码,进行常规修改
这是最常见也是最简单的情况,当您以 root 用户身份登录,或者拥有 sudo
权限的用户账户时,可以通过 passwd
命令来更改密码。
操作步骤:
登录系统:通过 SSH 或物理终端登录到您的 CentOS 系统,如果您是普通用户,请在命令前加上
sudo
。执行修改命令:在终端中输入以下命令并回车:
passwd
验证当前密码:如果当前登录用户是 root,系统会直接提示输入新密码,如果是通过
sudo
执行,则可能需要输入当前用户的密码以获取权限。输入新密码:系统会提示“New password:”,请输入您想要设置的新密码,出于安全考虑,您输入的密码不会在屏幕上显示。
确认新密码:系统会再次提示“Retype new password:”,请再次输入新密码以确认无误。
修改成功:如果两次输入的新密码一致,系统会显示 “passwd: all authentication tokens updated successfully.”,表示密码修改成功。
密码复杂度建议:
为了确保系统安全,建议设置一个强密码,通常应包含以下特征:
- 长度至少为 12 个字符。
- 同时包含大写字母、小写字母、数字和特殊符号(如
!@#$%^&*
)。 - 避免使用生日、姓名、常见单词或连续的键盘字符。
忘记 root 密码,进入单用户模式重置
忘记 root 密码是一个比较棘手的问题,但无需惊慌,我们可以通过重启系统并进入单用户模式(或紧急模式)来重置密码,此过程需要物理访问或控制台访问权限(如 VNC、KVM)。
操作步骤(以 CentOS 7/8 为例):
重启服务器:执行
reboot
命令或通过管理面板重启服务器。中断 GRUB 引导:在服务器启动过程中,当看到 GRUB 引导菜单时(通常是一个选择内核的界面),立即按下键盘上的
e
键,以编辑所选的启动项。编辑内核参数:进入编辑界面后,使用方向键找到以
linux
或linux16
或linuxefi
开头的行,这一行定义了内核启动参数。- 找到
ro
(read-only)参数,将其修改为rw
(read-write)。 - 在该行的末尾,添加一个空格,然后输入
rd.break
,这个参数会中断正常的启动流程,并进入一个临时的 initramfs shell 环境。
- 找到
启动到紧急模式:按下
Ctrl + X
组合键,系统将使用修改后的参数启动,并进入紧急模式的 shell 提示符,通常显示为switch_root:/#
。挂载并切换系统环境:在紧急模式下,真正的系统根目录被挂载在
/sysroot
目录下,并且是只读的,我们需要将其重新挂载为读写模式,然后切换到该环境中。# 重新挂载 /sysroot 为读写模式 mount -o remount,rw /sysroot # 切换到真正的系统环境 chroot /sysroot
执行
chroot
后,提示符会变为sh-4.2#
,表示您现在已经位于实际的 CentOS 系统环境中。重置 root 密码:您可以直接使用
passwd
命令来重置密码,系统不会再要求您输入旧密码。passwd root
按照提示输入两次新密码即可。
更新 SELinux 上下文(至关重要):由于我们直接修改了
/etc/shadow
文件,这会导致该文件的 SELinux 安全上下文不正确,如果不修复,系统在正常重启后将无法识别密码,导致登录失败,我们需要让系统在下次启动时自动重新标记文件。touch /.autorelabel
退出并重启:依次执行以下命令退出环境并重启服务器。
exit # 退出 chroot 环境 exit # 退出紧急模式,系统将自动重启
服务器重启后,SELinux 会对整个文件系统进行重新标记,这个过程可能需要几分钟时间,请耐心等待,完成后,您就可以使用新设置的 root 密码登录了。
两种场景对比
为了更清晰地理解两种方法的区别,可以参考下表:
特性 | 已知密码修改 | 忘记密码重置 |
---|---|---|
前提条件 | 知道当前密码或拥有 sudo 权限 | 拥有物理或控制台访问权限 |
主要方法 | 使用 passwd 命令 | 进入单用户/紧急模式,修改引导参数 |
操作复杂度 | 低,一两步即可完成 | 高,涉及中断启动、修改参数、chroot 等多步操作 |
关键步骤 | 输入并确认新密码 | rd.break chroot /sysroot passwd touch /.autorelabel |
安全管理与最佳实践
仅仅知道如何修改密码是不够的,良好的安全管理习惯更为重要。
- 禁用 root 远程登录:为了防止暴力破解,建议禁止通过 SSH 直接以 root 用户登录,可以编辑
/etc/ssh/sshd_config
文件,将PermitRootLogin yes
修改为PermitRootLogin no
,然后重启 SSH 服务(systemctl restart sshd
),日常管理应使用普通账户登录,再通过sudo
提权。 :为需要管理权限的用户创建普通账户,并通过配置 /etc/sudoers
文件,授予其执行特定命令的权限,这样可以实现权限的精细化控制,并且所有操作都有日志记录。- 定期更换密码:制定密码策略,定期(如每 90 天)更换 root 及其他重要账户的密码。
相关问答 (FAQs)
我按照忘记密码的步骤操作后,重启系统时卡住了,屏幕上显示大量信息,这是怎么回事?
解答: 这是正常现象,当您在单用户模式下执行 touch /.autorelabel
命令后,系统在下次正常启动时会触发 SELinux 的完整文件系统重新标记过程,这个过程会遍历系统中的所有文件,并根据安全策略为其打上正确的标签,因此需要花费较长的时间,具体时长取决于磁盘性能和文件数量,请耐心等待,切勿强制重启,否则可能导致文件系统损坏,标记完成后,系统会自动正常启动。
我修改了 root 密码,并且确认是正确的,但为什么还是无法通过 SSH 登录?
解答: 这通常不是密码本身的问题,而是 SSH 服务的配置限制了登录,请检查以下两种可能:
- 禁用了 root 远程登录:如上文最佳实践中所述,系统可能被配置为
PermitRootLogin no
,您需要使用一个具有sudo
权限的普通账户先登录,然后通过su -
或sudo -i
切换到 root 用户。 :检查 /etc/ssh/sshd_config
文件中是否存在AllowUsers
或AllowGroups
指令,如果存在,那么只有列在其中的用户或组成员才能通过 SSH 登录,您需要将 root 用户(或您想登录的用户)添加到该列表中,或者注释掉这行配置,修改后记得重启 SSH 服务。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复