昨天在一知半解中, 不小心把 sudoers 删掉了. 后来追溯一下, 发现可能是这一句坏的事儿:

1
 sudo usermod -G "" $(whoami)

ChatGPT 是这样解释的:

这个命令很关键,因为它将当前用户的组成员资格设置为了空,这意味着它实际上从所有附加的用户组中删除了用户(除了用户的主组)。在 Linux 中,每个用户都会有一个与其用户名同名的主组,通常用户不会通过 usermod -G 从这个组中被移除。但是,通过将用户从所有其他组中移除,这个命令可能会导致你失去对某些资源的访问权限,特别是那些需要组成员资格的资源,比如使用 sudo 的能力(如果你被移除了 wheel 或相应的 sudo 权限组)。

最简单的办法

用另一个用户名登录, 然后运行命令:

1
sudo usermode -aG wheel your_name

当然, 这个办法的前提是存在另一个 wheel 的用户. 如果没有第二个这样的用户, 很可能根用户的密码也丢失了, 怎么办?

LiveCD/USB

使用 Live CD 或 USB 启动并修改系统以将用户添加到 wheel 组包含几个步骤。这里假设你已经有一个可启动的 Arch Linux Live CD 或 USB。步骤如下:

  1. 启动到 Live 环境

    • 将 Live CD 或 USB 插入电脑。
    • 重启电脑,并在启动时进入 BIOS 或 UEFI 启动菜单。
    • 从 Live CD 或 USB 启动。
  2. 挂载系统分区

    • 一旦进入 Live 环境,打开一个终端。
    • 使用 lsblkfdisk -l 命令查看磁盘分区,找出你的根( / )分区。假设它是 /dev/sda1 (实际上可能不同,根据你的系统情况替换)。
    1
    
       lsblk
    
    • 创建一个挂载点并挂载根分区。例如:
    1
    2
    
       sudo mkdir /mnt/arch
       sudo mount /dev/sda1 /mnt/arch
    
    • 如果你的 /home 分区是分开的,也需要挂载它(同样替换下面的分区名称):
    1
    
       sudo mount /dev/sdaX /mnt/arch/home
    
  3. arch-chroot 进入安装系统

    • 使用 arch-chroot 命令切换到你的 Arch Linux 安装环境:
    1
    
       sudo arch-chroot /mnt/arch
    
    • 这样你就可以像在实际安装的系统中一样执行命令了。
  4. 添加用户到 wheel 组

    • 现在你可以将用户添加到 wheel 组了。使用 usermod 命令:
    1
    
       usermod -aG wheel username
    
    • username 替换为实际的用户名。
  5. 退出并重启

    • 退出 chroot 环境:
    1
    
       exit
    
    • 卸载所有挂载点:
    1
    
       sudo umount -R /mnt/arch
    
    • 重启你的电脑,并拔出 Live CD/USB:
    1
    
       sudo reboot
    

启动后,你的用户现在应该已经是 wheel 组的成员了,可以使用 sudo 了。确保 /etc/sudoers 文件或相应的 sudo 配置允许 wheel 组成员使用 sudo。

修改启动参数

如果你在 Arch Linux 上不小心将自己从 sudoers 文件中删除,并且忘记了 root 密码,还有一些方法可以尝试恢复访问权限。以下步骤可以帮助你重置 root 密码,并重新获得 sudo 权限:

  1. 重新启动并进入 Boot Loader

    • 重启你的电脑。
    • 当启动到 Boot Loader(比如 GRUB)时,按 E 键来编辑启动参数。
  2. 修改启动参数以启动到单用户模式

    • 找到以 linux 开头的那行,它包含了启动时的内核参数。
    • 在行尾添加 init=/bin/bash ,这会在启动时直接进入 bash,而不是正常的启动过程。
    • Ctrl + XF10 (取决于你的 boot loader)启动系统。
  3. 重新挂载根分区为可写

    • 一旦进入系统,你的根文件系统会以只读模式挂载。你需要重新挂载为可写模式以进行更改:
      1
      
           mount -o remount,rw /
      
  4. 重置 root 密码

    • 现在你可以重置 root 密码了:
      1
      
           passwd root
      
    • 按照提示输入新的 root 密码两次。
  5. 重新启动

    • 输入 exec /sbin/init 或者重启电脑以正常方式启动 Arch Linux。
    • 现在你应该能够使用新设置的 root 密码登录了。
  6. 恢复 sudo 权限

    • 一旦你以 root 用户登录,你可以编辑 /etc/sudoers 文件来恢复你的 sudo 权限,或者直接给你的用户添加到 wheel 组(如果之前配置了 wheel 组可以使用 sudo):
      1
      
           usermod -aG wheel your_username
      
    • 确保 /etc/sudoers 文件中有类似这样的行,允许 wheel 组的成员使用 sudo:
      1
      
           %wheel ALL=(ALL) ALL
      

请在执行这些步骤时小心谨慎,尤其是在编辑 boot loader 和重置密码时。这些步骤涉及系统的底层操作,有可能会导致系统不稳定或数据丢失,如果你对任何步骤不确定,最好寻求有经验人士的帮助。