在 nuking 次要组后重新获得 sudo 访问权限

Cod*_*uru 11 ubuntu sudo group

在 Ubuntu 20.04 上设置 docker 时,我做了sudo usermod -G docker $USER. 正如这里的相关问题所述,我错过了-a标志并替换了所有次要组。但是,直到我重新启动机器后,我才意识到这一点。这是一个单用户工作站。我可以用 解决这个问题root,但我没有密码。如何在没有 root 访问权限的情况下恢复正确的组?现在唯一导致问题的是sudo,但我相信其他人会突然出现。我可以在不从头开始重新安装 Ubuntu 的情况下做任何事情吗?

A.B*_*A.B 30

您还剩下一组:docker。这意味着您仍然可以控制 docker 守护进程。这个守护进程可以运行一个挂载主机根文件系统的容器,然后容器可以编辑文件(vibusybox 中可用)或更简单的:可以chroot到主机的文件系统。

下载最小busybox图像:

myuser@myhost:~$ docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
b71f96345d44: Pull complete 
Digest: sha256:930490f97e5b921535c153e0e7110d251134cc4b72bbb8133c6a5065cc68580d
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest
Run Code Online (Sandbox Code Playgroud)

以交互方式并在特权模式下使用此图像运行容器(以防 AppArmorchroot稍后在没有它的情况下阻止命令):

$ docker run -it --mount type=bind,source=/,target=/host --privileged busybox
Run Code Online (Sandbox Code Playgroud)

继续使用容器中的交互式命令。您可以简单地 chroot 到挂载点以“进入”根文件系统并获取所有 Ubuntu 命令:

/ # chroot /host
Run Code Online (Sandbox Code Playgroud)

使用adduser它是一个更简单的包装器useradd

root@74fc1b7903e5:/# adduser myuser sudo
Adding user `myuser' to group `sudo' ...
Adding user myuser to group sudo
Done.
root@74fc1b7903e5:/# exit
exit
/ # exit
Run Code Online (Sandbox Code Playgroud)

注销并重新登录,或手动更改组:

myuser@myhost$ sg sudo
Run Code Online (Sandbox Code Playgroud)

并恢复 root 访问:

myuser@myhost$ sudo -i
[sudo] password for myuser:
root@myhost# 
Run Code Online (Sandbox Code Playgroud)

结论:在允许远程访问 Docker(通过端口 2375/TCP)时要非常谨慎。这意味着默认情况下具有 root 访问权限。

  • 不需要在“docker run”之前运行“docker pull”。如果镜像丢失,Docker 将自动下载该镜像。我认为您可以将其删除以专注于(很棒的)解决方案。 (4认同)

plu*_*ash 7

我可以在不从头开始重新安装 Ubuntu 的情况下做任何事情吗?

除了在另一个答案中给出的特定于 docker 的方法之外,如果您有物理访问权限并且没有适当的对策*,那么如果您准备重新启动系统,您几乎总是可以进入系统。

有几种常用的方法。

一种是使用 livecd 并挂载文件系统。

另一个是使用“init=/bin/sh”技巧,当你得到 grub 菜单时,选择你的引导选项,而不是按 Enter,而是按“e”,然后将“init=/bin/sh”添加到内核中命令行。这应该会让您在启动过程的早期进入 shell。根文件系统此时可能仍处于只读状态,因此请mount -o remount,rw /使其可写。然后,您应该能够使用 设置root 密码passwd root或将用户添加到 sudo 组adduser myuser sudo。完成编辑后,您可以exec init照常继续启动过程。

* bios/bootloader 密码是一种,某些类型的磁盘加密可能是另一种。