在 CentOS 系统中,出于安全考虑,默认情况下 root 用户账户是被禁用的,或者不允许通过 SSH 直接使用密码登录,系统管理员通常被建议使用一个具有 sudo
权限的普通用户来执行日常管理任务,在某些特定场景下,例如进行系统级别的维护或安装特定软件时,直接启用并使用 root 用户可能会更为便捷,本文将详细介绍如何在 CentOS 系统中安全地启用 root 用户,并配置其 SSH 登录权限。
理解 root 用户与 sudo 的区别
在开始操作之前,理解 root 用户和 sudo
机制的区别至关重要,root 用户是系统的超级管理员,拥有对系统所有文件和进程的绝对控制权,没有任何限制,而 sudo
(superuser do)则是一种权限管理机制,它允许授权的普通用户以 root 或其他用户的身份执行特定命令。
使用 sudo
的主要优势在于:
- 可追溯性:所有通过
sudo
执行的命令都会被记录在系统日志中(/var/log/secure
),便于审计和问题排查。 - 精细化控制:可以精确控制某个用户能执行哪些命令,而不是赋予其全部的 root 权限。
- 安全性:无需共享 root 密码,降低了密码泄露的风险。
在启用 root 用户之前,请务必确认这是您当前场景下的最佳选择。
启用 root 用户:设置密码
启用 root 用户的第一步是为该账户设置一个密码,默认情况下,root 账户可能没有密码,或者密码被锁定。
您需要先登录一个具有 sudo
权限的普通用户账户,在终端中执行以下命令:
sudo passwd root
执行该命令后,系统会提示您进行以下操作:
- 输入当前普通用户的密码,这是为了验证您拥有
sudo
权限。 - 为 root 用户输入新的密码,输入时密码不会显示在屏幕上。
- 再次输入新的密码以进行确认。
当屏幕显示 “passwd: all authentication tokens updated successfully.” 时,表示 root 用户的密码已成功设置,您已经可以在本地通过 su -
或 su - root
命令切换到 root 用户了。
su - # 或者 su - root
输入您刚刚设置的 root 密码,即可获得 root 用户的 shell 环境,命令提示符通常会从 变为 。
配置 SSH 允许 root 用户登录
仅仅设置密码并不意味着您可以通过 SSH 远程以 root 用户身份登录,SSH 服务(sshd)的默认配置通常禁止直接的 root 密码登录,以防止暴力破解攻击,要允许通过 SSH 登录,您需要修改 SSH 的配置文件。
编辑 SSH 配置文件
使用您喜欢的文本编辑器(如 vi
或 nano
)打开 /etc/ssh/sshd_config
文件,由于这是一个系统文件,您需要使用 sudo
来获取编辑权限。
sudo vi /etc/ssh/sshd_config
修改 PermitRootLogin
参数
在文件中,找到 PermitRootLogin
这一行,它可能被注释掉了(以 开头),或者其值可能为 no
或 prohibit-password
。
您需要将其修改为以下值之一:
参数值 | 含义 | 安全性建议 |
---|---|---|
yes | 允许 root 用户通过密码和 SSH 密钥登录。 | 不推荐,安全性最低,容易遭受暴力破解攻击。 |
prohibit-password | 只允许 root 用户通过 SSH 密钥登录,禁止密码登录。 | 推荐,在必须启用 root 登录时,这是更安全的选择。 |
no | 禁止 root 用户通过任何方式登录。 | 默认推荐,最安全的方式。 |
为了兼顾便利性与安全性,强烈建议您将其设置为 prohibit-password
,确保您已经为 root 用户配置了 SSH 密钥对,将配置行修改如下:
# 修改前
#PermitRootLogin prohibit-password
# 修改后(推荐)
PermitRootLogin prohibit-password
# 如果您确实需要且了解风险,可以设置为 yes
# PermitRootLogin yes
请确保删除行首的 以取消注释。
重启 SSH 服务
修改配置文件后,必须重启 SSH 服务才能使更改生效,在 CentOS 7 及更高版本中,使用 systemctl
命令:
sudo systemctl restart sshd
对于较旧的 CentOS 6 系统,则使用 service
命令:
sudo service sshd restart
服务重启后,您就可以使用 SSH 客户端以 root 用户身份连接到服务器了,如果您设置了 prohibit-password
,请确保您的 SSH 客户端配置了正确的私钥。
安全最佳实践与小编总结
启用 root 用户登录会显著增加系统的安全风险,root 账户是攻击者的主要目标,一旦 root 密码泄露,整个系统将完全失控。
我们再次强调:
:对于绝大多数管理任务,请坚持使用带有 sudo
权限的普通用户。- 使用强密码:如果必须启用 root 密码登录,请务必使用一个包含大小写字母、数字和特殊符号的复杂密码。
- 启用 SSH 密钥认证:相对于密码,SSH 密钥认证的安全性要高得多,配置
PermitRootLogin prohibit-password
是一个很好的折中方案。 - 禁用密码登录:在配置好 SSH 密钥后,可以考虑在
sshd_config
文件中设置PasswordAuthentication no
,从而全面禁用密码登录,进一步提升系统安全性。
在 CentOS 中启用 root 用户是一个简单直接的过程,但背后隐藏着不容忽视的安全隐患,请根据您的实际需求,审慎评估风险,并始终遵循最小权限原则进行操作。
相关问答 FAQs
问题1:为什么现代 Linux 发行版(如 CentOS)默认禁用 root SSH 登录?
解答:这主要是出于安全考虑,root 账户是系统中权限最高的账户,是攻击者进行暴力破解攻击的首要目标,如果允许 root 用户直接通过密码登录,攻击者可以尝试不断地猜测密码,一旦成功,他们就能获得系统的完全控制权,默认禁用此功能,可以强制管理员使用普通账户登录,再通过 sudo
提权,这样不仅增加了攻击的难度(需要破解两个账户),而且所有的提权操作都会被记录下来,便于安全审计。
问题2:我已经为 root 用户设置了密码,但使用 SSH 连接时仍然提示 “Permission denied”,这是为什么?
解答:这个问题最常见的原因是 SSH 服务的配置文件(/etc/ssh/sshd_config
)中禁止了 root 登录,即使 root 账户本身有密码,SSH 守护进程(sshd)也会根据其配置文件中的 PermitRootLogin
参数来决定是否允许登录,您需要检查该参数的值,如果它是 no
,则表示禁止登录,您需要将其修改为 yes
或 prohibit-password
,然后使用 sudo systemctl restart sshd
命令重启 SSH 服务,配置才能生效,请确保在修改前充分了解其安全风险。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复