firejail はデフォルトのブラックリストをどのように構築しますか?

firejail はデフォルトのブラックリストをどのように構築しますか?

を起動するとfirejail、ホーム ディレクトリ全体が表示されます。 を起動するとfirejail --whitelist=~/somethingsomethingホームのみが表示されます。 ここで、システムへのアクセスをさらに制限したいと思います。 たとえば、追加する--blacklist=/mediaと、期待どおりに動作します。

しかし、デフォルトの動作では、ホワイトリストに登録されたファイル以外は非表示である/home/OTHERUSERとどのように判断されるのでしょうか/home/*? に一致するルールが見つかりません/etc/firejail/*

また、許可されたサブディレクトリは可能ですか? たとえば、--blacklist=/media --whitelist=/media/dataホワイトリストが などの他のオプションを上書きすると man ページに記述されていても、期待どおりに動作しません--read-only

これらのルールはバイナリにハードコードされていますか? そうでない場合、どのルールがこれらのことを実行しますか?

私が欲しいものの例。基本的なルール:

  1. プロフィールに記載されているもの以外は何もない
  2. ブラックリスト/media/data
  3. シンボリックリンク~/apps ->/media/data/appsを読み取り専用で許可します。
  4. /media/data/apps(必要な場合)読み取り専用を許可します。

1、2 は機能していますが、3 は 4 でのみ機能します (おそらく問題ありません)。ただし、禁止ディレクトリのサブディレクトリの読み取りアクセスをオーバーライドすることはできません。

mkdir -p foo/bar;chmod 111 foo;ls foo/bar/動作するはずなのに、ファイルシステム層(つまり、foo には読み取り(ディレクトリ一覧)権限がなく、実行可能ビット(サブディレクトリに入る)のみが動作し、 が失敗した場合でも動作するのは、少し直感に反して111いるように思えますls foo/

拡張シナリオでは、ホワイトリスト (プロファイル + /usr、/bin、/lib など) 以外はすべて禁止されます。ルートなしでは不可能と思われるもう 1 つのこと (その場合、アプリ自体はルートとして実行されます) は、/etc/passwd を、jail で知られてはならないユーザーを含まないものに置き換えることです。/etc読み取り可能なデータがかなり多く含まれているため、信頼できないアプリケーションからは隠す必要があります。

しかし、おそらく拡張されたシナリオでは、完全な chroot + userspace-lxc コンテナーが本当に正当化されるでしょう。

関連情報