GNU/Linux >> Linux の 問題 >  >> Linux

Chrootで実行していることを確認するにはどうすればよいですか?

chrootとスタンドアロンシステムの両方として使用できるはずのUNIXインストールがあります。 chrootとして実行している場合、サービス(cron、inetdなど)はホストシステムと競合したり冗長になったりするため、実行したくありません。

chrootで実行されているかどうかによって動作が異なるシェルスクリプトを作成するにはどうすればよいですか?私が当面必要としているのは、/procを備えた最新のLinuxシステムです。 chrootにマウントされ、スクリプトはrootとして実行されますが、より移植性の高い回答も歓迎します。 (/procのないLinuxの場合、/ procがマウントされていない場合にchrootで実行していることを確認するにはどうすればよいですか?を参照してください。 。)

より一般的には、他の封じ込め方法で機能する提案は興味深いでしょう。実際の問題は、このシステムが何らかのサービスを実行していると想定されているかどうかです。 (答えはchrootでは「いいえ」であり、本格的な仮想マシンでは「はい」です。刑務所やコンテナなどの中間的なケースについてはわかりません。)

承認された回答:

ここで行ったことは、initのルートかどうかをテストすることです。 プロセス(PID 1)は、現在のプロセスのルートと同じです。 /proc/1/root 常に/へのリンクです (initを除く それ自体はchrootされていますが、それは私が気にかけているケースではありません)、それに従うと「マスター」ルートディレクトリにつながります。この手法は、Debianのいくつかのメンテナンススクリプトで使用されます。たとえば、chrootにインストールした後にudevの起動をスキップします。

if [ "$(stat -c %d:%i /)" != "$(stat -c %d:%i /proc/1/root/.)" ]; then
  echo "We are chrooted!"
else
  echo "Business as usual"
fi

(ちなみに、これはchrootの理由のさらに別の例です chrootされたプロセスにrootアクセスがある場合、セキュリティには役に立ちません。ルート以外のプロセスは/proc/1/rootを読み取ることができません 、ただし、/proc/1234/rootに従うことができます 同じユーザーとして実行されているPID1234のプロセスが実行されている場合。)

ルート権限がない場合は、/proc/1/mountinfoを確認できます。 および/proc/$$/mountinfofilesystems/proc.txtに簡単に記載されています Linuxカーネルのドキュメント)。このファイルは誰でも読み取り可能であり、ファイルシステムのプロセスビューの各マウントポイントに関する多くの情報が含まれています。そのファイル内のパスは、リーダープロセスに影響を与えるchrootによって制限されます(存在する場合)。プロセスが/proc/1/mountinfoを読み取っている場合 グローバルルートとは異なるファイルシステムにchrootされ(pid 1のルートがグローバルルートであると想定)、/のエントリはありません /proc/1/mountinfoに表示されます 。プロセスが/proc/1/mountinfoを読み取っている場合 グローバルルートファイルシステム上のディレクトリにchrootされ、次に/のエントリになります。 /proc/1/mountinfoに表示されます 、ただしマウントIDが異なります。ちなみに、ルートフィールド($4 )は、chrootがマスターファイルシステムのどこにあるかを示します。

[ "$(awk '$5=="/" {print $1}' </proc/1/mountinfo)" != "$(awk '$5=="/" {print $1}' </proc/$$/mountinfo)" ]

これは純粋なLinuxソリューションです。十分に類似した/procを持つ他のUnixバリアントに一般化できる可能性があります (Solarisにも同様の/proc/1/rootがあります 、私は思いますが、mountinfoではありません 。

関連:ハードドライブの/ bin / ddで作成された`img`をマウントする方法は?
Linux
  1. Linuxで実行中のプロセスを強制終了する方法

  2. 実行中の画面セッションを一覧表示するには?

  3. grub-mkconfig を (script/noninteractively から) 実行しているときに、別のディスクを grub.cfg のルートに指定するにはどうすればよいですか?

  1. ルートパスワードを変更するにはどうすればよいですか?

  2. RSA キーを使用してパスワードなしの ssh をセットアップする方法

  3. chroot で named(bind) を実行することがセキュリティにとって重要なのはなぜですか?それともそうではないのでしょうか?

  1. Cpの実行の進行状況を確認する方法は?

  2. Linux コンソールと ssh セッションで実行されているかどうかを確認する方法は?

  3. 自分が画面にいるかどうかを確認するにはどうすればよいですか?