在 CentOS 系统管理中,获取 root(超级用户)权限是执行关键系统维护、软件安装和配置更改的必要步骤,root 用户拥有系统的最高控制权,可以无限制地访问所有文件和命令,理解如何正确、安全地进入 root 用户模式至关重要,本文将详细介绍在 CentOS 中切换到 root 用户的几种主要方法,并探讨其背后的原理与最佳安全实践。
使用 su
命令切换到 root 用户
su
(substitute user 或 switch user)是 Linux 系统中最传统、最直接的切换用户身份的命令,当不附带任何参数时,它的默认目标用户就是 root。
基本用法:
打开终端,输入以下命令:
su
系统会提示您输入密码,您需要输入的是 root 用户的密码,而不是当前用户的密码,验证成功后,您的命令提示符通常会从 变为 ,表示您已经获得了 root shell。
su
与 su -
的关键区别
虽然 su
可以让您成为 root 用户,但它存在一个重要的环境变量问题,使用 su
切换后,您仍然保留了当前普通用户的环境变量(如 PATH
、HOME
等),这可能导致某些需要 root 环境变量的命令无法正常执行或行为异常。
为了解决这个问题,强烈推荐使用 su -
(或 su -l
/su --login
)命令。
su -
参数告诉 su
命令启动一个“登录 shell”,这意味着它会完全模拟 root 用户直接登录时的环境:
- 加载 root 用户的
.bash_profile
、.bashrc
等配置文件。 - 将
HOME
目录切换为/root
。 - 设置完整的
PATH
变量,确保系统能找到所有系统管理命令。
为了获得一个纯净、完整的 root 环境,始终优先使用 su -
。
使用 sudo
命令获取临时 root 权限
sudo
(superuser do)是现代 Linux 发行版,包括 CentOS,推荐的权限提升方式,它允许一个已授权的普通用户以 root 或其他用户的身份来执行命令。
核心优势:
- 无需共享 root 密码: 用户使用自己的密码进行身份验证,大大增强了安全性。
- 精细的权限控制: 管理员可以在
/etc/sudoers
文件中精确配置哪个用户可以执行哪些命令。 - 操作可审计: 所有通过
sudo
执行的命令都会被记录在日志中(通常在/var/log/secure
),便于追踪和审查。
基本用法:
执行单个命令:
在需要 root 权限的命令前加上sudo
即可。sudo yum update -y
系统会提示您输入 当前用户的密码(而非 root 密码),在一段时间内(默认为5分钟)再次使用
sudo
时,无需重复输入密码。获取一个 root shell:
如果您需要连续执行多条需要 root 权限的命令,可以使用sudo -i
或sudo su
来启动一个 root shell。sudo -i
这相当于
su -
,会加载 root 的完整登录环境,是推荐的方式。
为普通用户配置 sudo
权限
在 CentOS 中,默认情况下,新创建的普通用户并没有 sudo
权限,标准做法是将该用户添加到 wheel
组中,因为系统预设了 wheel
组的成员拥有 sudo
权限。
配置步骤:
您需要以 root 用户身份登录(使用
su -
)。执行以下命令,将
your_username
替换为您的实际用户名:usermod -aG wheel your_username
-a
表示追加(append),即把用户添加到指定的组中,而不是从其他组中移除。-G
指定要添加的组名。
添加完成后,让该用户注销并重新登录,新的组权限才会生效,之后,该用户就可以使用
sudo
命令了。
su
与 sudo
的核心区别
为了更清晰地理解这两种方法,下表小编总结了它们的主要不同点:
特性 | su | sudo |
---|---|---|
认证方式 | 需要目标用户(通常是 root)的密码 | 需要当前用户自己的密码 |
环境变量 | su 保留原用户环境,su - 切换到目标用户环境 | 默认保留原用户环境,但 sudo -i 可切换到 root 登录环境 |
权限范围 | 获得一个完整的 root shell,权限持续到退出 | 临时提升权限,可针对单个命令或一个会话 |
日志审计 | 日志记录不清晰,通常只知道有人切换到了 root | 详细记录了哪个用户在哪个时间执行了哪个命令 |
推荐场景 | 紧急情况或当 sudo 不可用时的临时 root 访问 | 日常系统管理和维护,是更安全、更规范的选择 |
安全最佳实践:禁用直接 root SSH 登录
为了进一步增强服务器的安全性,强烈建议禁止通过 SSH(Secure Shell)直接以 root 用户身份登录,这样可以有效防止攻击者对 root 账户进行暴力破解,管理员应该先以普通用户身份登录,然后通过 sudo
提升权限。
操作步骤:
以 root 身份编辑 SSH 配置文件
/etc/ssh/sshd_config
,建议先备份原文件。cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak vi /etc/ssh/sshd_config
在文件中找到
PermitRootLogin
这一行,将其值修改为no
。#PermitRootLogin yes PermitRootLogin no
保存并退出编辑器。
重启 SSH 服务以使配置生效。
systemctl restart sshd
重要提示: 在执行此操作前,请务必确保您已经为至少一个普通用户配置了 sudo
权限,并且能够通过该用户成功登录并使用 sudo
,否则,一旦您退出当前的 root 会话,可能将无法再获取 root 权限。
相关问答 (FAQs)
问题1:我忘记了 root 密码,该如何重置?
解答: 重置 CentOS 的 root 密码需要进入单用户模式或救援模式,基本流程如下:
- 重启服务器,在 GRUB 引导菜单出现时,按
e
键编辑启动项。 - 找到以
linux
或linux16
开头的行,将ro
(read-only)改为rw
(read-write),并在行末添加rd.break
。 - 按
Ctrl + X
启动系统,这将进入一个临时的 shell。 - 执行以下命令重新挂载文件系统并切换到真实系统环境:
mount -o remount,rw /sysroot chroot /sysroot
- 现在可以使用
passwd
命令来重置 root 密码:passwd root
- 由于修改了
/etc/shadow
文件,需要让 SELinux 重新标记文件上下文,以确保系统能正常启动,创建一个隐藏文件.autorelabel
:touch /.autorelabel
- 输入
exit
两次,系统将自动重启,重启过程可能会因为 SELinux 重新标记而稍慢,完成后即可使用新密码登录。
问题2:为什么推荐使用 sudo -i
而不是 sudo su
来获取 root shell?
解答: 虽然 sudo -i
和 sudo su
最终都能获得一个 root 权限的 shell,但它们在实现机制和推荐程度上有细微差别。sudo su
实际上是先通过 sudo
验证了用户身份,然后执行了 su
命令,而 sudo -i
是 sudo
命令的一个内置选项,专门用于模拟目标用户的初始登录,从功能和安全性上看,两者效果非常相似,都能获得一个干净的 root 环境。sudo -i
被认为是更“纯粹”、更直接的方式,因为它不依赖于 su
命令的存在,完全由 sudo
机制处理,在追求最佳实践和命令明确性时,sudo -i
是更受青睐的选择。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复