Ubuntu Root 密码设置教程 – wiki基地


Ubuntu Root 密码设置教程:解锁超级用户权限并理解其意义

前言

在 Linux 系统中,root 用户是拥有最高权限的超级管理员账户。它可以执行系统上的任何操作,包括安装、修改或删除任何文件和程序,管理用户和权限,以及配置系统核心设置。在传统的 Linux 发行版(如 Debian、Fedora 等)中,root 用户通常在安装时就会被设置密码,并可以直接通过用户名 root 和其密码登录系统或使用 su 命令切换到 root 用户。

然而,Ubuntu 在设计上采取了不同的策略。出于安全考虑,Ubuntu 默认禁用了 root 账户的直接登录。安装过程中,您创建的第一个用户会被添加到 sudo 用户组中,从而获得使用 sudo 命令以 root 权限执行特定操作的能力。这种机制提高了系统的安全性,减少了意外损坏系统的风险,同时也降低了通过 SSH 等方式遭受暴力破解攻击的概率,因为攻击者无法直接猜解 root 账户的密码。

尽管如此,在某些特定场景下,您可能仍然需要为 root 账户设置一个密码,或者您可能需要通过进入恢复模式来重置密码(包括用户密码和可能的 root 密码)。本文将详细介绍如何在 Ubuntu 系统中设置 root 密码,以及相关的安全注意事项和原理。

我们将涵盖以下内容:

  1. 理解 Ubuntu 的 sudo 机制及其与 root 用户的关系。
  2. 通过 sudo 命令设置 root 密码(适用于您拥有 sudo 权限的情况下)。
  3. 在无法使用 sudo 的情况下(例如忘记用户密码),通过恢复模式设置 root 密码。
  4. 设置 root 密码后的影响和安全建议。
  5. 如何禁用 root 账户的直接登录(如果之前已启用)。
  6. susudo 的区别。
  7. 潜在问题与故障排除。

第一部分:理解 Ubuntu 的 sudo 机制与 Root 用户

在深入操作之前,理解 Ubuntu 如何处理 root 权限至关重要。

  • Root 用户 (UID 0): 这是系统上权限最高的用户。它可以执行任何操作,绕过标准的文件权限和用户限制。在许多系统管理任务中都需要 root 权限。
  • Sudo: sudo (superuser do) 允许普通用户以另一个用户的身份执行命令,通常是 root 用户。当您使用 sudo 执行命令时,系统会要求您输入当前用户的密码(而不是 root 密码)。如果您的用户被允许执行该命令(通过 /etc/sudoers 文件配置),则命令会以 root 权限执行。
  • Ubuntu 的默认策略: Ubuntu 默认安装后,root 账户是存在的,但它没有设置密码,并且其 /etc/shadow 条目中的密码字段是被锁定或标记为不可登录的(通常是一个 !*)。这意味着您无法通过用户名 root 和密码直接登录,也无法使用 su - 命令切换到 root(因为 su 默认尝试切换到 root 并要求输入 root 密码)。相反,系统鼓励用户使用 sudo 来执行需要管理员权限的任务。

这种设计的好处是:
* 安全性高: 避免了 root 账户密码泄露的风险,也防止了直接针对 root 账户的远程暴力破解。
* 可追溯性: sudo 会记录哪些用户执行了哪些 root 命令,便于审计。
* 防止误操作: 用户不会长时间停留在 root 权限下,降低了因疏忽而对系统造成破坏的可能性。

但是,在某些情况下,您可能需要真正“启用” root 账户并为其设置密码:
* 某些旧的程序或脚本可能硬编码使用 su - 来切换到 root
* 在系统恢复模式下,设置 root 密码是获取完全控制权的一种方式。
* 特定服务器配置可能需要直接的 root 访问(尽管不推荐通过网络直接登录)。

接下来,我们将介绍如何设置 root 密码。

第二部分:通过 sudo 命令设置 Root 密码 (标准方法)

这是最常见的方法,适用于您当前已经可以登录到 Ubuntu 系统,并且您的用户拥有 sudo 权限(通常是安装系统时创建的第一个用户)。

前提条件:

  • 已登录到 Ubuntu 系统。
  • 您当前登录的用户属于 sudo 用户组,可以使用 sudo 命令。

