「Firejail」の版間の差分
細 (→インストール) |
Kusanaginoturugi (トーク | 投稿記録) (校正(でき・出来)) |
||
(4人の利用者による、間の54版が非表示) | |||
1行目: | 1行目: | ||
− | [[Category: |
+ | [[Category:サンドボックス]] |
− | [[Category:セキュリティ]] |
||
[[en:Firejail]] |
[[en:Firejail]] |
||
+ | {{Related articles start}} |
||
− | [https://firejail.wordpress.com/ Firejail] は Linux の名前空間や seccomp-bpf、Linux のケイパビリティを使うことで、信頼のおけないアプリケーションの実行環境を制限することでセキュリティのリスクを減らす、使いやすい SUID サンドボックスプログラムです。単体で使えるだけでなく、[[Grsecurity]] などの他のカーネル防護システムと一緒に使用することでセキュリティをさらに高めることができます。Firejail はブラウザやデスクトップアプリケーション、デーモン/サーバーなどで使うのに適しています。 |
||
+ | {{Related|セキュリティ}} |
||
+ | {{Related|AppArmor}} |
||
+ | {{Related articles end}} |
||
+ | [https://firejail.wordpress.com/ Firejail] は使いやすい SUID サンドボックスプログラムであり、Linux の名前空間や seccomp-bpf、Linux ケイパビリティを使うことで、信頼のおけないアプリケーションの実行環境を制限することにより、セキュリティ侵害のリスクを軽減します。 |
||
== インストール == |
== インストール == |
||
+ | {{pkg|firejail}} または {{aur|firejail-git}} パッケージを[[インストール]]してください。Firejail で使用するためのGUIアプリケーション、{{Pkg|firetools}} も用意されています。 |
||
+ | {{Note|Arch Linux の諸カーネルにおける {{man|7|user_namespaces}} のサポートに関する情報は [[セキュリティ#アプリケーションのサンドボックス化]] を見てください。[https://github.com/netblue30/firejail/issues/1842#issuecomment-376642039 Firejail は user_namespaces を使用できます(たとえ無効化されていたとしても)]。}} |
||
− | {{pkg|firejail}} または {{aur|firejail-git}} パッケージを[[インストール]]してください。使用するのに必要なものが全て入っています。 |
||
+ | |||
+ | {{Warning|アップストリームでは徐々にホワイトリスト制が採用されつつありますが({{ic|/etc/firejail/firefox.profile}} を参照)、提供されているプロファイルの殆どがまだブラックリスト制に強く依存しています。これは、プロファイルによって明示的に禁止されていなければ、アプリケーションにアクセスを許してしまうことを意味します。例えば、btrfs のスナップショットを {{ic|/mnt/btrfs}} に保存しているとします。隔離されたプログラムは {{ic|$HOME/.ssh}} へのアクセスは禁じられているでしょうが、{{ic|/mnt/btrfs/@some-snapshot/$HOME/.ssh}} へはアクセスできてしまいます。使用するプロファイルを検査するようにしてください。[[#プロファイルのテスト]]を参照。}} |
||
==設定== |
==設定== |
||
+ | ほとんどのユーザはカスタムの設定をする必要はないでしょう。その場合、[[#使用方法]] に進むことができます。 |
||
− | Firejail は実行するアプリケーションごとにプロファイルを使います。デフォルトのプロファイルは {{ic|/etc/firejail/''application''.profile}} にあります。デフォルトのプロファイルを修正したり、デフォルトに含まれていないアプリケーションのカスタムプロファイルを作成する場合、{{ic|~/.config/firejail}} に新しいルールやデフォルトのコピーを配置することができます。 |
||
+ | Firejail は、サンドボックス内で実行されるアプリケーションのそれぞれに対してセキュリティ保護を設定するプロファイルを使用します。デフォルトのプロファイルは {{ic|/etc/firejail/''application''.profile}} で見ることができます。含まれていないアプリケーションに対するカスタムのプロファイルが必要な場合や、デフォルトのプロファイルを変更したい場合、新しいルールや、デフォルトのプロファイルのコピーを {{ic|~/.config/firejail/}} ディレクトリ内に置くことができます。1つのアプリケーションに対して複数のカスタムのプロファイルを設定することもでき、複数のアプリケーションの間で同一のプロファイルを共有させることもできます。 |
||
− | ===空白が含まれるパス=== |
||
+ | Firejail に特定のアプリケーションのプロファイルが存在しない場合、システム全体の制限付きデフォルトプロファイルを使用します。これにより、カスタムのプロファイルや制限を緩めたプロファイルを先に作成しないと、アプリケーションが期待通りに動作しない可能性があります。 |
||
− | カスタムプロファイルを使ってディレクトリを参照したりホワイトリスト・ブラックリストに入れる場合、以下のように絶対パスを使ってください (例: {{aur|palemoon}}): {{ic|/home/user/.moonchild productions}}。 |
||
+ | |||
+ | {{man|5|firejail-profile}} を参照してください。 |
||
==使用方法== |
==使用方法== |
||
− | + | そのアプリケーションに対する firejail のデフォルトの保護(デフォルトのプロファイル)を使用してアプリケーションを実行するには、以下を実行します: |
|
+ | |||
+ | $ firejail ''program_name'' |
||
+ | |||
+ | デフォルトプロファイルへの1回限りの追加は、コマンドラインオプションとして追加できます({{man|1|firejail}} を参照)。たとえば、seccomp 保護を使用して okular を実行するには、次のコマンドを実行します: |
||
+ | |||
+ | $ firejail --seccomp okular |
||
+ | |||
+ | 1つのプログラムにデフォルト以外の複数のプロファイルを定義できます。プロファイルファイルを作成したら、次のコマンドを実行して使用できます: |
||
+ | |||
+ | $ firejail --profile=''/absolute/path/to/profile program_name'' |
||
+ | |||
+ | === デフォルトで Firejail を使う === |
||
+ | |||
+ | Firejail のプロファイルを持つすべてのアプリケーションに対して Firejail を使用するようにするには、[https://github.com/netblue30/firejail/wiki/Frequently-Asked-Questions#a-program-isnt-firejailed firecfg ツールを sudo で実行してください]: |
||
+ | |||
+ | $ sudo firecfg |
||
+ | |||
+ | このツールは、Firejail がデフォルトのプロファイルや自己作成したプロファイルを持つすべてのアプリケーションに対して、{{ic|/usr/bin/firejail}} を指すシンボリックリンクを {{ic|/usr/local/bin}} 内に作成します。{{man|1|firecfg}} は {{ic|/etc/firejail/firecfg.config}} にリストされているプログラムに対してしかシンボリックリンクを作成しないことに注意してください。特定の CLI プログラムはそのリストに存在しません:例えば ''tar''、''curl''、''git''。これらは手動でシンボリックリンクを作成する必要があります。これらのプログラムがリストに載っていない理由は [https://github.com/netblue30/firejail/issues/2507 Profiles not in firecfg #2507] を見てください。''firecfg'' はさらに、現在のユーザを Firejail のユーザアクセスデータベースに追加し、{{ic|/usr/share/applications/*.desktop}} ファイルをチェックします。そのファイルに実行ファイルへのフルパスが含まれている場合、フルパスを削除し、そのファイルを {{ic|~/.local/share/applications/}} にコピーします。これにより、{{ic|/usr/local/bin}} 内のシンボリックリンクが使用されることが保証され、Firejail がバイパスされるのを防止します。もし、。[[sudo]] がシステムにインストールされていない場合、以下のように root として実行する必要があります: |
||
+ | |||
+ | # firecfg |
||
+ | |||
+ | そして、以下を通常ユーザとして実行してください: |
||
+ | |||
+ | $ firecfg --fix |
||
+ | |||
+ | これにより ''.desktop'' ファイルが修正されます。 |
||
+ | |||
+ | 場合によっては、Firejail を明示的に呼び出すようにするために {{ic|~/.local/share/applications/}} にある ''.desktop'' ファイルの {{ic|1=Exec=}} 行を手動で変更する必要があるでしょう。 |
||
+ | |||
+ | {{Tip| [[pacman]] の操作のたびに、{{ic|firecfg}} を自動で実行するには [[pacman フック]] を使用することができます: |
||
+ | {{hc|/etc/pacman.d/hooks/firejail.hook|2= |
||
+ | [Trigger] |
||
+ | Type = Path |
||
+ | Operation = Install |
||
+ | Operation = Upgrade |
||
+ | Operation = Remove |
||
+ | Target = usr/bin/* |
||
+ | Target = usr/local/bin/* |
||
+ | Target = usr/share/applications/*.desktop |
||
+ | |||
+ | [Action] |
||
+ | Description = Configure symlinks in /usr/local/bin based on firecfg.config... |
||
+ | When = PostTransaction |
||
+ | Depends = firejail |
||
+ | Exec = /bin/sh -c 'firecfg >/dev/null 2>&1'}}}} |
||
+ | |||
+ | アプリケーションごとに手動で設定するには以下を実行してください: |
||
+ | |||
+ | # ln -s /usr/bin/firejail /usr/local/bin/''application'' |
||
+ | |||
+ | {{Note|1=<nowiki></nowiki> |
||
+ | * {{ic|PATH}} [[環境変数]]では、{{ic|/usr/local/bin}} を {{ic|/usr/bin}} の前に設定する必要があります。 |
||
+ | * カスタムの Firejail の設定を使用してシンボリックリンクのプログラムを実行するには、[[#使用方法]]で書かれてあるように、単純に ''firejail'' を前につけて実行してください。 |
||
+ | * デーモンに対しては、[[systemd]] のユニットファイルを上書きして、デーモンが Firejail を呼び出すようにする必要があります。[[systemd#ユニットファイルの編集]] を参照してください。 |
||
+ | * {{ic|gzip}} や {{ic|xz}} へのシンボリックリンクは {{ic|makepkg}} の {{ic|libfakeroot.so}} をプリロードする機能と干渉します。[https://bbs.archlinux.org/viewtopic.php?id=230913 BBS#230913] を参照してください。}} |
||
+ | |||
+ | === hardened_malloc を使う === |
||
+ | |||
+ | {{Note|一部のプログラム (例えば PyCharm) は、{{ic|libhardened_malloc.so}} を使用すると正しく動作しなくなります。}} |
||
+ | |||
+ | {{AUR|hardened_malloc}} は glibc の {{ic|malloc()}} アロケータを堅牢化した実装です。もともとは Android 用に記述されましたが、デスクトップ用に拡張されました。glibc にはまだ統合されていませんが、{{ic|LD_PRELOAD}} で選択して使用することができます。hardened_malloc を使用して Firejail 内でアプリケーションを実行する適切な方法は以下のとおりです。永続的に hardened_malloc を使用するには、お望みのアプリケーションに対するエントリを /usr/local/bin 内に作成する必要があります。 |
||
+ | |||
+ | $ firejail --env=LD_PRELOAD='/usr/lib/libhardened_malloc.so' /usr/bin/firefox |
||
+ | |||
+ | または、以下をカスタムプロファイルに追加してください: |
||
+ | |||
+ | env LD_PRELOAD=/usr/lib/libhardened_malloc.so |
||
+ | |||
+ | hardened_malloc を調整するのに使える様々な環境変数や設定は [https://github.com/GrapheneOS/hardened_malloc github のページ]で見られます |
||
+ | |||
+ | === AppArmor のサポートを有効化する === |
||
+ | |||
+ | 0.9.60-1 以降、 Firejail は一般的な AppArmor プロファイルを通じて AppArmor との直接的な統合をサポートしてきました。インストール中に、プロファイル {{ic|firejail-default}} は、{{ic|/etc/apparmor.d}} ディレクトリに配置され、root として次のコマンドを実行してカーネルにロードする必要があります: |
||
+ | |||
+ | # apparmor_parser -r /etc/apparmor.d/firejail-default |
||
+ | |||
+ | {{man|1|firejail|APPARMOR}} を参照してください。 |
||
+ | |||
+ | apparmor プロファイルのローカルカスタマイズは、{{ic|/etc/apparmor.d/local/firejail-local}} ファイルを編集することでサポートされます。 |
||
+ | |||
+ | AppArmor はすでに [https://github.com/netblue30/firejail#profile-statistics 多くの] Firejail プロファイルで有効化されています。[[AppArmor]] による制限を Firejail のセキュリティプロファイル上で有効化する方法はいくつかあります: |
||
+ | |||
+ | * {{ic|--apparmor}} フラグをコマンドラインを通じて Firejail に渡す。例: {{ic|$ firejail --apparmor firefox}} |
||
+ | * カスタムプロファイルを使用し、{{ic|apparmor}} コマンドを追加する。 |
||
+ | * {{ic|/etc/firejail/globals.local}} で AppArmor をグローバルに有効化し、必要に応じて {{ic|/etc/firejail/''ProgramName''.local}} 内で {{ic|ignore apparmor}} を使用して無効化する。 |
||
+ | |||
+ | 上記の方法で AppArmor を有効化すると'''必ず''' {{ic|/etc/apparmor.d/firejail-default}} が使用されることに注意してください。あるアプリケーションに対しては''特定''の AppArmor プロファイルを使いたい場合は、上記の {{ic|ignore apparmor}} コマンドを使用する必要があります。しかし、Firejail と AppArmor を同一のアプリケーションに対して使用するとしばしば問題が引き起こされるので、これは[https://github.com/netblue30/firejail/wiki/Frequently-Asked-Questions#how-does-it-compare-with-apparmor 推奨されません]。 |
||
+ | |||
+ | === Firejail が使用中かを確認する === |
||
+ | |||
+ | $ firejail --list |
||
+ | |||
+ | より総合的な出力を得るには: |
||
+ | |||
+ | $ firejail --tree |
||
+ | |||
+ | == カスタムのプロファイルを作成する == |
||
+ | |||
+ | === ホワイトリストとブラックリスト === |
||
+ | |||
+ | '''blacklist''' は、ほとんどのプロファイルでインクルードされている様々な {{ic|/etc/firejail/*.inc}} ファイルで頻繁に使用されています。blacklist は寛容的です: |
||
+ | |||
+ | * あるディレクトリやファイルへのアクセスを拒否し、その他は許可する: {{ic|blacklist <directory/file>}} |
||
+ | * すでにブラックリストに載っているディレクトリやファイルのブラックリスト化を無効化/取り消し/無視する。例: ''*.inc'' ファイルで {{ic|noblacklist <directory/file>}} |
||
+ | |||
+ | blacklist がプロファイルの中に現れる順番は重要です: ''noblacklist'' ディレクティブは ''blacklist'' ディレクティブより'''上'''に追加しなければなりません。 |
||
+ | |||
+ | '''whitelist''' は''明示的に''ホワイトリスト化されているもの以外をすべてブロックします。ランダムな場所へのアクセスを必要とするアプリケーションのプロファイル内では使用すべきではありません(例: テキストエディタ、画像ビューア/エディタ)。 |
||
+ | |||
+ | * あるディレクトリやファイルへのアクセスを許可し、その他を禁止する: {{ic|whitelist <directory/file>}} |
||
+ | * すでにホワイトリストに載っているディレクトリやファイルのホワイトリスト化を無効化/取り消し/無視する。例: ''*.inc'' ファイルで {{ic|nowhitelist <directory/file>}} |
||
+ | |||
+ | whitelist がプロファイルの中に現れる順番は重要です: ''nowhitelist'' ディレクティブは ''whitelist'' ディレクティブより'''上'''に追加しなければなりません。 |
||
+ | |||
+ | ホワイトリスト化は常にブラックリスト化よりも前に行われます。言及したように、''whitelist'' ディレクティブは対象以外すべてをブラックリスト化します。ゆえに、''whitelist'' ディレクティブが存在しない場合や、ある ''whitelist'' ディレクティブが緩すぎる場合、''blacklist'' ディレクティブはフォールバックとなります。 |
||
+ | |||
+ | ''(no)blacklist'' と ''(no)whitelist'' ディレクティブはしばしば組み合わせて使用されます。例: {{ic|/etc/firejail/disable-programs.inc}} (すべてのプロファイルでインクルードされます)は以下のディレクトリを含んでいます: |
||
+ | |||
+ | blacklist ${HOME}/.mozilla |
||
+ | |||
+ | これにより、Firejail でサンドボックス化されているすべてのアプリケーションでそのディレクトリへのアクセスはブロックされます。{{ic|/etc/firejail/firefox.profile}} はこのディレクティブを無効化しなければならず、'''かつ''' ''whitelist'' ディレクティブを追加してそのディレクトリへのアクセスを許可しなければなりません(Firefox プロファイルはホワイトリストプロファイルであるため): |
||
+ | |||
+ | {{bc| |
||
+ | noblacklist ${HOME}/.mozilla |
||
+ | whitelist ${HOME}/.mozilla |
||
+ | }} |
||
+ | |||
+ | === プロファイルの記述法 === |
||
+ | |||
+ | 基本的な手順は以下の通りです: |
||
+ | |||
+ | # {{ic|/usr/share/doc/firejail/profile.template}} を {{ic|/etc/firejail/}} か {{ic|~/.config/firejail/}} へコピーし、ファイル名を {{ic|''ProfileName''.profile}} と変更してください。''ProfileName'' はサンドボックス化する実行ファイルの名前と同じである必要があります。 |
||
+ | # {{ic|include PROFILE.local}} の行を {{ic|include ProfileName.local}} に変更してください。 |
||
+ | # 対象のアプリケーションがサンドボックス内で実行できることを確かめながら、徐々に様々なオプションをコメントアウト/アンコメントしてください。テンプレート内のセクションの順番は変更しないでください。 |
||
+ | # Firejail のプロファイルで利用可能なオプションの詳細な説明は {{man|5|firejail-profile}} man ページで見ることができます。 |
||
+ | # プロファイルにセキュリティホールがないかテストするには [[#プロファイルのテスト]] を見てください。 |
||
+ | |||
+ | ホワイトリストプロファイルを作成したい場合(例: ''whitelist'' ディレクティブを含むプロファイル)、以下のコマンドを実行することで、許可される場所の[https://firejail.wordpress.com/documentation-2/building-custom-profiles/#whitelisted ホワイトリストを作成]することができます。 |
||
+ | |||
+ | $ firejail --build ''application'' |
||
+ | |||
+ | ホワイトリストプロファイルはランダムな場所へのアクセスを必要とするアプリケーション(テキストエディタやファイルマネージャなど)においては問題が発生することを留意しておいてください。 |
||
+ | |||
+ | {{Note|<nowiki></nowiki> |
||
+ | * 考え方としては、利便性を保ちつつ、可能な限り制限することです。この考え方では、潜在的に危険な機能を犠牲にしたり、大雑把なやり方を変える必要があるかもしれません。 |
||
+ | * デフォルトでは、seccomp のフィルタはブラックリストを使用して動作します({{ic|/usr/share/doc/firejail/syscalls.txt}} で見ることができます)。{{ic|seccomp.keep}} を使ってアプリケーション用のフィルタのカスタムホワイトリストを作成することができます[https://firejail.wordpress.com/documentation-2/seccomp-guide/]。これらの手順を自動化する便利な方法は {{ic|/usr/lib/firejail/syscalls.sh}} を実行することです。システムコールが存在しないことでアプリケーションがまだ動作しない場合、{{ic|/usr/share/doc/firejail/syscalls.txt}} の下にある指示に従う必要があります。 |
||
+ | }} |
||
+ | |||
+ | ==== ローカルのカスタムプロファイルを永続化する ==== |
||
+ | |||
+ | プロファイルの標準的なレイアウトには {{ic|.local}} ファイルをインクルードすることにより永続的なローカルのカスタマイズを行う機能が含まれています[https://github.com/netblue30/firejail/wiki/Creating-overrides]。基本的に、公式にサポートされているプロファイルには {{ic|include ProgramName.local}} と {{ic|include globals.local}} という行が含まれています。これらの ''*.local'' ファイルは {{ic|/etc/firejail}} か {{ic|~/.config/firejail}} 下に配置されているかもしれません。優先順位はどのファイルが先に読まれるかによって決定されるので、これはローカルのカスタマイズを作成する非常に強力な方法になります。例えば、[https://github.com/netblue30/firejail/issues/1510#issuecomment-326443650 この firejail の質問]では、グローバルに Apparmor を有効化してインターネットの接続を無効化するには、{{ic|/etc/firejail/globals.local}} を作成/編集して以下の行を含めるだけです: |
||
+ | |||
+ | # enable Apparmor and disable Internet globally |
||
+ | net none |
||
+ | apparmor |
||
+ | |||
+ | そして、例えば "curl" はインターネットに接続できるようにしつつ、Apparmor の制限を維持するには、{{ic|/etc/firejail/curl.local}} を作成/編集して以下の行を含めます: |
||
+ | |||
+ | # enable internet for curl |
||
+ | ignore net |
||
+ | |||
+ | {{ic|curl.local}} が {{ic|globals.local}} より前に読み込まれるため、{{ic|ignore net}} は {{ic|net none}} をオーバーライドします。そして、また、上記の変更は将来のアップデートでも維持されます。 |
||
+ | |||
+ | === プロファイルのテスト === |
||
+ | |||
+ | Firejail のプロファイルをテスト・監査する際には以下が役に立つかもしれません: |
||
+ | |||
+ | # {{ic|firejail --debug $Program > $PathToOutputFile}} はサンドボックスの詳細な分析を行います。 |
||
+ | # {{ic|firejail --debug-blacklists $Program}} と {{ic|firejail --debug-whitelists $Program}} は現在のプロファイルでブラックリスト化/ホワイトリスト化されているディレクトリおよびファイルを表示します。 |
||
+ | # {{ic|firejail --debug-caps}} は現在の Firejail ソフトウェアビルドでサポートされているケーパビリティのリストを出力します。これは [https://l3net.wordpress.com/2015/03/16/firejail-linux-capabilities-guide/ caps whitelist] を作成する際に便利です。 |
||
+ | # {{ic|firejail --help}} は {{ic|--debug}} のオプションの完全なリストを出力します。 |
||
+ | # {{ic|firemon PID}} は実行中のプロセスを監視します。詳細は {{ic|firemon --help}} を見てください。 |
||
+ | # {{ic|sudo jailcheck}} を実行するとサンドボックスの実行テストが行われます。詳細は {{man|1|jailcheck}} の man ページを見てください。 |
||
+ | # どの標準セキュリティ機能が使用されているかを確かめる際には {{Pkg|checksec}} も便利です。 |
||
+ | |||
+ | == Xorg と合わせて Firejail を使う == |
||
+ | |||
+ | {{Accuracy|X11 をサンドボックス化するのになぜ DNS が必要なのか?}} |
||
+ | |||
+ | [[Xorg]] 上では、如何なるプログラムもすべてのキーボード入力をリッスンでき、すべてのスクリーンを録画できます。この挙動は特にブラウザのような、潜在的に悪意のある入力を扱う複雑なプログラムにおいて問題となります。X11 をサンドボックス化する目的はこの挙動を制限することです。 |
||
+ | |||
+ | [[Xephyr]] と [[Xpra]] を使えば [[Xorg]] をサンドボックス化できます。Xpra はクリップボードを完全にサポートしますが、ネストされた X11 セッションでは非常に顕著で恒久的なラグが発生するため、Xephyr を使用することが推奨されています。 |
||
+ | |||
+ | (理想的ではない)クリップボードサポート付き(クリップボードは常に共有されます)の完全なセットアップ方法については [[Gentoo:User:Sakaki/Sakaki's EFI Install Guide/Sandboxing the Firefox Browser with Firejail#Graphical Isolation via Xephyr|Sakaki's Gentoo guide]] を見てください。特に[[Gentoo:User:Sakaki/Sakaki's EFI Install Guide/Sandboxing the Firefox Browser with Firejail#Setting Up Clipboard Sharing and Display Rescaling for Xephyr|クリップボードと自動再スケーリングに関するセクション]]を見てください。 |
||
+ | |||
+ | または、クリップボードのサポートは必要ないがウインドウの管理が必要な場合、[[Openbox]] などのスタンドアローンな[[ウィンドウマネージャ]]をインストールしてください。 |
||
+ | |||
+ | {{ic|xephyr-screen ''Width''x''Height''}} は {{ic|/etc/firejail/firejail.config}} 内で設定できます。{{ic|''Width''}} と {{ic|''Height''}} はピクセル単位で、スクリーンの解像度を元に設定します。 |
||
+ | |||
+ | サンドボックスを開くには: |
||
+ | |||
+ | $ firejail --x11 --net=''device'' openbox |
||
+ | |||
+ | {{ic|''device''}} はアクティブな[[ネットワークインターフェイス]]であり、DNS が機能するために必要です。その後、右クリックして、実行するアプリケーションを選んでください。 |
||
+ | |||
+ | {{Note|[[Unbound]] や [[dnsmasq]]、[[Pdnsd]]、あるいは 127.0.0.1 上で他のローカルのリゾルバを使用する場合、DNS が自動的に動作するはずなので {{ic|1=--net=''device''}} をコマンドから除いてください。}} |
||
+ | |||
+ | 似たようなガイドは [https://firejail.wordpress.com/documentation-2/x11-guide/#configurexephyr Firejail Wordpress サイト]を見てください。 |
||
+ | |||
+ | そのガイドによると: |
||
+ | |||
+ | :サンドボックスは標準的な X11 サーバを Xpra または Xephyr サーバで置き換えます。これにより、X11 キーボードロガーやスクリーンショットユーティリティがメインの X11 サーバにアクセスできなくなります。 |
||
+ | |||
+ | 以下の文章は不正確であることに注意してください: |
||
+ | |||
+ | :抽象化ソケット {{ic|@/tmp/.X11-unix/X0}} を無効化する唯一の方法はネットワーク名前空間を使用することです。何らかの理由によりネットワーク名前空間を使用できない場合、抽象化ソケットはまだサンドボックスの内部から見えます。ハッカーはキーロガーやスクリーンショットプログラムをこのソケットにアタッチできます。 |
||
+ | |||
+ | [[Xinit#xserverrc|xserverrc]] は {{ic|-nolisten local}} のように編集できます。これにより、X11 の抽象化ソケットを無効化でき、X11 を隔離できます。 |
||
+ | |||
+ | === ブラウザをサンドボックス化する === |
||
+ | |||
+ | [[Openbox]] は起動時に特定のブラウザを起動するように設定できます。{{ic|''program''.profile}} は {{ic|/etc/firejail}} に含まれている個別のプロファイルで、{{ic|--startup "''command''"}} はプログラムを起動する際に用いるコマンドラインです。例えば、Chromium をサンドボックス内で起動する場合: |
||
+ | |||
+ | $ firejail --x11 --profile=/etc/firejail/chromium.profile openbox --startup "chromium" |
||
+ | |||
+ | == ヒントとテクニック == |
||
+ | |||
+ | === Firejail をより堅牢にする === |
||
+ | |||
+ | Firejail が SUID 実行ファイルであることのセキュリティリスクは以下の行を {{ic|/etc/firejail/firejail.config}} に追加することで緩和できます: |
||
+ | |||
+ | force-nonewprivs yes |
||
+ | |||
+ | しかし、これは特定のアプリケーションの機能を破壊する可能性があります。Arch Linux 上では、VirtualBox が起動できなくなります。{{Pkg|linux-hardened}} カーネルでは、Wireshark や Chromium ベースのブラウザも影響を受けます。 |
||
+ | |||
+ | 特別な firejail のグループを作成してユーザをそのグループに追加したり、firejail 実行ファイルのファイルのモードを変更することでさらなる堅牢化をはかることができます。詳細は[https://firejail.wordpress.com/documentation-2/basic-usage/#suid このページ]を見てください。 |
||
+ | |||
+ | === スペースを含むパス === |
||
+ | |||
+ | {{aur|palemoon}} を使うようなカスタムプロファイル内でとあるディレクトリを参照/ホワイトリスト化/ブラックリスト化する必要がある場合、カプセル化やエスケープなしの絶対パスを用いなければなりません: |
||
+ | |||
+ | /home/user/.moonchild productions |
||
+ | |||
+ | === プライベートモード === |
||
+ | |||
+ | Firejail は一回限りのプライベートモードも含んでいます。このモードでは、ホームディレクトリへの chroot でマウントが行われません。こうすれば、ディスクへの変更を伴わずにアプリケーションを実行できます。例えば、okular をプライベートモードで実行する場合、以下のようにしてください: |
||
+ | |||
+ | $ firejail --seccomp --private okular |
||
+ | |||
+ | === 実験的な改良されたツール === |
||
+ | |||
+ | 一部の Firejail 開発者はパッケージに同梱されているツールの問題を認識し、彼ら独自の改良されたバージョンを作成しました。 |
||
+ | |||
+ | {{Warning|いくつかのプロジェクトの説明にあるように、これらのツールは実験的であるかもしれません。}} |
||
+ | |||
+ | * [https://github.com/rusty-snake/firecfg.py firecfg.py]: {{ic|firecfg}} の改良バージョン。 |
||
+ | * [https://github.com/rusty-snake/fjp fjp]: Firejail のプロファイルと対話するツール。 |
||
+ | * [https://github.com/glitsj16/firejail-handler-http firejail-handler-http]: アプリケーションをサンドボックス化しているときに HTTP(S) のリンクを適切に開くことを補助します。 |
||
+ | * [https://github.com/glitsj16/firejail-handler-extra firejail-handler-extra]: 上のものに似ていますが、他のプロトコルも処理します。 |
||
+ | |||
+ | == トラブルシューティング == |
||
+ | |||
+ | Firejail をデバッグするのは困難になる可能性があります。設定ミスや適切でないセットアップによる症状は、ランダムなセグメンテーションフォールトやアプリケーションのハングアップから単純なエラーメッセージまで多岐にわたります。 |
||
+ | |||
+ | 一部のアプリケーションは他のものよりもサンドボックス化が困難です。例えば、[[アプリケーション一覧#ウェブブラウザ|Web ブラウザ]]や [[Electron]] アプリケーションは、トラブルになる要因が多いため、他のアプリケーションよりもトラブルシューティングを必要とする傾向にあります。デバッグは非常に多くの時間を要する可能性があるので、[https://github.com/netblue30/firejail/wiki/Frequently-Asked-Questions FAQ] や [https://github.com/netblue30/firejail/issues open issues] をチェックすることは欠かせません。 |
||
+ | |||
+ | {{Tip|[https://github.com/netblue30/firejail/wiki アップストリームの wiki] も参照してください。特に [https://github.com/netblue30/firejail/wiki/Debugging-Firejail debugging Firejail] のページです。}} |
||
+ | |||
+ | === Firejail のシンボリックリンクを削除する === |
||
+ | |||
+ | Firejail が作成したシンボリックリンクを削除するには(例えば、デフォルトに戻す場合): |
||
+ | |||
+ | # firecfg --clean |
||
+ | |||
+ | 特定のアプリケーションに対しては Firejail を使いたくない場合(例えば、Firejail よりも AppArmor を使って制限を課したい場合)、手動で関連するシンボリックリンクを削除する必要があります: |
||
+ | |||
+ | # rm /usr/local/bin/''application'' |
||
+ | |||
+ | この後に ''firecfg'' を実行すると、削除したシンボリックリンクが再び追加されるので、{{ic|/etc/firejail/firecfg.config}} 内のそれぞれのアプリケーションをコメントアウトする必要があります。 |
||
+ | |||
+ | [[デスクトップエントリ]]の残骸が Firejail によって上書きされていないことを確認してください。 |
||
+ | |||
+ | === PulseAudio === |
||
+ | |||
+ | {{Note|PulseAudio バージョン 9.0 およびそれ以降を使用すればこの問題を修正できるはずです。}} |
||
+ | |||
+ | Firejail が、サンドボックス化されたアプリケーションで [[PulseAudio]] の問題を引き起こす場合[https://github.com/netblue30/firejail/wiki/Frequently-Asked-Questions#pulseaudio-7080-issue]、以下のコマンドを使用できます: |
||
+ | |||
+ | $ firecfg --fix-sound |
||
+ | |||
+ | このコマンドは、{{ic|1=enable-shm = no}} や利用可能な他の回避策を使用するカスタムの {{ic|~/.config/pulse/client.conf}} ファイルを''現在''のユーザに対して作成します。 |
||
+ | |||
+ | === hidepid === |
||
+ | |||
+ | システムで [[hidepid]] [[カーネルパラメータ]]が使用されている場合、Firemon は root としてしか実行できません。これは、とりわけ、Firetool GUI が "Capabilities" や "Protocols"、"Seccomp" の状態を正しく報告しない問題を引き起こします[https://github.com/netblue30/firejail/issues/1564]。 |
||
+ | |||
+ | === プロプライエタリな Nvidia ドライバ === |
||
+ | |||
+ | 一部のユーザは、Firejail と [[NVIDIA]] のプロプライエタリなグラフィックドライバを使用した際に問題が発生することを報告しています(例: [https://github.com/netblue30/firejail/issues/1753]、[https://github.com/netblue30/firejail/issues/879]、[https://github.com/netblue30/firejail/issues/841])。この問題は {{ic|noroot}} Firejail オプションをアプリケーションのプロファイルのファイルで無効化することにより解決可能であることがしばしばあります。 |
||
+ | |||
+ | === --net オプションと Linux カーネル >=4.20.0 === |
||
+ | |||
+ | Linux >= 4.20.0 で Firejail 0.5.96 にはバグが存在します。[https://github.com/netblue30/firejail/issues/2314] と [https://github.com/netblue30/firejail/pull/2327] を見てください。 |
||
+ | |||
+ | 以下はエラーメッセージの例です: |
||
+ | |||
+ | $ firejail --noprofile --net=eth0 ls |
||
+ | Parent pid 8521, child pid 8522 |
||
+ | Error send: arp.c:182 arp_check: Invalid argument |
||
+ | Error: proc 8521 cannot sync with peer: unexpected EOF |
||
+ | Peer 8522 unexpectedly exited with status 1 |
||
+ | |||
+ | === Warning: Cannot confine the application using AppArmor === |
||
+ | 一部のアプリケーションでは (例: [[Firefox]] [https://archived.forum.manjaro.org/t/firejail-apparmor-needs-kernel-patch/97700/3]) Firejail で起動すると以下のような警告を発する場合があります: |
||
− | $ firejail --seccomp firefox |
||
+ | Warning: Cannot confine the application using AppArmor. |
||
− | ====プライベートモード==== |
||
+ | Maybe firejail-default AppArmor profile is not loaded into the kernel. |
||
+ | As root, run "aa-enforce firejail-default" to load it. |
||
+ | この警告で提案されたコマンドを実行すると以下のようなメッセージを目にするかもしれません: |
||
− | Firejail にはワンタイムのプライベートモードも存在します。プライベートモードでは chroot でホームディレクトリのマウントがされません。ディスクに何の痕跡も残さないでアプリケーションを実行することが可能です。例えば、Firefox をプライベートモードで実行するには、以下を実行: |
||
+ | ERROR: Cache read/write disabled: interface file missing. (Kernel needs AppArmor 2.4 compatibility patch.) |
||
− | $ firejail --seccomp --private firefox |
||
+ | これは [[AppArmor]] がカーネルパラメータで有効化されていないことを意味しています。ゆえに、[[AppArmor#インストール]]に従ってセットアップする必要があります。 |
||
− | ===デフォルトで Firejail を使う=== |
||
+ | === /usr/bin/patch: **** Can't open patch file === |
||
− | コンソールや {{ic|.desktop}} ファイルからアプリケーションを起動している場合、それぞれのアプリケーションのランチャーを {{ic|/usr/local/bin}} に作成することができます。例えば、Firefox なら以下のファイルを[[ヘルプ:読み方#追加, 作成, 編集 そして source|作成]]して実行可能権限を付与してください: |
||
+ | これは {{ic|PKGBUILD}} が {{ic|patch}} を {{ic|-i}} 引数で使用していることを意味しています。ゆえに、{{ic|$SRCDEST}} に対するホワイトリストが {{ic|/etc/makepkg.conf}} 内で必要です。 |
||
− | {{hc|/usr/local/bin/firefox| |
||
− | firejail --seccomp /usr/bin/firefox $@}} |
||
+ | {{ic|patch.local}} を作成して {{ic|$SRCDEST}} の値を [[#ローカルのカスタムプロファイルを永続化する|オーバーライド]]してください: |
||
− | ====デスクトップファイル==== |
||
+ | whitelist ''/path/to/makepkg/sources'' |
||
− | 標準のパスを使わないアプリケーションも存在します。そのようなアプリケーションでは {{ic|/usr/share/applications/*.desktop}} の {{ic|.desktop}} ランチャーを {{ic|~/.local/share/applications/}} にコピーして EXEC 行に firejail (や seccomp) を記述すれば firejail を使うことができます。 |
||
+ | {{ic|PKGBUILD}} を {{ic|stdin}} を使用するように変更しても機能します |
||
− | ====デーモン==== |
||
+ | patch -p1 < ../''file.patch'' |
||
− | デーモンの場合、デーモンの systemd ユニットファイルを上書きして firejail を呼び出すようにしてください。[[systemd#ユニットファイルの編集]]を参照。 |
||
+ | === AMDGPU を使用するとグラフィカルなアプリケーションが起動時にハングする === |
||
− | ====ノート==== |
||
+ | {{Remove|This should be fixed since 2021-06 with the release of 0.9.66}} |
||
− | Firejail では上手く動作しないアプリケーションや、特別な設定を必要とするアプリケーションが存在します。特定のアプリケーションで全てのディレクトリが使用できない、ブラックリストに入れられている場合、プロファイルを編集してアプリケーションからアクセスする必要がある非標準のディレクトリを有効化してください。例えば Wine がそれに当てはまります。Wine は大抵の場合 seccomp を使用していると動作しません。 |
||
+ | 一部のグラフィカルなアプリケーション(例: Firefox、mpv)は AMDGPU と Mesa >= 19.3.4 を使用すると起動時にハングします。[https://github.com/netblue30/firejail/issues/3219] を見てください。 |
||
− | 他の設定も存在します。firejail の開発は変更が激しいので詳しくは firejail の man ページを参照してください。 |
||
+ | firejail 0.9.66 以降 [https://github.com/netblue30/firejail/pull/4375 kcmp がデフォルトドロップされなくなったので]、この問題は修正されているはずです。この問題がまだ発生する場合、[https://github.com/netblue30/firejail/issues/new?assignees=&labels=&template=bug_report.md&title= 報告]してください。 |
||
− | ==Firetools== |
||
+ | 回避策として、すべての影響を受けるアプリケーションに対して {{ic|seccomp !kcmp}} を {{ic|etc/firejail}} 下のプロファイルに追加してください。プロファイルにすでに {{ic|seccomp}} 文が存在する場合、コンマで区切ったリストで繋げることができます(例: {{ic|seccomp !chroot,!kcmp}})。 |
||
− | Firejail を使用するための GUI アプリケーションが存在します: {{aur|firetools}}。 |
||
+ | === デーモン化した/バックグラウンドのプロセスがハングする === |
||
− | ==トラブルシューティング== |
||
+ | プロセスをデーモン化できない[https://github.com/netblue30/firejail/issues/3491 既知の問題]が存在します。現在、Firejail を使用せずに、影響を受けるアプリケーションをサンドボックス化する以外に解決法はありません。これは Firejail 内部のバグなので、設定によりこの問題を解決することはできません。幸い、issue で言及されたアプリケーションには通常大きな攻撃領域は存在しないので、これをサンドボックスなしで実行するリスクは比較的低いです。 |
||
− | ===PulseAudio=== |
||
+ | ==参照== |
||
− | Firejail で PulseAudio が上手く動作しないという [https://firejail.wordpress.com/support/known-problems/ 既知の問題] が存在します。一時的に解決する方法: |
||
+ | * [https://github.com/netblue30/firejail Firejail GitHub プロジェクトページ] |
||
+ | * [[bubblewrap]] Firejail の最小限の代用品 |
||
+ | {{TranslationStatus|Firejail|2022-09-09|745153}} |
||
− | {{hc|1=cp /etc/pulse/client.conf ~/.config/pulse/ |
||
− | |2=echo "enable-shm = no" >> ~/.config/pulse/client.conf}} |
2024年7月10日 (水) 20:57時点における最新版
Firejail は使いやすい SUID サンドボックスプログラムであり、Linux の名前空間や seccomp-bpf、Linux ケイパビリティを使うことで、信頼のおけないアプリケーションの実行環境を制限することにより、セキュリティ侵害のリスクを軽減します。
インストール
firejail または firejail-gitAUR パッケージをインストールしてください。Firejail で使用するためのGUIアプリケーション、firetools も用意されています。
設定
ほとんどのユーザはカスタムの設定をする必要はないでしょう。その場合、#使用方法 に進むことができます。
Firejail は、サンドボックス内で実行されるアプリケーションのそれぞれに対してセキュリティ保護を設定するプロファイルを使用します。デフォルトのプロファイルは /etc/firejail/application.profile
で見ることができます。含まれていないアプリケーションに対するカスタムのプロファイルが必要な場合や、デフォルトのプロファイルを変更したい場合、新しいルールや、デフォルトのプロファイルのコピーを ~/.config/firejail/
ディレクトリ内に置くことができます。1つのアプリケーションに対して複数のカスタムのプロファイルを設定することもでき、複数のアプリケーションの間で同一のプロファイルを共有させることもできます。
Firejail に特定のアプリケーションのプロファイルが存在しない場合、システム全体の制限付きデフォルトプロファイルを使用します。これにより、カスタムのプロファイルや制限を緩めたプロファイルを先に作成しないと、アプリケーションが期待通りに動作しない可能性があります。
firejail-profile(5) を参照してください。
使用方法
そのアプリケーションに対する firejail のデフォルトの保護(デフォルトのプロファイル)を使用してアプリケーションを実行するには、以下を実行します:
$ firejail program_name
デフォルトプロファイルへの1回限りの追加は、コマンドラインオプションとして追加できます(firejail(1) を参照)。たとえば、seccomp 保護を使用して okular を実行するには、次のコマンドを実行します:
$ firejail --seccomp okular
1つのプログラムにデフォルト以外の複数のプロファイルを定義できます。プロファイルファイルを作成したら、次のコマンドを実行して使用できます:
$ firejail --profile=/absolute/path/to/profile program_name
デフォルトで Firejail を使う
Firejail のプロファイルを持つすべてのアプリケーションに対して Firejail を使用するようにするには、firecfg ツールを sudo で実行してください:
$ sudo firecfg
このツールは、Firejail がデフォルトのプロファイルや自己作成したプロファイルを持つすべてのアプリケーションに対して、/usr/bin/firejail
を指すシンボリックリンクを /usr/local/bin
内に作成します。firecfg(1) は /etc/firejail/firecfg.config
にリストされているプログラムに対してしかシンボリックリンクを作成しないことに注意してください。特定の CLI プログラムはそのリストに存在しません:例えば tar、curl、git。これらは手動でシンボリックリンクを作成する必要があります。これらのプログラムがリストに載っていない理由は Profiles not in firecfg #2507 を見てください。firecfg はさらに、現在のユーザを Firejail のユーザアクセスデータベースに追加し、/usr/share/applications/*.desktop
ファイルをチェックします。そのファイルに実行ファイルへのフルパスが含まれている場合、フルパスを削除し、そのファイルを ~/.local/share/applications/
にコピーします。これにより、/usr/local/bin
内のシンボリックリンクが使用されることが保証され、Firejail がバイパスされるのを防止します。もし、。sudo がシステムにインストールされていない場合、以下のように root として実行する必要があります:
# firecfg
そして、以下を通常ユーザとして実行してください:
$ firecfg --fix
これにより .desktop ファイルが修正されます。
場合によっては、Firejail を明示的に呼び出すようにするために ~/.local/share/applications/
にある .desktop ファイルの Exec=
行を手動で変更する必要があるでしょう。
アプリケーションごとに手動で設定するには以下を実行してください:
# ln -s /usr/bin/firejail /usr/local/bin/application
hardened_malloc を使う
hardened_mallocAUR は glibc の malloc()
アロケータを堅牢化した実装です。もともとは Android 用に記述されましたが、デスクトップ用に拡張されました。glibc にはまだ統合されていませんが、LD_PRELOAD
で選択して使用することができます。hardened_malloc を使用して Firejail 内でアプリケーションを実行する適切な方法は以下のとおりです。永続的に hardened_malloc を使用するには、お望みのアプリケーションに対するエントリを /usr/local/bin 内に作成する必要があります。
$ firejail --env=LD_PRELOAD='/usr/lib/libhardened_malloc.so' /usr/bin/firefox
または、以下をカスタムプロファイルに追加してください:
env LD_PRELOAD=/usr/lib/libhardened_malloc.so
hardened_malloc を調整するのに使える様々な環境変数や設定は github のページで見られます
AppArmor のサポートを有効化する
0.9.60-1 以降、 Firejail は一般的な AppArmor プロファイルを通じて AppArmor との直接的な統合をサポートしてきました。インストール中に、プロファイル firejail-default
は、/etc/apparmor.d
ディレクトリに配置され、root として次のコマンドを実行してカーネルにロードする必要があります:
# apparmor_parser -r /etc/apparmor.d/firejail-default
firejail(1) § APPARMOR を参照してください。
apparmor プロファイルのローカルカスタマイズは、/etc/apparmor.d/local/firejail-local
ファイルを編集することでサポートされます。
AppArmor はすでに 多くの Firejail プロファイルで有効化されています。AppArmor による制限を Firejail のセキュリティプロファイル上で有効化する方法はいくつかあります:
--apparmor
フラグをコマンドラインを通じて Firejail に渡す。例:$ firejail --apparmor firefox
- カスタムプロファイルを使用し、
apparmor
コマンドを追加する。 /etc/firejail/globals.local
で AppArmor をグローバルに有効化し、必要に応じて/etc/firejail/ProgramName.local
内でignore apparmor
を使用して無効化する。
上記の方法で AppArmor を有効化すると必ず /etc/apparmor.d/firejail-default
が使用されることに注意してください。あるアプリケーションに対しては特定の AppArmor プロファイルを使いたい場合は、上記の ignore apparmor
コマンドを使用する必要があります。しかし、Firejail と AppArmor を同一のアプリケーションに対して使用するとしばしば問題が引き起こされるので、これは推奨されません。
Firejail が使用中かを確認する
$ firejail --list
より総合的な出力を得るには:
$ firejail --tree
カスタムのプロファイルを作成する
ホワイトリストとブラックリスト
blacklist は、ほとんどのプロファイルでインクルードされている様々な /etc/firejail/*.inc
ファイルで頻繁に使用されています。blacklist は寛容的です:
- あるディレクトリやファイルへのアクセスを拒否し、その他は許可する:
blacklist <directory/file>
- すでにブラックリストに載っているディレクトリやファイルのブラックリスト化を無効化/取り消し/無視する。例: *.inc ファイルで
noblacklist <directory/file>
blacklist がプロファイルの中に現れる順番は重要です: noblacklist ディレクティブは blacklist ディレクティブより上に追加しなければなりません。
whitelist は明示的にホワイトリスト化されているもの以外をすべてブロックします。ランダムな場所へのアクセスを必要とするアプリケーションのプロファイル内では使用すべきではありません(例: テキストエディタ、画像ビューア/エディタ)。
- あるディレクトリやファイルへのアクセスを許可し、その他を禁止する:
whitelist <directory/file>
- すでにホワイトリストに載っているディレクトリやファイルのホワイトリスト化を無効化/取り消し/無視する。例: *.inc ファイルで
nowhitelist <directory/file>
whitelist がプロファイルの中に現れる順番は重要です: nowhitelist ディレクティブは whitelist ディレクティブより上に追加しなければなりません。
ホワイトリスト化は常にブラックリスト化よりも前に行われます。言及したように、whitelist ディレクティブは対象以外すべてをブラックリスト化します。ゆえに、whitelist ディレクティブが存在しない場合や、ある whitelist ディレクティブが緩すぎる場合、blacklist ディレクティブはフォールバックとなります。
(no)blacklist と (no)whitelist ディレクティブはしばしば組み合わせて使用されます。例: /etc/firejail/disable-programs.inc
(すべてのプロファイルでインクルードされます)は以下のディレクトリを含んでいます:
blacklist ${HOME}/.mozilla
これにより、Firejail でサンドボックス化されているすべてのアプリケーションでそのディレクトリへのアクセスはブロックされます。/etc/firejail/firefox.profile
はこのディレクティブを無効化しなければならず、かつ whitelist ディレクティブを追加してそのディレクトリへのアクセスを許可しなければなりません(Firefox プロファイルはホワイトリストプロファイルであるため):
noblacklist ${HOME}/.mozilla whitelist ${HOME}/.mozilla
プロファイルの記述法
基本的な手順は以下の通りです:
/usr/share/doc/firejail/profile.template
を/etc/firejail/
か~/.config/firejail/
へコピーし、ファイル名をProfileName.profile
と変更してください。ProfileName はサンドボックス化する実行ファイルの名前と同じである必要があります。include PROFILE.local
の行をinclude ProfileName.local
に変更してください。- 対象のアプリケーションがサンドボックス内で実行できることを確かめながら、徐々に様々なオプションをコメントアウト/アンコメントしてください。テンプレート内のセクションの順番は変更しないでください。
- Firejail のプロファイルで利用可能なオプションの詳細な説明は firejail-profile(5) man ページで見ることができます。
- プロファイルにセキュリティホールがないかテストするには #プロファイルのテスト を見てください。
ホワイトリストプロファイルを作成したい場合(例: whitelist ディレクティブを含むプロファイル)、以下のコマンドを実行することで、許可される場所のホワイトリストを作成することができます。
$ firejail --build application
ホワイトリストプロファイルはランダムな場所へのアクセスを必要とするアプリケーション(テキストエディタやファイルマネージャなど)においては問題が発生することを留意しておいてください。
ローカルのカスタムプロファイルを永続化する
プロファイルの標準的なレイアウトには .local
ファイルをインクルードすることにより永続的なローカルのカスタマイズを行う機能が含まれています[2]。基本的に、公式にサポートされているプロファイルには include ProgramName.local
と include globals.local
という行が含まれています。これらの *.local ファイルは /etc/firejail
か ~/.config/firejail
下に配置されているかもしれません。優先順位はどのファイルが先に読まれるかによって決定されるので、これはローカルのカスタマイズを作成する非常に強力な方法になります。例えば、この firejail の質問では、グローバルに Apparmor を有効化してインターネットの接続を無効化するには、/etc/firejail/globals.local
を作成/編集して以下の行を含めるだけです:
# enable Apparmor and disable Internet globally net none apparmor
そして、例えば "curl" はインターネットに接続できるようにしつつ、Apparmor の制限を維持するには、/etc/firejail/curl.local
を作成/編集して以下の行を含めます:
# enable internet for curl ignore net
curl.local
が globals.local
より前に読み込まれるため、ignore net
は net none
をオーバーライドします。そして、また、上記の変更は将来のアップデートでも維持されます。
プロファイルのテスト
Firejail のプロファイルをテスト・監査する際には以下が役に立つかもしれません:
firejail --debug $Program > $PathToOutputFile
はサンドボックスの詳細な分析を行います。firejail --debug-blacklists $Program
とfirejail --debug-whitelists $Program
は現在のプロファイルでブラックリスト化/ホワイトリスト化されているディレクトリおよびファイルを表示します。firejail --debug-caps
は現在の Firejail ソフトウェアビルドでサポートされているケーパビリティのリストを出力します。これは caps whitelist を作成する際に便利です。firejail --help
は--debug
のオプションの完全なリストを出力します。firemon PID
は実行中のプロセスを監視します。詳細はfiremon --help
を見てください。sudo jailcheck
を実行するとサンドボックスの実行テストが行われます。詳細は jailcheck(1) の man ページを見てください。- どの標準セキュリティ機能が使用されているかを確かめる際には checksec も便利です。
Xorg と合わせて Firejail を使う
Xorg 上では、如何なるプログラムもすべてのキーボード入力をリッスンでき、すべてのスクリーンを録画できます。この挙動は特にブラウザのような、潜在的に悪意のある入力を扱う複雑なプログラムにおいて問題となります。X11 をサンドボックス化する目的はこの挙動を制限することです。
Xephyr と Xpra を使えば Xorg をサンドボックス化できます。Xpra はクリップボードを完全にサポートしますが、ネストされた X11 セッションでは非常に顕著で恒久的なラグが発生するため、Xephyr を使用することが推奨されています。
(理想的ではない)クリップボードサポート付き(クリップボードは常に共有されます)の完全なセットアップ方法については Sakaki's Gentoo guide を見てください。特にクリップボードと自動再スケーリングに関するセクションを見てください。
または、クリップボードのサポートは必要ないがウインドウの管理が必要な場合、Openbox などのスタンドアローンなウィンドウマネージャをインストールしてください。
xephyr-screen WidthxHeight
は /etc/firejail/firejail.config
内で設定できます。Width
と Height
はピクセル単位で、スクリーンの解像度を元に設定します。
サンドボックスを開くには:
$ firejail --x11 --net=device openbox
device
はアクティブなネットワークインターフェイスであり、DNS が機能するために必要です。その後、右クリックして、実行するアプリケーションを選んでください。
似たようなガイドは Firejail Wordpress サイトを見てください。
そのガイドによると:
- サンドボックスは標準的な X11 サーバを Xpra または Xephyr サーバで置き換えます。これにより、X11 キーボードロガーやスクリーンショットユーティリティがメインの X11 サーバにアクセスできなくなります。
以下の文章は不正確であることに注意してください:
- 抽象化ソケット
@/tmp/.X11-unix/X0
を無効化する唯一の方法はネットワーク名前空間を使用することです。何らかの理由によりネットワーク名前空間を使用できない場合、抽象化ソケットはまだサンドボックスの内部から見えます。ハッカーはキーロガーやスクリーンショットプログラムをこのソケットにアタッチできます。
xserverrc は -nolisten local
のように編集できます。これにより、X11 の抽象化ソケットを無効化でき、X11 を隔離できます。
ブラウザをサンドボックス化する
Openbox は起動時に特定のブラウザを起動するように設定できます。program.profile
は /etc/firejail
に含まれている個別のプロファイルで、--startup "command"
はプログラムを起動する際に用いるコマンドラインです。例えば、Chromium をサンドボックス内で起動する場合:
$ firejail --x11 --profile=/etc/firejail/chromium.profile openbox --startup "chromium"
ヒントとテクニック
Firejail をより堅牢にする
Firejail が SUID 実行ファイルであることのセキュリティリスクは以下の行を /etc/firejail/firejail.config
に追加することで緩和できます:
force-nonewprivs yes
しかし、これは特定のアプリケーションの機能を破壊する可能性があります。Arch Linux 上では、VirtualBox が起動できなくなります。linux-hardened カーネルでは、Wireshark や Chromium ベースのブラウザも影響を受けます。
特別な firejail のグループを作成してユーザをそのグループに追加したり、firejail 実行ファイルのファイルのモードを変更することでさらなる堅牢化をはかることができます。詳細はこのページを見てください。
スペースを含むパス
palemoonAUR を使うようなカスタムプロファイル内でとあるディレクトリを参照/ホワイトリスト化/ブラックリスト化する必要がある場合、カプセル化やエスケープなしの絶対パスを用いなければなりません:
/home/user/.moonchild productions
プライベートモード
Firejail は一回限りのプライベートモードも含んでいます。このモードでは、ホームディレクトリへの chroot でマウントが行われません。こうすれば、ディスクへの変更を伴わずにアプリケーションを実行できます。例えば、okular をプライベートモードで実行する場合、以下のようにしてください:
$ firejail --seccomp --private okular
実験的な改良されたツール
一部の Firejail 開発者はパッケージに同梱されているツールの問題を認識し、彼ら独自の改良されたバージョンを作成しました。
- firecfg.py:
firecfg
の改良バージョン。 - fjp: Firejail のプロファイルと対話するツール。
- firejail-handler-http: アプリケーションをサンドボックス化しているときに HTTP(S) のリンクを適切に開くことを補助します。
- firejail-handler-extra: 上のものに似ていますが、他のプロトコルも処理します。
トラブルシューティング
Firejail をデバッグするのは困難になる可能性があります。設定ミスや適切でないセットアップによる症状は、ランダムなセグメンテーションフォールトやアプリケーションのハングアップから単純なエラーメッセージまで多岐にわたります。
一部のアプリケーションは他のものよりもサンドボックス化が困難です。例えば、Web ブラウザや Electron アプリケーションは、トラブルになる要因が多いため、他のアプリケーションよりもトラブルシューティングを必要とする傾向にあります。デバッグは非常に多くの時間を要する可能性があるので、FAQ や open issues をチェックすることは欠かせません。
Firejail のシンボリックリンクを削除する
Firejail が作成したシンボリックリンクを削除するには(例えば、デフォルトに戻す場合):
# firecfg --clean
特定のアプリケーションに対しては Firejail を使いたくない場合(例えば、Firejail よりも AppArmor を使って制限を課したい場合)、手動で関連するシンボリックリンクを削除する必要があります:
# rm /usr/local/bin/application
この後に firecfg を実行すると、削除したシンボリックリンクが再び追加されるので、/etc/firejail/firecfg.config
内のそれぞれのアプリケーションをコメントアウトする必要があります。
デスクトップエントリの残骸が Firejail によって上書きされていないことを確認してください。
PulseAudio
Firejail が、サンドボックス化されたアプリケーションで PulseAudio の問題を引き起こす場合[3]、以下のコマンドを使用できます:
$ firecfg --fix-sound
このコマンドは、enable-shm = no
や利用可能な他の回避策を使用するカスタムの ~/.config/pulse/client.conf
ファイルを現在のユーザに対して作成します。
hidepid
システムで hidepid カーネルパラメータが使用されている場合、Firemon は root としてしか実行できません。これは、とりわけ、Firetool GUI が "Capabilities" や "Protocols"、"Seccomp" の状態を正しく報告しない問題を引き起こします[4]。
プロプライエタリな Nvidia ドライバ
一部のユーザは、Firejail と NVIDIA のプロプライエタリなグラフィックドライバを使用した際に問題が発生することを報告しています(例: [5]、[6]、[7])。この問題は noroot
Firejail オプションをアプリケーションのプロファイルのファイルで無効化することにより解決可能であることがしばしばあります。
--net オプションと Linux カーネル >=4.20.0
Linux >= 4.20.0 で Firejail 0.5.96 にはバグが存在します。[8] と [9] を見てください。
以下はエラーメッセージの例です:
$ firejail --noprofile --net=eth0 ls Parent pid 8521, child pid 8522 Error send: arp.c:182 arp_check: Invalid argument Error: proc 8521 cannot sync with peer: unexpected EOF Peer 8522 unexpectedly exited with status 1
Warning: Cannot confine the application using AppArmor
一部のアプリケーションでは (例: Firefox [10]) Firejail で起動すると以下のような警告を発する場合があります:
Warning: Cannot confine the application using AppArmor. Maybe firejail-default AppArmor profile is not loaded into the kernel. As root, run "aa-enforce firejail-default" to load it.
この警告で提案されたコマンドを実行すると以下のようなメッセージを目にするかもしれません:
ERROR: Cache read/write disabled: interface file missing. (Kernel needs AppArmor 2.4 compatibility patch.)
これは AppArmor がカーネルパラメータで有効化されていないことを意味しています。ゆえに、AppArmor#インストールに従ってセットアップする必要があります。
/usr/bin/patch: **** Can't open patch file
これは PKGBUILD
が patch
を -i
引数で使用していることを意味しています。ゆえに、$SRCDEST
に対するホワイトリストが /etc/makepkg.conf
内で必要です。
patch.local
を作成して $SRCDEST
の値を オーバーライドしてください:
whitelist /path/to/makepkg/sources
PKGBUILD
を stdin
を使用するように変更しても機能します
patch -p1 < ../file.patch
AMDGPU を使用するとグラフィカルなアプリケーションが起動時にハングする
一部のグラフィカルなアプリケーション(例: Firefox、mpv)は AMDGPU と Mesa >= 19.3.4 を使用すると起動時にハングします。[11] を見てください。
firejail 0.9.66 以降 kcmp がデフォルトドロップされなくなったので、この問題は修正されているはずです。この問題がまだ発生する場合、報告してください。
回避策として、すべての影響を受けるアプリケーションに対して seccomp !kcmp
を etc/firejail
下のプロファイルに追加してください。プロファイルにすでに seccomp
文が存在する場合、コンマで区切ったリストで繋げることができます(例: seccomp !chroot,!kcmp
)。
デーモン化した/バックグラウンドのプロセスがハングする
プロセスをデーモン化できない既知の問題が存在します。現在、Firejail を使用せずに、影響を受けるアプリケーションをサンドボックス化する以外に解決法はありません。これは Firejail 内部のバグなので、設定によりこの問題を解決することはできません。幸い、issue で言及されたアプリケーションには通常大きな攻撃領域は存在しないので、これをサンドボックスなしで実行するリスクは比較的低いです。
参照
- Firejail GitHub プロジェクトページ
- bubblewrap Firejail の最小限の代用品