以下省略!

タイダルウ(ry ほぼ毎日1記事執筆運動実施中。 ※記事に広告(アフィリエイト)リンクを掲載している場合があります。

firejailを使ってサンドボックス内でプログラムを実行してみる

f:id:abyssluke:20170825174704p:plain:w200:leftfirejailとはLiunx名前空間やseccomp-bpfなどを利用したSUIDサンドボックス。信頼できないアプリなどを安全に実行するのに便利。試しに使ってみたときのメモなので内容薄め。

インストール

レポジトリから入れてもいいのだが、大抵古いのでここはGitからソースを持ってきてビルド&インストールしてみる。

$ git clone https://github.com/netblue30/firejail
$ cd firejail
$ ./configure
$ make
$ sudo make install-strip

使ってみる

firejailのあとにコマンドを入力。これによりサンドボックス環境下でプログラムが実行される。

$ firejail firefox
$ firejail ssh -i .ssh/id_ecdsa hogehoge@example.com

もしそのプログラムに対応したプロファイルがある場合はそのプロファイルに従って動作する(プロファイルは上の手順でインストールした場合/usr/local/etc/firejail内に入っている)。

コマンドが入力されていない場合はサンドボックス環境でシェルが実行される。ちなみに、サンドボックス環境下では通常、一部ディレクトリ(/bootや/sbinなど)やファイル(ログファイルなど)へのアクセスが禁止される。

$ firejail
$ cd /sbin
bash: cd: /sbin: 許可がありません
$ cat /var/log/syslog
cat: /var/log/syslog: そのようなファイルやディレクトリはありません

firejailはオプションによりサンドボックス化する範囲などを変えることができる。

自分のホームディレクトリをサンドボックス化≒ほぼ真っ白な状態で起動する場合は--privateオプションをつける。
またホームディレクトリを指定する場合は--privateオプションにディレクトリを渡せばよい。

$ firejail --private firefox
$ firejail --private=./private-fx firefox

Xアプリケーションをサンドボックス化されたXサーバーで動かす場合は--x11オプションをつける。
XpraかXephyrのインストールが必要。

$ firejail --x11 xcalc

AppImageをfirejailを通して実行することも可能。この場合は--appimageオプションを使用する。

$ firejail --appimage ./krita-3.2.0-x86_64.appimage

注意

  • PulseAudio 7.0/8.0環境の場合、サンドボックス化されたアプリでは正常に音が出ない場合がある。
    • firecfg --fix-soundでPulseAudioの設定ファイルにenable-shm = noの設定を書き込む。
  • 一部アプリは正常に動作しない場合がある。また文字化けを起こすこともある(eogやevinceなどで確認)。
  • /etc/ld.so.preload云々でAppArmorが怒る場合は/etc/ld.so.preloadを消す。
    • firejailでの実行の過程(traceオプションがある場合?)で/etc/ld.so.preloadが生成される。