操作步骤:

  1. 打开终端: 在您的 Ubuntu 桌面环境中,按下 Ctrl + Alt + T 组合键,或者在应用菜单中搜索 “终端” (Terminal) 并打开它。如果您是通过 SSH 连接到服务器,则已经处于终端环境中。

  2. 执行 passwd 命令为 root 用户设置密码: 在终端中输入以下命令并按下回车键:

    bash
    sudo passwd root

    这条命令的含义是:使用 sudo 命令(以超级用户权限)执行 passwd 命令,并指定要修改密码的用户是 root

  3. 输入当前用户的密码: 系统会提示您输入当前登录用户的密码(用于验证您是否有权使用 sudo)。您输入密码时,终端上不会显示任何字符(包括星号),这是正常的安全设置。输入密码后按下回车键。

    [sudo] password for your_username:

    注意:请确保您输入的是您当前登录用户的密码,而不是希望设置的 root 密码。

  4. 设置新的 root 密码: 如果您输入的当前用户密码正确,系统会提示您输入新的 root 密码。

    Enter new UNIX password:

    请仔细输入您希望为 root 用户设置的新密码。同样,输入时终端不会显示任何字符。选择一个强密码,包含大小写字母、数字和特殊符号,且长度不少于12个字符。输入完毕后按下回车键。

  5. 确认新的 root 密码: 系统会要求您再次输入新的 root 密码以进行确认,确保两次输入的密码一致。

    Retype new UNIX password:

    再次输入您刚才设置的 root 密码,然后按下回车键。

  6. 确认密码设置成功: 如果两次输入的密码一致,并且系统成功修改了 root 用户的密码,您将看到类似以下的输出信息:

    passwd: password updated successfully

    这意味着您已经成功为 root 账户设置了一个密码。

设置密码后的影响:

