Ubuntu 20.04でdockerを設定するときsudo usermod -G docker $USER
。ここに関連する質問で述べたように、フラグを見逃してすべての-a
補助グループを交換しました。しかし、私はマシンを再起動するまでこれを実現できませんでした。これはシングルユーザーワークステーションです。でこの問題を解決できますが、root
パスワードはありません。ルートアクセスなしで正しいグループを復元するにはどうすればよいですか?今問題を引き起こす唯一の事はですsudo
。しかし、他の問題が発生すると確信しています。 Ubuntuを最初から再インストールせずにできることはありますか?
答え1
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を最初から再インストールせずにできることはありますか?
他の回答で提供されているドッカー固有の方法に加えて、物理的なアクセスがあり、対策がない場合*再起動する準備ができている場合は、ほぼ常にシステムに入ることができます。
いくつかの一般的な方法があります。
1つはlivecdを使用してファイルシステムをマウントすることです。
もう一つの方法は、"init = / bin / sh"トリックを使用することです。 grubメニューに入ったら、起動オプションを選択してEnterキーを押すのではなく、eを押してからinit = / bin / shを押します。カーネルコマンドライン。これにより、起動プロセスの初期にシェルに入ることができます。この時点で、ルートファイルシステムはまだ読み取り専用である可能性があるため、書き込みmount -o remount,rw /
可能にしてください。その後、sudoグループを使用してrootパスワードを設定したり、passwd root
ユーザーをsudoグループに追加したりできますadduser myuser sudo
。編集が完了したら、通常はexec init
起動プロセスを続行できます。
* BIOS/ブートローダのパスワードは1つであり、一部のディスク暗号化タイプは別のパスワードである可能性があります。