Ubuntu 20.04에서 docker를 설정할 때 sudo usermod -G docker $USER
. 여기 관련 질문에서 언급했듯이 플래그 를 놓치고 -a
모든 보조 그룹을 교체했습니다. 그러나 나는 기계를 다시 시작할 때까지 이것을 깨닫지 못했습니다. 이는 단일 사용자 워크스테이션입니다. 로 이 문제를 해결할 수 있지만 root
비밀번호가 없습니다. 루트 액세스 없이 올바른 그룹을 복원하려면 어떻게 해야 합니까? 지금 문제를 일으키는 유일한 것은 입니다 sudo
. 하지만 다른 문제가 발생할 것이라고 확신합니다. Ubuntu를 처음부터 다시 설치하지 않고 할 수 있는 일이 있나요?
답변1
한 세트 남았습니다: docker
. 이는 여전히 docker 데몬을 제어할 수 있음을 의미합니다. 이 데몬은 호스트의 루트 파일 시스템을 사용하여 컨테이너를 실행할 수 있습니다.설치됨그런 다음 컨테이너는 파일을 편집할 수 있습니다 vi
(바쁜 상자) 또는 더 간단: 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
chroot
이 이미지가 포함된 컨테이너를 대화형으로 특권 모드에서 실행합니다(AppArmor가 나중에 이 이미지 없이 명령을 차단하는 경우 ).
$ docker run -it --mount type=bind,source=/,target=/host --privileged busybox
컨테이너 내에서 대화형 명령을 계속 사용하세요. 간단히 마운트 지점으로 chroot하여 루트 파일 시스템에 "입력"하고 모든 Ubuntu 명령을 얻을 수 있습니다.
/ # chroot /host
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
로그아웃했다가 다시 로그인하거나 그룹을 수동으로 변경합니다.
myuser@myhost$ sg sudo
루트 액세스가 복원되었습니다:
myuser@myhost$ sudo -i
[sudo] password for myuser:
root@myhost#
결론은매우Docker에 대한 원격 액세스를 허용할 때는 주의하십시오(포트 2375/TCP를 통해). 기본적으로 이는 루트 액세스를 의미합니다.
답변2
Ubuntu를 처음부터 다시 설치하지 않고 할 수 있는 일이 있나요?
다른 답변에 제공된 도커별 방법 외에도 물리적 액세스가 있고 대책이 마련되어 있지 않은 경우* 재부팅할 준비가 되어 있으면 거의 항상 시스템에 들어갈 수 있습니다.
몇 가지 일반적인 방법이 있습니다.
하나는 livecd를 사용하고 파일 시스템을 마운트하는 것입니다.
또 다른 방법은 "init=/bin/sh" 트릭을 사용하는 것입니다. grub 메뉴에 들어갈 때 부팅 옵션을 선택하고 Enter 키를 누르는 대신 "e"를 누른 다음 "init=/bin/sh"를 누르는 것입니다. 커널 명령줄. 이렇게 하면 부팅 프로세스 초기에 셸로 들어갈 수 있습니다. 이 시점에서 루트 파일 시스템은 여전히 읽기 전용일 수 있으므로 mount -o remount,rw /
쓰기 가능하게 만드십시오. 그런 다음 sudo 그룹을 사용하여 루트 비밀번호를 설정 passwd root
하거나 사용자를 sudo 그룹에 추가할 수 있습니다 adduser myuser sudo
. 편집을 마치면 exec init
정상적으로 시작 프로세스를 계속할 수 있습니다.
* BIOS/부트로더 비밀번호는 하나이고, 일부 디스크 암호화 유형은 또 다른 비밀번호일 수 있습니다.