chrootを使ってテストシステムに入りました。
mount /dev/vg0/vm01.buster-test-disk /media/vm01.buster-test-disk/
mount -t proc none /media/vm01.buster-test-disk/proc
mount --bind /dev /media/vm01.buster-test-disk/dev
mount -t sysfs sysfs /media/vm01.buster-test-disk/sys
chroot /media/vm01.buster-test-disk/ /bin/bash
ホスト名を変更して終了します。
hostname buster-test
echo buster-test > /etc/hostname
echo "127.0.0.1 buster-test" >> /etc/hosts
exit
削除
umount /media/vm01.buster-test-disk/proc
umount /media/vm01.buster-test-disk/dev
umount /media/vm01.buster-test-disk/sys
umount -l /media/vm01.buster-test-disk
質問
buster-test
別のシェルにログインしても、ホストのホスト名はに設定されます。
ホスト名が変更されたのはなぜですか? chrootの内部でタスクが実行されたときにchrootの外部で変更される可能性がある他のものはありますか?
答え1
実行すると、hostname buster-test
実行中のカーネルのホスト名が変更されます(Linuxでは、UTS名前空間)。chroot
これはまったく制御できないため、ホスト名の変更は外部でも表示できます。
これにより、chroot
ファイルシステムの一部にのみアクセスが制限されます。ファイルシステムで管理されていない項目には影響しませんchroot
。これには、ネットワーク設定、日付と時刻、ユーザー権限などが含まれます。これらの変更を制限するには、以下を使用する必要があります。名前空間(またはLinux以外のシステムの同様の技術)Linuxでは、以下を実行してプロセスを分離できます。unshare
。
答え2
ホスト名はシステムコールnodename
の一部でuname(2)
あり、関連データはカーネルにあります。
独自のカーネルデータ構造を持つ領域などを処理できるカーネルがなければ、単純なアプローチはchroot
役に立ちません。
答え3
systemd-nspawn
chroot
コンテナ化されたchrootを取得する代わりに使用できます。コンテナは、コンテナと比較してホストとゲストシステム間のより良い分離を提供しますchroot
。
systemd-nspawn
軽量ネームスペースコンテナでコマンドまたはオペレーティングシステムを実行するために使用できます。多くの点で似ていますchroot(1)
が、ファイルシステム階層、プロセスツリー、さまざまなIPCサブシステム、ホスト、およびドメイン名を完全に仮想化するという点で、より強力です。