ホスト名を変更して終了します。

ホスト名を変更して終了します。

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-nspawnchrootコンテナ化されたchrootを取得する代わりに使用できます。コンテナは、コンテナと比較してホストとゲストシステム間のより良い分離を提供しますchroot

systemd-nspawn軽量ネームスペースコンテナでコマンドまたはオペレーティングシステムを実行するために使用できます。多くの点で似ていますchroot(1)が、ファイルシステム階層、プロセスツリー、さまざまなIPCサブシステム、ホスト、およびドメイン名を完全に仮想化するという点で、より強力です。

関連情報