「侵入されても広がらなければいい」――そう考えたことはありませんか。ブラウザがマルウェアに感染しても、その被害をブラウザだけに閉じ込められれば、ホームディレクトリもSSH鍵もシステム設定もすべて守り切れます。
それを軽量かつ手軽に実現するのが firejail(ファイヤージェイル) です。
この記事では、firejail の仕組みから導入手順・プロファイルのカスタマイズまで、情シス1人体制のサーバー担当者が現場で使えるレベルで解説します。インストールから最初のサンドボックス起動まで10分以内に完了できる内容にまとめました。

firejailとは?(概要・なぜ今この知識が重要か)
firejail は Linux カーネルが提供するセキュリティ機能を組み合わせ、アプリケーションの実行環境を隔離するサンドボックスプログラムです。SUID バイナリとして動作し、特別なカーネルモジュールや追加の仮想化レイヤーは一切不要です。
「ブラウザで怪しいPDFを開いてしまった」「依存パッケージに悪意あるコードが混入していた」――こうした侵害を受けたとしても、firejail のサンドボックス内に封じ込められていれば ホームディレクトリへの書き込みもネットワーク接続も制限されます。
セキュリティ業界では「侵害を前提とした設計(アシューム・ブリーチ)」が主流になりつつあります。ゼロデイや未知マルウェアに対して「感染させない」だけでなく、「感染しても被害を最小化する」 発想が求められています。firejail はその実践に最も手軽な選択肢の一つです。
・対象OS: Ubuntu / Debian / Fedora / RHEL 系 Linux
・対象アプリ: ブラウザ、メールクライアント、メディアプレーヤー、未検証スクリプト等
・必要なカーネルバージョン: 3.8以上(ほぼすべての現行ディストリビューションで対応)
firejailの仕組み(サンドボックスが守る仕組み)
firejail が使うのは Linux カーネルに標準実装された3つのセキュリティ機能です。
1. Linux名前空間(Namespaces)
名前空間(namespace)は、プロセスが見えるリソースの「スコープ」を切り分けるカーネル機能です。firejail は以下の名前空間を活用します。
・マウント名前空間: ファイルシステムの見え方を制限。サンドボックス内では /home の中身を読み取り専用にしたり、特定ディレクトリを空にしたりできます
・ネットワーク名前空間: ネットワークインターフェースを隔離。アプリからの外部通信を遮断または制限できます
・PID名前空間: プロセスの可視範囲を限定。サンドボックス内から他プロセスへの干渉を防ぎます
・IPC名前空間: プロセス間通信(共有メモリ・メッセージキュー)の隔離
2. seccomp-bpf(システムコールフィルタリング)
seccomp-bpf(Secure Computing Mode with BPF)はシステムコールを BPF フィルタで制御する仕組みです。ブラウザに ptrace や mount などの危険なシステムコールを許可しなければ、カーネルへの不正な介入経路を大幅に削れます。firejail は各アプリ向けプロファイルの中で許可システムコールのホワイトリストを管理しています。
3. Linuxケーパビリティ(Capabilities)の剥奪
root 権限を細分化した「ケーパビリティ」から、アプリに不要なものを起動時に剥奪します。たとえばブラウザが CAP_NET_ADMIN や CAP_SYS_ADMIN を持つ必要はありません。これらを削ることで、ブラウザプロセスが乗っ取られてもシステム全体への影響を限定できます。
firejailのインストールと基本操作
1. インストール
Ubuntu / Debian 系の場合は公式パッケージが利用できます。
# Ubuntu 22.04 / 24.04 / Debian 12 sudo apt update sudo apt install firejail firejail-profiles # バージョン確認 firejail --version
Fedora / RHEL 系では以下のように導入します。
# Fedora sudo dnf install firejail # RHEL 9 / AlmaLinux / Rocky Linux(EPEL経由) sudo dnf install epel-release sudo dnf install firejail
2. プロファイルを使った基本的な起動
firejail は /etc/firejail/ および ~/.config/firejail/ に置いたプロファイルを自動で読み込みます。既存のプロファイル一覧は以下で確認できます。
# プロファイル一覧の確認 ls /etc/firejail/*.profile | head -20 # アプリ名を指定するだけで対応プロファイルを自動適用 firejail firefox firejail chromium-browser firejail vlc
プロファイルが存在しないアプリでも、デフォルトのサンドボックス設定が適用されます。まず試しに起動してみて、動作を確認するのが最も早い進め方です。
3. サンドボックス内の状態を確認する
起動中のサンドボックス一覧とその中で動作しているプロセスは firejail --list / firejail --tree で確認できます。
# 起動中のサンドボックス一覧 firejail --list # 出力例(PID:プロファイル名:コマンド ) # 1234:firefox:/usr/bin/firefox # サンドボックス内のプロセスツリーを表示 firejail --tree
実践的なfirejail設定
1. カスタムプロファイルの作成
~/.config/firejail/ にシステム提供プロファイルをコピーして上書き設定を追加できます。ユーザー側のプロファイルが優先されるため、システム設定を壊さずに変更できます。
# システムプロファイルをユーザー側にコピー mkdir -p ~/.config/firejail cp /etc/firejail/firefox.profile ~/.config/firejail/ # カスタム設定を追記(例: ダウンロード以外のホームへのアクセスを遮断) cat >> ~/.config/firejail/firefox.profile << 'EOF' # ダウンロードフォルダのみ書き込みを許可 private-tmp blacklist ${HOME}/.ssh blacklist ${HOME}/.gnupg EOF
特によく使うカスタム設定を紹介します。
・private-tmp: /tmp を空の一時ディレクトリに置き換え。マルウェアが /tmp に実行ファイルを置く手口を封じます
・blacklist ${HOME}/.ssh: SSH 鍵ディレクトリへのアクセスを完全遮断
・noroot: サンドボックス内で root へのなりすましを禁止
・nosound: サウンドデバイスへのアクセスを遮断(スパイウェア対策)
2. ネットワーク接続を制限する設定
特定のアプリをオフラインで動作させたい場合、--net=none でネットワークを完全に切断できます。PDF ビューアや画像ビューアなどには特に有効です。
# ネットワーク接続を遮断してファイルを開く firejail --net=none evince untrusted-document.pdf # プロファイルにも記載できる echo "net none" >> ~/.config/firejail/evince.profile
3. デスクトップ統合(自動サンドボックス起動)
firecfg コマンドを使うと、デスクトップのランチャー(.desktop ファイル)を書き換え、アプリを常に firejail 経由で起動するように設定できます。
# プロファイルが存在する全アプリをサンドボックス自動起動に設定 sudo firecfg # 特定アプリだけを対象にする場合 sudo firecfg --fix firefox # 設定を元に戻す場合(シンボリックリンクを削除) sudo firecfg --clean
firecfg は /usr/local/bin/ にシンボリックリンクを作成します。パスの優先順位で firejail ラッパーが先に呼ばれるようになるため、ユーザーが意識せずとも常にサンドボックスが有効になります。
中小企業でも今日からできること
サーバー環境や情シス1人体制の職場でも、段階的に取り入れられる手順を整理します。
・ステップ1(即日): ブラウザとメールクライアントを firejail 経由で起動するエイリアスを ~/.bashrc に追加する
# ~/.bashrc に追加 alias firefox='firejail firefox' alias thunderbird='firejail thunderbird'
・ステップ2(1週間以内): firecfg を実行し、プロファイルが存在するアプリ全体をデスクトップ統合でサンドボックス化する
・ステップ3(1か月以内): 重要アプリ(パスワードマネージャーを除くブラウザ等)に SSH 鍵・GPG 鍵ディレクトリのブラックリストを追加したカスタムプロファイルを整備する
・ステップ4(継続): 新しくインストールしたアプリについて、プロファイルの有無を確認し、なければデフォルト設定のまま起動する習慣をつける
よくある誤解と注意点
【誤解1】firejail を使えばマルウェア感染しない
firejail は感染を「防ぐ」ツールではなく、感染後の「被害を封じ込める」ツールです。アンチウイルス・OSアップデート・パスワード管理との組み合わせで機能します。
【誤解2】サーバーには不要だ
デスクトップ用途のイメージが強いですが、信頼性が不明なスクリプトや外部から受け取ったバイナリを実行する際にも有効です。CI/CD 環境で untrusted なビルドを走らせる場合などに活用できます。
【注意1】SUID バイナリ自体のセキュリティ
firejail 自体が SUID バイナリのため、バージョン管理を徹底し、定期的にアップデートしてください。過去に firejail 自体の特権昇格脆弱性が報告された事例もあります(修正済み)。
【注意2】AppArmor・SELinux との競合
AppArmor や SELinux がアクティブな環境では、両者のポリシーと firejail のプロファイルが競合する場合があります。起動直後に firejail --debug でログを確認し、deny が多発していないかチェックしてください。
【注意3】全アプリに適用するのが目的ではない
信頼性の高い自社開発ツールや管理コマンドをすべてサンドボックス化すると、運用上の手間が増えるだけです。外部コンテンツを扱うアプリ(ブラウザ・メール・ドキュメントビューア)から優先的に適用するのが合理的です。

