chroot の隔離された環境は,chroot により,ファイルシステムが分離された環境.
ユースケース: Ubuntu で,新規ユーザと,隔離された環境(chroot 環境)を作りたい.そして,その新規ユーザのユーザ名とパスワードを用いて SSH でリモートログインし,その隔離された環境(chroot 環境)を自由に使いたい
【目次】
Ubuntu で OS のシステム更新を行うときは, 次のコマンドを実行.
Ubuntu のインストールは別ページ »で説明
sudo apt -y update sudo apt -yV upgrade sudo /sbin/shutdown -r now
次のように設定する.
次のページの記載による https://wiki.ubuntulinux.jp/UbuntuPackagingGuideJa/appendix-chroot
sudo apt -y install debootstrap schroot
ここでの設定
終了まで,しばらく待つ
sudo rm -rf /var/ubuntu2204 sudo mkdir /var/ubuntu2204 sudo debootstrap --arch amd64 --variant buildd --include=ca-certificates,apt,wget,sudo jammy /var/ubuntu2204 http://jp.archive.ubuntu.com/ubuntu
確認が終わったら chroot 環境を終える.
sudo chroot /var/ubuntu2204 bash uname -a exit
これは,隔離された環境(chroot 環境)の中で,procfs などを使うためのもの
/tmp /var/ubuntu2204/tmp none bind 0 0 proc-chroot /var/ubuntu2204/proc proc defaults 0 0 devpts-chroot /var/ubuntu2204/dev/pts devpts defaults 0 0
sudo mount -a
次の操作を行い,プロセス情報が表示されれば OK
確認が終わったら chroot 環境を終える.
sudo chroot /var/ubuntu2204 bash ps exit
※ このとき「ps -augx」を実行すると,すべてのプロセス情報が表示される.
echo "deb http://jp.archive.ubuntu.com/ubuntu jammy main restricted universe multiverse" | sudo tee -a /var/ubuntu2204/etc/apt/sources.list echo "deb-src http://jp.archive.ubuntu.com/ubuntu jammy main restricted universe multiverse" | sudo tee -a /var/ubuntu2204/etc/apt/sources.list
終わったら chroot 環境を終える.
sudo chroot /var/ubuntu2204 bash apt update apt -y install dialog build-essential dh-make automake pbuilder gnupg lintian wget debconf devscripts gnupg sudo language-pack-ja apt -y install
schroot を設定し,一般ユーザでも chroot が実行できるようにする
「directory=/var/ubuntu2204」のところは,実際に作成したディレクトリに書き換えること
「kaneko」のところは,使用させたいユーザのユーザ名に書き換えること(複数のときは,カンマで区切る)
[ubuntu2204] description=Ubuntu 22.04 (Jammy) type=directory directory=/var/ubuntu2204 root-users=kaneko users=kaneko
schroot -l schroot -i -c ubuntu2204
schroot を動作させるとき「ubuntu2204」のところに何を書けば良いのか分からなくなったときは,「schroot -l」で確認できる.
これで確認できる通り,ホームディレクトリが入ったドライブはマウントされる.
schroot -c ubuntu2204 -p bash uname -a pwd exit
ここでは,nano のインストール, C プログラムの編集とビルドと実行を行ってみる.
schroot -c ubuntu2204 -p bash
chroot 環境でも使用感は変わらない.
sudo apt -y install nano
エディタを使って次のプログラムファイルを作成。「/tmp/hello.c」のようなファイル名で保存.
#include<stdio.h> int main() { printf("Hello,World!\n"); printf("sizeof(size_t)=%ld\n", sizeof(size_t)); return 0; }
cd /tmp gcc -o a.out hello.c ./a.out
exit
仮想マシンのために使用するディレクトリの「/var/ubuntu2204」とは別物
sudo adduser --uid 1234 --home /home/ai ai
※ やり直すときは「sudo deluser ai」を実行して,アカウントを削除してからやり直す.
これは,隔離された環境(chroot 環境)の中で,sudo を実行したいときなどのため,隔離された環境(chroot 環境)の中でアカウント(ユーザ名,パスワード)を追加する.
※ 上で設定したパスワードと同じパスワードにする必要はない.ユーザID,ホームディレクトリ,ユーザ名は同じにすること.
sudo chroot /var/ubuntu2204 bash rm -rf /home/ai deluser ai adduser --uid 1234 --ingroup sudo --home /home/ai ai exit
これは,隔離された環境(chroot 環境)の中で,sudo を実行したいときのため.(必要がなければ,この操作は省略すること).
/var/ubuntu2204/etc/sudoers に「Defaults visiblepw」を書き加える.
権限を変えておく
sudo chmod 444 /var/ubuntu2204/etc/sudoers sudo chmod 444 /var/ubuntu2204/etc/sudoers.d/*
ssh を使ってのリモートログインを受け付けたい. ssh の定めにより所有者を root に,権限を「755」に設定する.
sudo chown root:root /home sudo chmod 755 /home sudo chown root:root /var/ubuntu2204 sudo chmod 755 /var/ubuntu2204 sudo chown root:root /var/ubuntu2204/home sudo chmod 755 /var/ubuntu2204/home sudo chown root:root /var/ubuntu2204/home/ai sudo chmod 755 /var/ubuntu2204/home/ai
SSH によるリモートログイン時に chroot が実行されるように,/etc/ssh/sshd_config に次の記述を追加
「ChrootDirectory=/var/ubuntu2204」の「/var/ubuntu2204」のところは,実際に作成したディレクトリに書き換えること
Match User ai X11Forwarding yes AllowTcpForwarding yes ChrootDirectory /var/ubuntu2204
※ もし,sshd_configの中で「AllowUser xxxx」のように,ログインできるユーザ名の指定を行っているときは,そこに「ai」を付け加える
sudo service sshd reload
ssh ai@localhost
※ エラーメッセージが出てログインできない場合には,/etc/ssh/sshd_config の設定,そして,「ディレクトリの権限の設定」を確認する