一旦 root 账户设置了密码:

  • root 账户被“启用”了。
  • 您现在可以使用以下方法以 root 身份登录或切换:
    • 登录到终端或图形界面 (不推荐): 在登录界面输入用户名 root 和您刚刚设置的密码(并非所有发行版和配置都允许直接图形界面登录)。
    • 使用 su - 命令切换到 root 用户: 在终端中输入 su - 并按下回车,系统会提示您输入 root 用户的密码。输入正确后,您将切换到 root 用户环境(提示符通常变为 # ),并拥有完全的 root 权限,直到您输入 exit 退出 root 会话。
    • 使用 su 命令切换到 root 用户 (不加载root环境变量): 输入 su rootsu。同样需要输入 root 密码。与 su - 不同的是,su 只切换用户身份,不加载 root 用户的环境变量和配置文件,可能导致某些命令行为异常或找不到。通常推荐使用 su - 进行完整的 root 环境切换。

安全建议:

尽管您现在可以方便地使用 su 或直接登录 root,但这增加了系统的安全风险。强烈建议您:

  • 只在必要时使用 su -: 尽量还是优先使用 sudo 执行特定命令。
  • 不要通过网络直接登录 root (特别是 SSH): 大多数服务器的 SSH 配置(/etc/ssh/sshd_config)默认是禁止 PermitRootLogin yes 的。即使您设置了 root 密码,也无法通过 SSH 直接以 root 登录,除非您修改了这个配置文件(强烈不推荐)。这是一种重要的安全防护。
  • 使用强密码: 如前所述,为 root 设置一个复杂且独特的密码。
  • 考虑再次禁用直接 root 登录: 如果您只是为了临时需要设置密码(例如为了使用 su - 执行某个特定脚本),之后可以考虑再次锁定 root 账户的密码。

如何再次锁定/禁用 root 账户的密码 (可选但推荐):

如果您希望 root 账户仍然存在但无法通过密码直接登录或使用 su 切换,可以锁定其密码。这不会删除 root 账户,也不会影响 sudo 的使用。

在终端中执行以下命令:

bash
sudo passwd -l root

这条命令使用 sudo (以 root 权限) 执行 passwd 命令的 -l (lock,锁定) 选项,目标用户是 root

系统会提示您输入当前用户的密码以确认 sudo 权限。成功后,您会看到类似输出:

bash
passwd: password expiry information changed.

此时,root 账户的密码已经被锁定,无法用于登录或使用 su 命令。但拥有 sudo 权限的用户仍然可以通过 sudo 执行命令。如果您需要再次启用 root 密码,只需重复 “通过 sudo 命令设置 Root 密码” 的步骤即可(重新设置密码会自动解锁)。

第三部分:通过恢复模式设置 Root 密码 (用于密码丢失或其他故障)

如果您忘记了拥有 sudo 权限的用户的密码,或者系统启动遇到问题无法正常登录,您将无法使用上述 sudo passwd root 的方法来设置或重置密码(包括 root 密码或任何其他用户密码)。在这种情况下,您需要进入系统的恢复模式(Recovery Mode)。

前提条件:

  • 能够物理接触到 Ubuntu 计算机。
  • 计算机可以正常启动到 GRUB 引导菜单(或者您知道如何进入 GRUB)。

操作步骤:

  1. 重启或开机您的计算机。

  2. 进入 GRUB 引导菜单: 在计算机刚启动时,在屏幕出现 GRUB 菜单之前(通常在主板或制造商 Logo 闪过后),您需要及时按下某个键来显示 GRUB 菜单。

    • 对于大多数较新的系统,通常是按住 Shift 键。
    • 对于一些旧系统或虚拟机,可能是按 Esc 键。
    • 有时,如果系统检测到双系统,GRUB 菜单会自动显示。
    • 如果错过了时机,系统会继续正常启动,您需要再次重启。
  3. 选择 Ubuntu 启动项并编辑: 在 GRUB 菜单中,使用键盘的上下箭头键选中您要引导的 Ubuntu 系统(通常是列表中的第一项,写有 “Ubuntu” 字样)。不要直接按回车! 按下键盘上的字母 e 键来编辑该启动项的引导参数。

  4. 修改引导参数: 进入编辑界面后,您会看到很多行文本,描述了系统的引导方式。找到以 linux 开头的那一行(通常很长,包含了 vmlinuzroot= 等参数)。

    • 在这一行的末尾(在 quiet splashro quiet splash vt.handoff=7 等参数之后),添加或修改参数。
    • 找到 ro quiet splash 或类似的参数。
    • 将它们修改为 rw init=/bin/bash
      • rw: 表示将根文件系统 (/) 以读写 (read-write) 模式挂载。默认恢复模式或正常启动初期可能是只读 (read-only),我们需要写权限来修改密码文件。
      • init=/bin/bash: 这告诉系统启动时不加载正常的初始化系统(systemd 或 Upstart),而是直接启动 /bin/bash shell。这将直接给您一个 root 权限的命令行提示符,无需登录。

    修改后的行看起来像这样(示例,具体参数可能不同,只需找到 linux 行并在末尾添加/修改):

    linux /boot/vmlinuz-x.y.z-generic root=UUID=... ro quiet splash rw init=/bin/bash

    请注意,您可能需要删除原有的 ro quiet splash 参数并替换为 rw init=/bin/bash,或者直接在后面添加 rw init=/bin/bash 并确保 rorw 覆盖(直接添加 rw 多数情况下有效)。最稳妥的方式是找到 ro 参数,将其改为 rw,然后在行的最后添加 init=/bin/bash

  5. 引导系统: 修改完成后,按下 F10 键或者 Ctrl + X 组合键来使用修改后的参数引导系统。

  6. 进入 Root Shell: 系统会跳过正常的启动过程,直接进入一个 root 权限的 shell 环境。您看到的提示符可能非常简单,例如 #root@(none):/#

  7. 检查文件系统是否可写 (如果需要): 虽然我们在 GRUB 参数中指定了 rw,但有时文件系统仍然可能被挂载为只读。为了确保您能够修改 /etc/shadow 文件(密码就存储在这里),最好显式地重新挂载根文件系统为读写模式。输入以下命令并回车:

    bash
    mount -o remount,rw /

    执行此命令通常不会有任何输出。

  8. 设置 Root 密码: 现在您已经处于 root shell 环境,可以直接使用 passwd 命令为 root 用户设置密码,无需 sudo

    bash
    passwd root

    系统会提示您输入并确认新的 root 密码,与第二部分中的步骤 4 和 5 相同。请仔细输入两次新密码。

  9. 设置其他用户密码 (可选): 如果您进入恢复模式的目的是重置某个普通用户的密码(因为忘记了密码而无法使用 sudo),也可以在这里进行。假设您要重置用户名为 your_username 的密码:

    bash
    passwd your_username

    系统会提示您为 your_username 输入并确认新密码。

  10. 同步磁盘数据: 为了确保刚才修改的密码立即写入到磁盘,而不是停留在内存缓存中,执行 sync 命令:

    bash
    sync

    执行此命令通常也没有输出。

  11. 重启系统: 密码修改完毕并同步后,使用以下命令重启系统:

    bash
    reboot

    重要提示: 不要直接关闭终端窗口或按电源键!这可能导致数据丢失或文件系统损坏。务必使用 reboot 命令干净地重启系统。

  12. 正常登录: 系统重启后,会按照正常的引导流程启动。您现在可以使用新设置的密码登录相应的账户了。如果您设置了 root 密码,也可以尝试使用 su - 切换到 root 用户。如果您重置了普通用户密码,可以使用新密码登录您的用户账户,并通过 sudo 执行管理员任务。

第四部分:设置 Root 密码后的影响和安全建议

如前所述,为 root 设置密码有效地“启用”了 root 账户的直接登录和 su 切换功能。这为系统带来了便利,但也引入了额外的安全风险。

主要风险:

  • 暴力破解攻击: 如果允许通过网络(如 SSH)直接以 root 身份登录,攻击者可能会尝试通过不断猜测密码来入侵系统。root 账户是所有 Linux 系统都存在的,是攻击者的首要目标。
  • 单点故障: root 账户拥有无限权力。如果 root 密码泄露,或有人通过 root 账户进行了误操作,可能导致系统完全损坏或数据丢失,且很难恢复。相比之下,sudo 限制了每次需要提升权限的操作,且要求用户输入自己的密码,多了一层防护。
  • 审计困难: 如果多人共享 root 密码并直接使用 su - 登录,将难以追踪具体是哪个用户执行了某个危险操作。而 sudo 会记录执行命令的用户。

推荐的安全实践:

  1. 优先使用 sudo: 尽可能通过您的普通用户账户和 sudo 来执行需要管理员权限的任务。这是 Ubuntu 推荐的方式,也是最安全的默认配置。
  2. 不要允许 root 通过 SSH 直接登录: 检查您的 SSH 服务器配置文件 (/etc/ssh/sshd_config)。确保 PermitRootLogin 参数设置为 nowithout-password。如果设置为 yes,强烈建议您修改并重启 SSH 服务 (sudo systemctl restart sshdsudo service sshd restart)。如果您确实需要在远程执行 root 权限命令,更好的方法是使用普通用户通过 SSH 登录,然后再使用 sudo
  3. 使用强密码: 如果您决定设置并使用 root 密码(例如为了方便本地使用 su -),请务必选择一个非常复杂的密码,并妥善保管。
  4. 考虑在不需要时锁定 root 密码: 如果您只是为了完成某个一次性任务而设置了 root 密码,任务完成后可以考虑使用 sudo passwd -l root 命令再次锁定 root 账户的密码,恢复到 Ubuntu 的默认安全状态。

第五部分:如何禁用 Root 账户的直接登录 (如果之前已启用)

如果您之前因为某些原因启用了 root 账户的直接登录(比如通过 sudo passwd root 设置了密码),并希望恢复到 Ubuntu 的默认更安全状态,可以通过以下方法实现:

  1. 锁定 Root 密码: 这是最常见的方法,可以防止通过密码登录或使用 su 切换到 root

    打开终端,执行:

    bash
    sudo passwd -l root

    输入您的用户密码以确认 sudo 权限。成功后,root 密码会被锁定,无法用于身份验证。

  2. 检查 SSH 配置 (如果涉及远程访问): 即使您锁定了 root 密码,如果 sshd_configPermitRootLogin 被设置为 yes,并且您配置了基于密钥的 root 登录,那么锁定密码可能无效。为了防止通过网络以 root 身份登录,确保 SSH 配置文件 /etc/ssh/sshd_configPermitRootLogin 行是:

    PermitRootLogin no

    或者

    PermitRootLogin without-password

    如果不是,使用 sudo 编辑该文件(例如 sudo nano /etc/ssh/sshd_config),找到并修改该行。修改后,需要重启 SSH 服务使配置生效:

    bash
    sudo systemctl restart sshd

    或对于较旧的系统:

    bash
    sudo service sshd restart

执行上述步骤后,您的 Ubuntu 系统将回到默认的、更安全的配置,即通过 sudo 管理权限,而不是直接登录或切换到 root

第六部分:susudo 的区别

在讨论 Root 权限时,susudo 是两个经常被提及的命令,它们都可以用来以另一个用户的身份执行命令,但工作方式和使用场景有所不同。

  • su (Substitute User 或 Switch User):

    • 用途: 切换到另一个用户账户。如果后面不跟用户名,默认切换到 root 用户。
    • 认证方式: 要求输入目标用户的密码。例如,使用 su - 切换到 root 需要输入 root 用户的密码。使用 su another_user 需要输入 another_user 的密码。
    • 环境:
      • su: 只切换用户身份,保留原用户的环境变量和工作目录。这可能导致一些问题,因为目标用户(如 root)可能依赖特定的环境变量。
      • su - (带 ---login 选项): 切换到目标用户身份,并加载目标用户的环境变量、工作目录和 shell 配置,就像目标用户直接登录一样。这是更常用的切换到 root 的方式。
    • 退出: 输入 exit 命令回到原用户。
    • Ubuntu 中的默认行为: 由于 Ubuntu 默认没有为 root 设置密码,su -su 命令在没有设置 root 密码的情况下将无法成功切换到 root(会提示认证失败)。
  • sudo (Superuser Do):

    • 用途: 以另一个用户的身份(默认是 root)执行一条或一系列指定命令
    • 认证方式: 要求输入当前用户的密码。系统会检查 /etc/sudoers 文件,看当前用户是否被授权执行该命令。
    • 环境: 默认情况下,sudo 会在受限的环境中执行命令,以避免潜在的环境变量攻击。可以使用 sudo -isudo su - 来获得一个带有 root 环境的 shell,但这与直接 su - 仍有机制上的区别。
    • 权限控制: /etc/sudoers 文件提供了精细的权限控制,可以指定哪些用户可以以哪个身份执行哪些命令。这是 sudo 强大的地方。
    • 记录: sudo 操作会被记录,便于审计。
    • Ubuntu 中的默认行为: Ubuntu 推荐使用 sudo 来执行需要 root 权限的任务,因为无需设置 root 密码,且每次执行命令都需要当前用户验证,更加安全。

总结区别:

  • su 切换用户身份,通常需要目标用户密码;sudo 以指定用户身份执行命令,通常需要当前用户密码。
  • su - 提供完整的用户环境;sudo 默认在受限环境执行命令。
  • sudo 提供更灵活和可控的权限管理 (/etc/sudoers) 和审计功能,是 Ubuntu 等发行版推荐的权限管理方式。

第七部分:潜在问题与故障排除

在设置 root 密码或进行相关操作时,可能会遇到一些问题。

  • “Authentication failure” 或 “认证失败”:
    • 在使用 sudo passwd root 时: 这通常意味着您输入的当前用户的密码不正确。请仔细检查您的用户密码,注意键盘大小写和布局。
    • 在使用 su - 切换到 root 时: 这意味着您输入的 root 密码不正确。如果您刚刚设置了 root 密码,请确保输入无误。如果您从未设置过 root 密码,或者已经锁定了它,那么 su - 将无法使用密码切换。
  • “passwd: Authentication token manipulation error”: 这个错误通常指示文件系统有问题,可能是只读挂载、磁盘空间不足或文件系统损坏。在恢复模式下遇到此错误时,请确认您已经成功将根文件系统 / 重新挂载为读写模式 (mount -o remount,rw /)。如果不是在恢复模式,可能需要检查磁盘健康状况。
  • 无法进入 GRUB 菜单: 不同的计算机进入 GRUB 的按键和时机不同。尝试在启动时反复按 EscShift 键。如果系统启动太快,您可能需要修改 GRUB 的配置 (/etc/default/grub) 来增加显示时间或总是显示菜单(但这需要在正常启动后修改)。在虚拟机中,进入 GRUB 通常更容易。
  • 在恢复模式下的键盘布局问题: 在 GRUB 编辑界面或进入恢复模式的 shell 后,键盘布局可能不是您习惯的布局(例如 QWERTY 和 Dvorak 混淆)。如果您设置的密码包含特殊符号,请务必确认当前的键盘映射。在恢复模式的 shell 中,如果需要,可以尝试使用 loadkeys us 或其他对应您键盘布局的命令来加载正确的键盘映射,但这并非总是有效或必须。通常使用英文字母和数字组成的密码在此模式下问题较少。
  • GRUB 编辑时找不到 linux 行或修改后无法启动: 仔细检查您是否在正确的启动项下编辑,是否找到了以 linux 开头的行,并且修改的参数 (rw init=/bin/bash) 添加到了正确的位置,没有拼写错误。如果修改后无法启动,重启系统,再次进入 GRUB,选择原始的启动项(不要编辑)尝试正常启动。如果需要再次尝试恢复模式,重新仔细编辑 GRUB 参数。

结论

为 Ubuntu 的 root 用户设置密码是一个相对简单的过程,可以通过 sudo passwd root 在正常运行的系统上完成,也可以通过进入恢复模式在特殊情况下进行。然而,理解 root 账户在 Ubuntu 中的默认定位以及 sudo 的作用至关重要。

Ubuntu 默认禁用 root 直接登录的设计提供了更好的开箱即用安全性。在大多数情况下,通过 sudo 来执行需要管理员权限的任务是推荐且足够的方式。如果您确实需要设置 root 密码(例如为了使用 su - 或进行系统恢复),请务必意识到其带来的安全风险,并采取强密码、限制远程登录等措施来缓解这些风险。

记住,权限是双刃剑。合理、谨慎地使用 root 权限是维护系统稳定和安全的关键。希望这篇详细的教程能帮助您理解并正确地在 Ubuntu 中处理 root 密码。


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部