本記事のまとめ
| 設定項目 | 効果 | 難易度 |
|---|---|---|
| firejail インストール | apt/dnf で即日完了・プロファイル自動適用 | 低(5分) |
| ブラウザをサンドボックス起動 | マルウェア感染時のホーム汚染を防止 | 低(エイリアス1行) |
| SSH鍵・GPG鍵のブラックリスト化 | 鍵の窃取経路を遮断 | 低(設定2行追記) |
| net none オプション | PDFビューア等からの外部通信を完全遮断 | 低(コマンドオプション) |
| firecfg によるデスクトップ統合 | ユーザーが意識せずサンドボックス運用 | 中(一括設定・検証が必要) |
| カスタムプロファイル作成 | アプリ固有のリスクに応じたきめ細かい制御 | 中(プロファイル構文の理解が必要) |
firejail は「追加の仮想化なし・カーネルモジュール不要・既存アプリをそのまま使える」という三拍子が揃ったサンドボックスです。アシューム・ブリーチの考え方を現場に取り入れる第一歩として、まずブラウザ1本から試してみてください。
Linuxのchrootジェイル設定については、LinuxのchrootジェイルでLinuxサービスを隔離する方法もあわせてご参照ください。firejail が内部で活用する隔離の原理を深く理解できます。
PR
Linuxのセキュリティ設定をゼロから体系的に学べる一冊。firejailを含むサンドボックス・権限管理・ログ監視など、現場で役立つ設定手順が網羅されています。
