如何(以及为什么)在 Linux 上通过 SSH 禁用 root 登录

已发表: 2022-09-29
显示 bash 提示符的 Linux 笔记本电脑
fatmawati achmad zaenuri/Shutterstock.com

以 Linux root 用户身份登录是不好的做法。 通过 SSH 连接以 root 身份登录更糟糕。 我们告诉您原因,并向您展示如何预防。

两刃剑

您需要有权拥有和管理操作系统中那些对于普通用户来说太重要或太敏感而无法处理的部分的人。 这就是 root 的用武之地。root 是 Unix 和 Linux 操作系统的全能超级用户。

与所有帐户一样,root 用户帐户受密码保护。 如果没有 root 用户的密码,其他任何人都无法访问该帐户。 这意味着其他任何人都不能使用 root 的特权和权力。 另一方面,恶意用户和 root 权限之间的唯一防御就是密码。 当然,密码可以被猜测、推断、发现写在某处,或暴力破解。

如果恶意攻击者发现了 root 的密码,他们就可以登录并对整个系统做任何他们喜欢的事情。 使用 root 的提升权限,他们可以做的事情没有任何限制。 就好像 root 用户在没有注销的情况下离开了终端,允许机会主义地访问他们的帐户。

为什么你不应该以 root 身份登录你的 Linux 系统
相关为什么你不应该以 root 身份登录你的 Linux 系统

由于这些风险,许多现代 Linux 发行版不允许 root 在本地登录计算机,更不用说通过 SSH。 root 用户存在,但没有为他们设置密码。 然而,必须有人能够管理系统。 该难题的解决方案是sudo命令。

sudo允许指定用户在他们自己的用户帐户中临时使用 root 级别的权限。 您需要进行身份验证才能使用sudo ,您可以通过输入自己的密码来执行此操作。 这使您可以临时访问 root 的功能。

当您关闭使用它们的终端窗口时,您的 root 权限就会消失。如果您让终端窗口保持打开状态,它们将超时,自动将您返回到常规用户状态。 这提供了另一种类型的保护。 它保护你免受自己的伤害。

如果您习惯性地以 root 而不是普通帐户登录,那么您在命令行上犯的任何错误都可能是灾难性的。 必须使用sudo来执行管理意味着您更有可能专注并小心您键入的内容。

允许通过 SSH 进行 root 登录会增加风险,因为攻击者不必在本地; 他们可以尝试远程暴力破解您的系统。

相关:如何在 Linux 上查看 sudo 命令用法

root 用户和 SSH 访问

当您为其他人管理系统时,您更有可能遇到此问题。 有人可能已经决定设置一个 root 密码以便他们可以登录。需要更改其他设置以允许 root 通过 SSH 登录。

这件事不会偶然发生。 但它可以由不了解相关风险的人来完成。 如果您接管了处于该状态的计算机的管理,您需要告知所有者为什么这是一个坏主意,然后将系统恢复到安全工作状态。 如果是以前的系统管理员配置的,业主可能不知道。

这是运行 Fedora 的计算机上的用户,以 Ubuntu 计算机的 root 用户身份与 Ubuntu 计算机建立 SSH 连接。

 ssh [email protected] 

使用 SSH 连接到远程计算机的 root 用户

Ubuntu 计算机允许 root 用户通过 SSH 登录。 在 Ubuntu 计算机上,我们可以看到 root 用户正在进行实时连接。

使用 who 命令列出已登录用户

我们看不到谁在使用该会话。 我们不知道SSH连接另一端的人是root用户还是设法获得root密码的人。

禁用 root 的 SSH 访问

要禁用 root 用户的 SSH 访问,我们需要更改 SSH 配置文件。 它位于“/etc/ssh/sshd_config”。 我们需要使用sudo对其进行更改。

 sudo gedit /etc/ssh/sshd_config 

编辑 sshd-config 文件

滚动文件或搜索字符串“PermitRootLogin”。

将其设置为“否”或通过将哈希“ # ”作为该行的第一个字符来注释该行。 保存您的更改。

我们需要重新启动 SSH 守护程序,以便我们的更改生效。

 sudo systemctl 重启 ssh 

重新启动 sshd 守护进程

如果您还想阻止本地登录,请禁用 root 的密码。 我们采用带和大括号的方法并同时使用-l (锁定)和-d (删除密码)选项。

 须藤密码根 -ld 

锁定 root 帐户并删除 root 密码

这将锁定帐户并将帐户密码删除到交易中。 即使 root 用户实际坐在您的计算机旁,他们也无法登录。

允许 root SSH 访问的更安全方法

有时您会遇到管理人员对通过 SSH 删除 root 访问权限的抵制。 如果他们真的不听,您可能会发现自己处于必须恢复它的位置。 如果是这种情况,您应该能够以一种降低风险的方式进行妥协,并且仍然允许 root 用户进行远程登录。

如何从 Linux Shell 创建和安装 SSH 密钥
相关如何从 Linux Shell 创建和安装 SSH 密钥

使用 SSH 密钥通过 SSH 建立连接比使用密码安全得多。 因为不涉及密码,所以它们不能被暴力破解、猜测或以其他方式发现。

在锁定本地 root 帐户之前,请在远程计算机上设置 SSH 密钥,以便 root 用户可以连接到本地计算机。 然后继续删除他们的密码并锁定他们的本地帐户。

我们还需要再次编辑“sshd_config”文件。

 sudo gedit /etc/ssh/sshd_config 

编辑 sshd-config 文件

更改“PermitRootLogin”行,使其使用“prohibit-password”选项。

保存更改并重新启动 SSH 守护程序。

 sudo systemctl 重启 ssh 

重新启动 sshd 守护进程

现在,即使有人恢复了 root 用户的密码,他们也无法使用密码通过 SSH 登录。

当远程 root 用户与您的本地计算机建立 SSH 连接时,会交换和检查密钥。 如果他们通过身份验证,root 用户无需密码即可连接到您的本地计算机。

 ssh [email protected] 

root 用户使用 SSH 连接到远程计算机而无需密码

禁止驶入

拒绝来自 root 用户的远程连接是最好的选择。 允许 root 使用 SSH 密钥进行连接是次优的,但仍然比使用密码好得多。

相关:如何在 Linux 上控制 sudo 访问