「Firejail」の版間の差分
(→Tips and tricks: タイトルのみを翻訳) |
Kusanaginoturugi (トーク | 投稿記録) (校正(でき・出来)) |
||
(2人の利用者による、間の28版が非表示) | |||
3行目: | 3行目: | ||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|セキュリティ}} |
{{Related|セキュリティ}} |
||
+ | {{Related|AppArmor}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
[https://firejail.wordpress.com/ Firejail] は使いやすい SUID サンドボックスプログラムであり、Linux の名前空間や seccomp-bpf、Linux ケイパビリティを使うことで、信頼のおけないアプリケーションの実行環境を制限することにより、セキュリティ侵害のリスクを軽減します。 |
[https://firejail.wordpress.com/ Firejail] は使いやすい SUID サンドボックスプログラムであり、Linux の名前空間や seccomp-bpf、Linux ケイパビリティを使うことで、信頼のおけないアプリケーションの実行環境を制限することにより、セキュリティ侵害のリスクを軽減します。 |
||
9行目: | 10行目: | ||
{{pkg|firejail}} または {{aur|firejail-git}} パッケージを[[インストール]]してください。Firejail で使用するためのGUIアプリケーション、{{Pkg|firetools}} も用意されています。 |
{{pkg|firejail}} または {{aur|firejail-git}} パッケージを[[インストール]]してください。Firejail で使用するためのGUIアプリケーション、{{Pkg|firetools}} も用意されています。 |
||
− | {{Note| |
+ | {{Note|Arch Linux の諸カーネルにおける {{man|7|user_namespaces}} のサポートに関する情報は [[セキュリティ#アプリケーションのサンドボックス化]] を見てください。[https://github.com/netblue30/firejail/issues/1842#issuecomment-376642039 Firejail は user_namespaces を使用できます(たとえ無効化されていたとしても)]。}} |
− | {{Warning|While upstream is gradually adopting whitelists, (cf {{ic|/etc/firejail/firefox.profile}},) most of the supplied profiles still rely heavily on blacklists. This means that anything not explicitly forbidden by the profile will be accessible to the application. For example, if you have btrfs snapshots available in {{ic|/mnt/btrfs}}, a jailed program may be forbidden from accessing {{ic|$HOME/.ssh}}, but would still be able to access {{ic|/mnt/btrfs/@some-snapshot/$HOME/.ssh}}. Make sure to audit your profiles, see [[#Testing profiles]]}} |
||
+ | {{Warning|アップストリームでは徐々にホワイトリスト制が採用されつつありますが({{ic|/etc/firejail/firefox.profile}} を参照)、提供されているプロファイルの殆どがまだブラックリスト制に強く依存しています。これは、プロファイルによって明示的に禁止されていなければ、アプリケーションにアクセスを許してしまうことを意味します。例えば、btrfs のスナップショットを {{ic|/mnt/btrfs}} に保存しているとします。隔離されたプログラムは {{ic|$HOME/.ssh}} へのアクセスは禁じられているでしょうが、{{ic|/mnt/btrfs/@some-snapshot/$HOME/.ssh}} へはアクセスできてしまいます。使用するプロファイルを検査するようにしてください。[[#プロファイルのテスト]]を参照。}} |
||
− | === Apparmor 統合 === |
||
− | |||
− | 0.9.60-1 以降、{{Pkg|firejail}} は一般的な apparmor プロファイルを通じて Apparmor との直接的な統合をサポートしてきました。インストール中に、プロファイル {{ic|firejail-default}} は、{{ic|/etc/apparmor.d}} ディレクトリに配置され、root として次のコマンドを実行してカーネルにロードする必要があります: |
||
− | |||
− | # apparmor_parser -r /etc/apparmor.d/firejail-default |
||
− | |||
− | マニュアルを引用します: |
||
− | |||
− | :インストールされたプロファイルは、主な firejail の機能を補足するものであり、特に次の事を行います: |
||
− | :* ptrace を無効にします。ptrace を使用すると、実行中のプログラムを検査してハイジャックすることができます。通常、これはデバッグのみに必要です。 |
||
− | :* {{ic|/run}}, {{ic|/proc}}, {{ic|/sys}} 以下のいくつかのファイルへの書き込みアクセスをホワイトリストにする。 |
||
− | :* プログラムの実行を、{{ic|/bin}}, {{ic|/sbin}}, {{ic|/usr/bin}} などのよく知られたシステムパスからのみ許可する。これらのパスは読み取り専用になります。 |
||
− | :* ユーザのホームディレクトリやユーザが書き込み可能なディレクトリからのプログラムやスクリプトの実行は許可されていません。 |
||
− | :* 非標準のネットワークソケットを使用しないようにしてください。{{ic|unix}}, {{ic|inet}}, {{ic|inet6}}, {{ic|netlink}}, {{ic|raw}} とパケットのみが許可されています。 |
||
− | :* {{ic|.snapshots}} のような既知の機密パスへのアクセスを拒否します。 |
||
− | |||
− | apparmor プロファイルのローカルカスタマイズは、{{ic|/etc/apparmor.d/local/firejail-local}} ファイルを編集することでサポートされます。 |
||
==設定== |
==設定== |
||
+ | ほとんどのユーザはカスタムの設定をする必要はないでしょう。その場合、[[#使用方法]] に進むことができます。 |
||
− | Most users will not require any custom configuration and can proceed to [[#Usage]]. |
||
+ | Firejail は、サンドボックス内で実行されるアプリケーションのそれぞれに対してセキュリティ保護を設定するプロファイルを使用します。デフォルトのプロファイルは {{ic|/etc/firejail/''application''.profile}} で見ることができます。含まれていないアプリケーションに対するカスタムのプロファイルが必要な場合や、デフォルトのプロファイルを変更したい場合、新しいルールや、デフォルトのプロファイルのコピーを {{ic|~/.config/firejail/}} ディレクトリ内に置くことができます。1つのアプリケーションに対して複数のカスタムのプロファイルを設定することもでき、複数のアプリケーションの間で同一のプロファイルを共有させることもできます。 |
||
− | Firejail uses profiles to set the security protections for each of the applications executed inside of it - you can find the default profiles in {{ic|/etc/firejail/''application''.profile}}. Should you require custom profiles for applications not included, or wish to modify the defaults, you may place new rules or copies of the defaults in the {{ic|~/.config/firejail/}} directory. You may have multiple custom profile files for a single application, and you may share the same profile file among several applications. |
||
+ | Firejail に特定のアプリケーションのプロファイルが存在しない場合、システム全体の制限付きデフォルトプロファイルを使用します。これにより、カスタムのプロファイルや制限を緩めたプロファイルを先に作成しないと、アプリケーションが期待通りに動作しない可能性があります。 |
||
− | If firejail does not have a profile for a particular application, it uses its restrictive system-wide default profile. This can result in the application not functioning as desired, without first creating a custom, and less restrictive profile. |
||
− | + | {{man|5|firejail-profile}} を参照してください。 |
|
==使用方法== |
==使用方法== |
||
44行目: | 28行目: | ||
そのアプリケーションに対する firejail のデフォルトの保護(デフォルトのプロファイル)を使用してアプリケーションを実行するには、以下を実行します: |
そのアプリケーションに対する firejail のデフォルトの保護(デフォルトのプロファイル)を使用してアプリケーションを実行するには、以下を実行します: |
||
− | $ firejail |
+ | $ firejail ''program_name'' |
− | デフォルトプロファイルへの1回限りの追加は、コマンドラインオプションとして追加できます( |
+ | デフォルトプロファイルへの1回限りの追加は、コマンドラインオプションとして追加できます({{man|1|firejail}} を参照)。たとえば、seccomp 保護を使用して okular を実行するには、次のコマンドを実行します: |
$ firejail --seccomp okular |
$ firejail --seccomp okular |
||
52行目: | 36行目: | ||
1つのプログラムにデフォルト以外の複数のプロファイルを定義できます。プロファイルファイルを作成したら、次のコマンドを実行して使用できます: |
1つのプログラムにデフォルト以外の複数のプロファイルを定義できます。プロファイルファイルを作成したら、次のコマンドを実行して使用できます: |
||
− | $ firejail --profile=/absolute/path/to/profile |
+ | $ 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 で実行してください]: |
||
− | To use Firejail by default for all applications for which it has profiles, run the ''firecfg'' tool as root. |
||
+ | |||
+ | $ 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 |
||
+ | そして、以下を通常ユーザとして実行してください: |
||
− | This creates symbolic links in {{ic|/usr/local/bin}} pointing to {{ic|/usr/bin/firejail}}, for all programs for which firejail has default profiles. |
||
+ | |||
+ | $ firecfg --fix |
||
+ | |||
+ | これにより ''.desktop'' ファイルが修正されます。 |
||
+ | |||
+ | 場合によっては、Firejail を明示的に呼び出すようにするために {{ic|~/.local/share/applications/}} にある ''.desktop'' ファイルの {{ic|1=Exec=}} 行を手動で変更する必要があるでしょう。 |
||
− | {{Tip| |
+ | {{Tip| [[pacman]] の操作のたびに、{{ic|firecfg}} を自動で実行するには [[pacman フック]] を使用することができます: |
{{hc|/etc/pacman.d/hooks/firejail.hook|2= |
{{hc|/etc/pacman.d/hooks/firejail.hook|2= |
||
[Trigger] |
[Trigger] |
||
77行目: | 71行目: | ||
When = PostTransaction |
When = PostTransaction |
||
Depends = firejail |
Depends = firejail |
||
− | Exec = /bin/sh -c 'firecfg |
+ | Exec = /bin/sh -c 'firecfg >/dev/null 2>&1'}}}} |
+ | アプリケーションごとに手動で設定するには以下を実行してください: |
||
− | To manually map individual applications execute: |
||
− | # ln -s /usr/bin/firejail /usr/local/bin/ |
+ | # ln -s /usr/bin/firejail /usr/local/bin/''application'' |
{{Note|1=<nowiki></nowiki> |
{{Note|1=<nowiki></nowiki> |
||
− | * {{ic| |
+ | * {{ic|PATH}} [[環境変数]]では、{{ic|/usr/local/bin}} を {{ic|/usr/bin}} の前に設定する必要があります。 |
+ | * カスタムの Firejail の設定を使用してシンボリックリンクのプログラムを実行するには、[[#使用方法]]で書かれてあるように、単純に ''firejail'' を前につけて実行してください。 |
||
− | * To run a symbolic program with custom Firejail setting, simple prefix ''firejail'' as seen in [[#Usage]]. |
||
+ | * デーモンに対しては、[[systemd]] のユニットファイルを上書きして、デーモンが Firejail を呼び出すようにする必要があります。[[systemd#ユニットファイルの編集]] を参照してください。 |
||
− | * For a daemon, you will need to overwrite the systemd unit file for that daemon to call firejail, see [[systemd#Editing provided units]]. |
||
+ | * {{ic|gzip}} や {{ic|xz}} へのシンボリックリンクは {{ic|makepkg}} の {{ic|libfakeroot.so}} をプリロードする機能と干渉します。[https://bbs.archlinux.org/viewtopic.php?id=230913 BBS#230913] を参照してください。}} |
||
− | * {{ic|firecfg}} doesn't work with some cli shells such as: {{ic|tar}}, {{ic|curl}}, {{ic|wget}}, and {{ic|git}} which need to be symlinked manually. |
||
− | * Symbolic links to {{ic|gzip}} and {{ic|xz}} interfere with {{ic|makepkg}}'s ability to preload {{ic|libfakeroot.so}}. See [https://bbs.archlinux.org/viewtopic.php?id=230913 BBS#230913].}} |
||
− | |||
− | {{Warning|Upstream provides profiles for {{ic|gpg}} and {{ic|gpg-agent}}. If gpg is symlinked with the supplied profile, pacman will be unable to update {{pkg|archlinux-keyring}}.}} |
||
=== hardened_malloc を使う === |
=== hardened_malloc を使う === |
||
− | {{AUR|hardened_malloc}} is a hardened implementation of glibc's malloc() allocator, originally written for Android but extended for use on the desktop. While not integrated into glibc yet, it can be used selectively with LD_PRELOAD. The proper way to launch an application within firejail using hardened_malloc is demonstrated below. To make it permanent, you'd need to create your own entry in /usr/local/bin for the desired application.'' |
||
+ | {{Note|一部のプログラム (例えば PyCharm) は、{{ic|libhardened_malloc.so}} を使用すると正しく動作しなくなります。}} |
||
− | {{bc|1=firejail --env=LD_PRELOAD='/usr/lib/libhardened_malloc.so' /usr/bin/firefox}} |
||
+ | {{AUR|hardened_malloc}} は glibc の {{ic|malloc()}} アロケータを堅牢化した実装です。もともとは Android 用に記述されましたが、デスクトップ用に拡張されました。glibc にはまだ統合されていませんが、{{ic|LD_PRELOAD}} で選択して使用することができます。hardened_malloc を使用して Firejail 内でアプリケーションを実行する適切な方法は以下のとおりです。永続的に hardened_malloc を使用するには、お望みのアプリケーションに対するエントリを /usr/local/bin 内に作成する必要があります。 |
||
− | The various environment variables and settings that can be used to tune hardened_malloc can be found on it's [https://github.com/GrapheneOS/hardened_malloc github page]. |
||
+ | |||
+ | $ 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 のサポートを有効化する === |
=== AppArmor のサポートを有効化する === |
||
− | There are a number of ways to enable [[AppArmor]] confinement on top of a Firejail security profile: |
||
+ | 0.9.60-1 以降、 Firejail は一般的な AppArmor プロファイルを通じて AppArmor との直接的な統合をサポートしてきました。インストール中に、プロファイル {{ic|firejail-default}} は、{{ic|/etc/apparmor.d}} ディレクトリに配置され、root として次のコマンドを実行してカーネルにロードする必要があります: |
||
− | * Pass the {{ic|--apparmor}} flag to Firejail in the command line, e.g. {{ic|$ firejail --apparmor firefox}} |
||
+ | |||
− | * Use a custom profile. |
||
+ | # apparmor_parser -r /etc/apparmor.d/firejail-default |
||
− | * Enable Apparmor globally in {{ic|/etc/firejail/globals.local}} and disable as needed through the use of {{ic|ignore apparmor}} in {{ic|/etc/firejail/<ProgramName>.local}}. |
||
+ | |||
+ | {{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 が使用中かを確認する === |
||
$ firejail --list |
$ firejail --list |
||
+ | |||
+ | より総合的な出力を得るには: |
||
+ | |||
+ | $ firejail --tree |
||
== カスタムのプロファイルを作成する == |
== カスタムのプロファイルを作成する == |
||
114行目: | 127行目: | ||
=== ホワイトリストとブラックリスト === |
=== ホワイトリストとブラックリスト === |
||
+ | '''blacklist''' は、ほとんどのプロファイルでインクルードされている様々な {{ic|/etc/firejail/*.inc}} ファイルで頻繁に使用されています。blacklist は寛容的です: |
||
− | Blacklists are permissive: |
||
− | * |
+ | * あるディレクトリやファイルへのアクセスを拒否し、その他は許可する: {{ic|blacklist <directory/file>}} |
+ | * すでにブラックリストに載っているディレクトリやファイルのブラックリスト化を無効化/取り消し/無視する。例: ''*.inc'' ファイルで {{ic|noblacklist <directory/file>}} |
||
− | * Permit file or location in any later blacklist: {{ic|noblacklist <location/file>}} |
||
+ | blacklist がプロファイルの中に現れる順番は重要です: ''noblacklist'' ディレクティブは ''blacklist'' ディレクティブより'''上'''に追加しなければなりません。 |
||
− | Whitelists are restrictive: |
||
+ | '''whitelist''' は''明示的に''ホワイトリスト化されているもの以外をすべてブロックします。ランダムな場所へのアクセスを必要とするアプリケーションのプロファイル内では使用すべきではありません(例: テキストエディタ、画像ビューア/エディタ)。 |
||
− | * Forbid everything not explicitly permitted: {{ic|whitelist <location/file>}} |
||
+ | |||
− | * Forbid file or location in any later whitelist: {{ic|nowhitelist <location/file>}} |
||
+ | * あるディレクトリやファイルへのアクセスを許可し、その他を禁止する: {{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 |
||
+ | }} |
||
=== プロファイルの記述法 === |
=== プロファイルの記述法 === |
||
+ | 基本的な手順は以下の通りです: |
||
− | The basic process is: |
||
+ | |||
+ | # {{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 ホワイトリストを作成]することができます。 |
||
− | # Copy the default profile (which uses blacklists) to your work folder and give it a unique name |
||
− | # Change the line {{ic|include /etc/firejail/default.local}} to {{ic|include /etc/firejail/ProfileName.local}} |
||
− | # Gradually comment/uncomment the various options while checking at each stage that the application runs inside the new sandbox |
||
− | # Desirable options not available in the copied default profile can be found by consulting the manual |
||
− | # [https://firejail.wordpress.com/documentation-2/building-custom-profiles/#whitelisted Build a whitelist] of permitted locations. For portability, it may be advisable to place at least some of this list it in a {{ic|.local}} file |
||
− | # Test the profile for security holes, see [[#Testing profiles]] |
||
− | # Once satisfied, copy your new profile to either {{ic|/etc/firejail/}} or {{ic|~/.config/firejail/}} |
||
+ | $ firejail --build ''application'' |
||
− | You may find the following to be useful: |
||
+ | ホワイトリストプロファイルはランダムな場所へのアクセスを必要とするアプリケーション(テキストエディタやファイルマネージャなど)においては問題が発生することを留意しておいてください。 |
||
− | # {{ic|firejail --debug $OtherOptions $PathToProfile $Program > $PathToOutputFile}} Gives a detailed breakdown of the sandbox |
||
− | # {{ic|firejail --debug-caps}} gives a list of caps supported by the current Firejail software build. This is useful when building a [https://l3net.wordpress.com/2015/03/16/firejail-linux-capabilities-guide/ caps whitelist]. |
||
− | # {{ic|firejail --help}} for a full list of {{ic|--debug}} options |
||
− | # {{ic|firemon PID}} monitors the running process. See {{ic|firemon --help}} for details |
||
− | # {{Pkg|checksec}} may also be useful in testing which standard security features are being used |
||
{{Note|<nowiki></nowiki> |
{{Note|<nowiki></nowiki> |
||
+ | * 考え方としては、利便性を保ちつつ、可能な限り制限することです。この考え方では、潜在的に危険な機能を犠牲にしたり、大雑把なやり方を変える必要があるかもしれません。 |
||
− | * The idea is to be as restrictive as possible, while still maintaining usability. This may involve sacrificing potentially dangerous functionality and a change in cavalier work habits. |
||
+ | * デフォルトでは、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}} の下にある指示に従う必要があります。 |
||
− | * By default, seccomp filters work on a blacklist (which can be found in the manual). It is possible to use {{ic|seccomp.keep}} to build a custom whitelist of filters for an application. [https://firejail.wordpress.com/documentation-2/seccomp-guide/]. |
||
− | * The list of possible options for a firejail profile is extensive, and users should consult the firejail-profile(5) man page. |
||
}} |
}} |
||
==== ローカルのカスタムプロファイルを永続化する ==== |
==== ローカルのカスタムプロファイルを永続化する ==== |
||
+ | プロファイルの標準的なレイアウトには {{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}} を作成/編集して以下の行を含めるだけです: |
||
− | The standard profile layout now includes the capability to make persistent local customisations through the inclusion of {{ic|.local}} files. Basically, each officially supported profile contains the lines {{ic|include /etc/firejail/ProgramName.local}} and {{ic|include /etc/firejail/globals.local}}. Since the order of precedence is determined by which is read first, this makes for a very powerful way of making local customisations. |
||
− | For example, with reference [https://github.com/netblue30/firejail/issues/1510#issuecomment-326443650 this firejail question], to globally enable Apparmor and disable Internet connectivity, one could simply create/edit {{ic|/etc/firejail/globals.local}} to include the lines |
||
# enable Apparmor and disable Internet globally |
# enable Apparmor and disable Internet globally |
||
159行目: | 183行目: | ||
apparmor |
apparmor |
||
+ | そして、例えば "curl" はインターネットに接続できるようにしつつ、Apparmor の制限を維持するには、{{ic|/etc/firejail/curl.local}} を作成/編集して以下の行を含めます: |
||
− | Then, to allow, for example, "curl" to connect to the internet, yet still maintain its apparmor confinement, one would create/edit {{ic|/etc/firejail/curl.local}} to include the lines. |
||
# enable internet for curl |
# enable internet for curl |
||
ignore net |
ignore net |
||
− | + | {{ic|curl.local}} が {{ic|globals.local}} より前に読み込まれるため、{{ic|ignore net}} は {{ic|net none}} をオーバーライドします。そして、また、上記の変更は将来のアップデートでも維持されます。 |
|
=== プロファイルのテスト === |
=== プロファイルのテスト === |
||
+ | Firejail のプロファイルをテスト・監査する際には以下が役に立つかもしれません: |
||
− | Firejail's built in audit feature allows the user to find gaps in a security profile by replacing the program to be sandboxed with a test program. By default, firejail uses the {{ic|faudit}} program distributed with Firejail. (Note: A custom test program supplied by the user can also be used.) |
||
− | Examples: |
||
+ | # {{ic|firejail --debug $Program > $PathToOutputFile}} はサンドボックスの詳細な分析を行います。 |
||
− | # Run the default audit program: {{ic|$ firejail --audit transmission-gtk}} |
||
+ | # {{ic|firejail --debug-blacklists $Program}} と {{ic|firejail --debug-whitelists $Program}} は現在のプロファイルでブラックリスト化/ホワイトリスト化されているディレクトリおよびファイルを表示します。 |
||
− | # Run a custom audit program: {{ic|1=$ firejail --audit=~/sandbox-test transmission-gtk}} |
||
+ | # {{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 を使う == |
||
− | In the examples above, the sandbox configures the transmission-gtk profile and starts the test program. The real program, transmission-gtk, will not be started. |
||
+ | {{Accuracy|X11 をサンドボックス化するのになぜ DNS が必要なのか?}} |
||
− | {{Note|The audit feature is not implemented for --x11 commands.}} |
||
+ | [[Xorg]] 上では、如何なるプログラムもすべてのキーボード入力をリッスンでき、すべてのスクリーンを録画できます。この挙動は特にブラウザのような、潜在的に悪意のある入力を扱う複雑なプログラムにおいて問題となります。X11 をサンドボックス化する目的はこの挙動を制限することです。 |
||
− | == Xephyr と合わせて Firejail を使う == |
||
+ | [[Xephyr]] と [[Xpra]] を使えば [[Xorg]] をサンドボックス化できます。Xpra はクリップボードを完全にサポートしますが、ネストされた X11 セッションでは非常に顕著で恒久的なラグが発生するため、Xephyr を使用することが推奨されています。 |
||
− | [[Xephyr]] will allow you to sandbox [[Xorg]]. If you want to be able to resize windows, install a window manager such as [[Openbox]]. |
||
+ | (理想的ではない)クリップボードサポート付き(クリップボードは常に共有されます)の完全なセットアップ方法については [[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|クリップボードと自動再スケーリングに関するセクション]]を見てください。 |
||
− | {{ic|xephyr-screen ''Width''x''Height''}} can be set in {{ic|/etc/firejail/firejail.config}} where {{ic|''Width''}} and {{ic|''Height''}} are in pixels and based on your screen resolution. |
||
+ | または、クリップボードのサポートは必要ないがウインドウの管理が必要な場合、[[Openbox]] などのスタンドアローンな[[ウィンドウマネージャ]]をインストールしてください。 |
||
− | To open the sandbox: |
||
+ | |||
+ | {{ic|xephyr-screen ''Width''x''Height''}} は {{ic|/etc/firejail/firejail.config}} 内で設定できます。{{ic|''Width''}} と {{ic|''Height''}} はピクセル単位で、スクリーンの解像度を元に設定します。 |
||
+ | |||
+ | サンドボックスを開くには: |
||
$ firejail --x11 --net=''device'' openbox |
$ firejail --x11 --net=''device'' openbox |
||
+ | {{ic|''device''}} はアクティブな[[ネットワークインターフェイス]]であり、DNS が機能するために必要です。その後、右クリックして、実行するアプリケーションを選んでください。 |
||
− | {{ic|''device''}} is your active [[network interface]]. Then right click and select your applications to run. |
||
− | {{Note| |
+ | {{Note|[[Unbound]] や [[dnsmasq]]、[[Pdnsd]]、あるいは 127.0.0.1 上で他のローカルのリゾルバを使用する場合、DNS が自動的に動作するはずなので {{ic|1=--net=''device''}} をコマンドから除いてください。}} |
− | + | 似たようなガイドは [https://firejail.wordpress.com/documentation-2/x11-guide/#configurexephyr Firejail Wordpress サイト]を見てください。 |
|
+ | そのガイドによると: |
||
− | According to the guide: |
||
+ | :サンドボックスは標準的な X11 サーバを Xpra または Xephyr サーバで置き換えます。これにより、X11 キーボードロガーやスクリーンショットユーティリティがメインの X11 サーバにアクセスできなくなります。 |
||
− | :The sandbox replaces the regular X11 server with Xpra or Xephyr server. This prevents X11 keyboard loggers and screenshot utilities from accessing the main X11 server. |
||
+ | 以下の文章は不正確であることに注意してください: |
||
− | Note that the statement: |
||
+ | :抽象化ソケット {{ic|@/tmp/.X11-unix/X0}} を無効化する唯一の方法はネットワーク名前空間を使用することです。何らかの理由によりネットワーク名前空間を使用できない場合、抽象化ソケットはまだサンドボックスの内部から見えます。ハッカーはキーロガーやスクリーンショットプログラムをこのソケットにアタッチできます。 |
||
− | :The only way to disable the abstract socket {{ic|@/tmp/.X11-unix/X0}} is by using a network namespace. If for any reasons you cannot use a network namespace, the abstract socket will still be visible inside the sandbox. Hackers can attach keylogger and screenshot programs to this socket. |
||
− | + | [[Xinit#xserverrc|xserverrc]] は {{ic|-nolisten local}} のように編集できます。これにより、X11 の抽象化ソケットを無効化でき、X11 を隔離できます。 |
|
=== ブラウザをサンドボックス化する === |
=== ブラウザをサンドボックス化する === |
||
− | [[Openbox]] |
+ | [[Openbox]] は起動時に特定のブラウザを起動するように設定できます。{{ic|''program''.profile}} は {{ic|/etc/firejail}} に含まれている個別のプロファイルで、{{ic|--startup "''command''"}} はプログラムを起動する際に用いるコマンドラインです。例えば、Chromium をサンドボックス内で起動する場合: |
$ firejail --x11 --profile=/etc/firejail/chromium.profile openbox --startup "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}} を使うようなカスタムプロファイル内でとあるディレクトリを参照/ホワイトリスト化/ブラックリスト化する必要がある場合、カプセル化やエスケープなしの絶対パスを用いなければなりません: |
||
− | If you need to reference, whitelist, or blacklist a directory within a custom profile, such as with {{aur|palemoon}}, you must do so using the absolute path, without encapsulation or escapes: |
||
+ | |||
/home/user/.moonchild productions |
/home/user/.moonchild productions |
||
=== プライベートモード === |
=== プライベートモード === |
||
+ | Firejail は一回限りのプライベートモードも含んでいます。このモードでは、ホームディレクトリへの chroot でマウントが行われません。こうすれば、ディスクへの変更を伴わずにアプリケーションを実行できます。例えば、okular をプライベートモードで実行する場合、以下のようにしてください: |
||
− | Firejail also includes a one time private mode, in which no mounts are made in the chroots to your home directory. In doing this, you can execute applications without performing any changes to disk. For example, to execute okular in private mode, do the following: |
||
$ firejail --seccomp --private 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] をチェックすることは欠かせません。 |
||
− | Some applications do not work properly with Firejail, and others simply require special configuration. In the instance any directories are disallowed or blacklisted for any given application, you may have to further edit the profile to enable nonstandard directories that said application needs to access. One example is wine; wine will not work with seccomp in most cases. |
||
+ | {{Tip|[https://github.com/netblue30/firejail/wiki アップストリームの wiki] も参照してください。特に [https://github.com/netblue30/firejail/wiki/Debugging-Firejail debugging Firejail] のページです。}} |
||
− | Other configurations exist; it is suggested you check out the man page for firejail to see them all, as firejail is in rapid development. |
||
− | === |
+ | === Firejail のシンボリックリンクを削除する === |
+ | Firejail が作成したシンボリックリンクを削除するには(例えば、デフォルトに戻す場合): |
||
− | To remove Firejail created symbolic links (e.g. reset to default): |
||
# firecfg --clean |
# firecfg --clean |
||
+ | 特定のアプリケーションに対しては Firejail を使いたくない場合(例えば、Firejail よりも AppArmor を使って制限を課したい場合)、手動で関連するシンボリックリンクを削除する必要があります: |
||
− | Verify if any leftovers of [[Desktop entries]] are still overruled by Firejail. |
||
+ | # rm /usr/local/bin/''application'' |
||
− | === Desktop files === |
||
+ | この後に ''firecfg'' を実行すると、削除したシンボリックリンクが再び追加されるので、{{ic|/etc/firejail/firecfg.config}} 内のそれぞれのアプリケーションをコメントアウトする必要があります。 |
||
− | Some GUI application launchers ({{ic|.desktop}} files) are coded using absolute paths to an executable, which circumvents firejail's symlink method of ensuring that it is being used. The ''firecfg'' tool includes an option to over-ride this on a per-user basis by copying the {{ic|.desktop}} files from {{ic|/usr/share/applications/*.desktop}} to {{ic|~/.local/share/applications/}} and replacing the absolute paths with simple file names. |
||
+ | [[デスクトップエントリ]]の残骸が Firejail によって上書きされていないことを確認してください。 |
||
− | $ firecfg --fix |
||
+ | |||
+ | === PulseAudio === |
||
+ | {{Note|PulseAudio バージョン 9.0 およびそれ以降を使用すればこの問題を修正できるはずです。}} |
||
− | There may be cases for which you need to manually modify the EXEC line of the {{ic|.desktop}} file in {{ic|~/.local/share/applications/}} to explicitly call Firejail. |
||
+ | Firejail が、サンドボックス化されたアプリケーションで [[PulseAudio]] の問題を引き起こす場合[https://github.com/netblue30/firejail/wiki/Frequently-Asked-Questions#pulseaudio-7080-issue]、以下のコマンドを使用できます: |
||
− | ===PulseAudio=== |
||
+ | $ firecfg --fix-sound |
||
− | Firejail で PulseAudio が上手く動作しないという [https://firejail.wordpress.com/support/known-problems/ 既知の問題] が存在します。一時的に解決する方法: |
||
+ | このコマンドは、{{ic|1=enable-shm = no}} や利用可能な他の回避策を使用するカスタムの {{ic|~/.config/pulse/client.conf}} ファイルを''現在''のユーザに対して作成します。 |
||
− | {{hc|1=cp /etc/pulse/client.conf ~/.config/pulse/ |
||
− | |2=echo "enable-shm = no" >> ~/.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 |
+ | === --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] を見てください。 |
|
+ | 以下はエラーメッセージの例です: |
||
− | Example error message: |
||
$ firejail --noprofile --net=eth0 ls |
$ firejail --noprofile --net=eth0 ls |
||
274行目: | 331行目: | ||
=== Warning: Cannot confine the application using AppArmor === |
=== Warning: Cannot confine the application using AppArmor === |
||
+ | 一部のアプリケーションでは (例: [[Firefox]] [https://archived.forum.manjaro.org/t/firejail-apparmor-needs-kernel-patch/97700/3]) Firejail で起動すると以下のような警告を発する場合があります: |
||
− | {{Merge|#Enable AppArmor support|The requirement to enable AppArmor should be made explicit in the previous text. And note that Manjaro references are irrelevant.}} |
||
− | |||
− | For some applications (e.g. [[Firefox]] [https://forum.manjaro.org/t/firejail-apparmor-needs-kernel-patch/97700/3]) starting with Firejail may result in warnings like: |
||
Warning: Cannot confine the application using AppArmor. |
Warning: Cannot confine the application using AppArmor. |
||
282行目: | 337行目: | ||
As root, run "aa-enforce firejail-default" to load it. |
As root, run "aa-enforce firejail-default" to load it. |
||
+ | この警告で提案されたコマンドを実行すると以下のようなメッセージを目にするかもしれません: |
||
− | When running the suggested command you might see: |
||
ERROR: Cache read/write disabled: interface file missing. (Kernel needs AppArmor 2.4 compatibility patch.) |
ERROR: Cache read/write disabled: interface file missing. (Kernel needs AppArmor 2.4 compatibility patch.) |
||
+ | これは [[AppArmor]] がカーネルパラメータで有効化されていないことを意味しています。ゆえに、[[AppArmor#インストール]]に従ってセットアップする必要があります。 |
||
− | This means that [[AppArmor]] is not enabled as a kernel parameter, so you have to set it according to [[AppArmor#Installation]]. |
||
=== /usr/bin/patch: **** Can't open patch file === |
=== /usr/bin/patch: **** Can't open patch file === |
||
− | + | これは {{ic|PKGBUILD}} が {{ic|patch}} を {{ic|-i}} 引数で使用していることを意味しています。ゆえに、{{ic|$SRCDEST}} に対するホワイトリストが {{ic|/etc/makepkg.conf}} 内で必要です。 |
|
+ | {{ic|patch.local}} を作成して {{ic|$SRCDEST}} の値を [[#ローカルのカスタムプロファイルを永続化する|オーバーライド]]してください: |
||
− | Create: {{ic|/etc/firejail/patch.local}} with the value of your {{ic|$SRCDEST}}: |
||
− | whitelist /path/to/makepkg/sources |
+ | whitelist ''/path/to/makepkg/sources'' |
− | + | {{ic|PKGBUILD}} を {{ic|stdin}} を使用するように変更しても機能します |
|
− | patch -p1 < ../ |
+ | patch -p1 < ../''file.patch'' |
+ | === AMDGPU を使用するとグラフィカルなアプリケーションが起動時にハングする === |
||
− | === Graphical applications hang on start with AMDGPU === |
||
+ | {{Remove|This should be fixed since 2021-06 with the release of 0.9.66}} |
||
− | Some graphical applications, eg Firefox and mpv, will hang on start when using AMDGPU with Mesa >= 19.3.4. See [https://github.com/netblue30/firejail/issues/3219]. The issue is [https://github.com/netblue30/firejail/pull/3301 fixed] upstream, so {{aur|firejail-git}} should work. Alternatively, for all affected applications, add {{ic|seccomp !kcmp}} to their profiles in {{ic|etc/firejail}}. If they already have a {{ic|seccomp}} statement, you can concatenate them as a comma-separated list, eg {{ic|seccomp !chroot,!kcmp}}. |
||
+ | |||
+ | 一部のグラフィカルなアプリケーション(例: Firefox、mpv)は AMDGPU と Mesa >= 19.3.4 を使用すると起動時にハングします。[https://github.com/netblue30/firejail/issues/3219] を見てください。 |
||
+ | |||
+ | 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= 報告]してください。 |
||
+ | |||
+ | 回避策として、すべての影響を受けるアプリケーションに対して {{ic|seccomp !kcmp}} を {{ic|etc/firejail}} 下のプロファイルに追加してください。プロファイルにすでに {{ic|seccomp}} 文が存在する場合、コンマで区切ったリストで繋げることができます(例: {{ic|seccomp !chroot,!kcmp}})。 |
||
+ | |||
+ | === デーモン化した/バックグラウンドのプロセスがハングする === |
||
+ | |||
+ | プロセスをデーモン化できない[https://github.com/netblue30/firejail/issues/3491 既知の問題]が存在します。現在、Firejail を使用せずに、影響を受けるアプリケーションをサンドボックス化する以外に解決法はありません。これは Firejail 内部のバグなので、設定によりこの問題を解決することはできません。幸い、issue で言及されたアプリケーションには通常大きな攻撃領域は存在しないので、これをサンドボックスなしで実行するリスクは比較的低いです。 |
||
==参照== |
==参照== |
||
* [https://github.com/netblue30/firejail Firejail GitHub プロジェクトページ] |
* [https://github.com/netblue30/firejail Firejail GitHub プロジェクトページ] |
||
* [[bubblewrap]] Firejail の最小限の代用品 |
* [[bubblewrap]] Firejail の最小限の代用品 |
||
+ | |||
+ | {{TranslationStatus|Firejail|2022-09-09|745153}} |
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 の最小限の代用品