
を起動するとfirejail
、ホーム ディレクトリ全体が表示されます。 を起動するとfirejail --whitelist=~/something
、something
ホームのみが表示されます。 ここで、システムへのアクセスをさらに制限したいと思います。 たとえば、追加する--blacklist=/media
と、期待どおりに動作します。
しかし、デフォルトの動作では、ホワイトリストに登録されたファイル以外は非表示である/home/OTHERUSER
とどのように判断されるのでしょうか/home/*
? に一致するルールが見つかりません/etc/firejail/*
。
また、許可されたサブディレクトリは可能ですか? たとえば、--blacklist=/media --whitelist=/media/data
ホワイトリストが などの他のオプションを上書きすると man ページに記述されていても、期待どおりに動作しません--read-only
。
これらのルールはバイナリにハードコードされていますか? そうでない場合、どのルールがこれらのことを実行しますか?
私が欲しいものの例。基本的なルール:
- プロフィールに記載されているもの以外は何もない
- ブラックリスト
/media/data
- シンボリックリンク
~/apps ->/media/data/apps
を読み取り専用で許可します。 /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 コンテナーが本当に正当化されるでしょう。