SELinuxで組み込み機器のセキュリティを高める(後編) ―― 組み込み機器にSELinuxを適用する

中村雄一

tag: 組み込み

技術解説 2008年9月 8日

● 設定手順

 さて,実際にlighttpdに「httpd_t」ドメインを付与して動作させてみましょう.HTMLページを/opt/wwwに公開すると仮定して,このページを公開できるところまで設定します.設定するための一般的な手順は,図4のようになります.この手順に沿って設定していきましょう.

zu04_01.gif

図4 一般的な設定手順

1) 設定の下書き

 まず,大まかに設定を書き上げます.つまり,ドメイン付与のための最低限の設定を行うとともに,アクセスすると分かっているファイルやポートに対してアクセス許可設定を記述します.筆者がこの段階で作成した設定をリスト2に示します.今回は,「httpd_t」というドメインを作るので,ファイル名はsimplified_policy/httpd_t.spです.

1 {
2 domain httpd_t;
3 program /usr/sbin/lighttpd;
4 include common-relaxed.sp;
5 include daemon.sp;
6 allow /opt/www/** r,s;
7 allow /etc/lighttpd/** r,s;
8 allow /var/log/lighttpd/** r,w,s;
9 allow /usr/lib/lighttpd/** r,s,x;
10 allownet -protocol tcp -port 80 server;
11 }

リスト2 lightttpdをSELinuxで動かすための下書き設定
便宜上,行番号を振っている.

 リスト2の2~5行目は定型的な設定です.ほかのアプリケーションでも同じようになります.ドメインhttpd_tを,実行ファイル/usr/sbin/lighttpdから起動するプログラムに付与します.そして,デーモン・プログラムに共通するアクセス許可を与えています.

 6~9行目は,lighttpdがアクセスすると予想されるファイルを列挙しています.Webページのコンテンツと設定ファイルに読み込みアクセスを許可しています.ログ・ファイルには書き込みを許可し,ライブラリには読み込み実行を許可しています.ここで忘れがちなのはsパーミッションの許可です.これは,ディレクトリを移動するためのパーミッションです.このパーミッションを忘れるとアプリケーションがディレクトリをオープンできないため,うまく動作しないことがあります.10行目は,80番ポートを使ってサーバとして振る舞うための権限です.この権限が必要なことは自明なので許可しています.ここでできるだけ多くの設定を書いておくと,あとの設定追加作業の手間が省けます.

2) 設定反映・ドメイン付与の確認

 設定を反映し,lighttpdにhttpd_tドメインが付与されることを確認します.設定の反映のためには,まず,開発機上でポリシを生成します.作業ディレクトリは~/seedit-crossとします.

  $ ./seedit-cross -d


 これで,ボード側の/etc/selinux/seeditに転送すべきポリシがpolicy_rootディレクトリにできました.policy_rootの中身をボード側の/etc/selinux/seeditに転送します注4

注4;ポリシの転送方法はいろいろ考えられるが,今後繰り返し転送することを考えると,開発機側の~/seedit-cross/policy_rootをボード側の/etc/selinux/seeditにNFSマウントするのが最も楽である.

 転送したら,ボード側で設定反映作業を行います.まずは,新しいポリシをロードします.

  # load_policy


 これで,アクセス許可設定が格納された/etc/selinux/seedit/policy/poilcy.21の内容がカーネルにロードされます.これだけでは設定は反映されません.ファイルとタイプの関連付けが変更になることがあるためです.変更部分を反映する必要があります.SEEditでは,タイプの修正が必要なファイルの一覧をボード側の/etc/selinux/seedit/fcdiffに格納しています.

 ボード側で,次のコマンドを使うことで,タイプの修正が必要なファイルのタイプを修正できます.

  # restorecon -R -f /etc/selinux/seedit/
  fcdiff


 restoreconコマンドは,ファイルのラベルを直すコマンドです.fcdiffに列挙されたディレクトリ・ファイルのラベルを直します.-Rは,ディレクトリの中身を再帰的にたどるためのオプションです.なお,もう一度seedit-load -dを実行して結果を転送するとfcdiffが消えてしまうことに気を付けましょう.

 設定を反映したら,ボード側でlighttpdを再起動してみます注5

注5;SELinuxでは,プロセスへのドメインの付与は,プロセスの実行のタイミングで行われる.新たにドメインを付与する設定を作成した場合は,該当するプロセスを再起動する必要がある.

  # /etc/init.d/lighttpd restart


 そして,ドメインを確認します.

  # ps -Z
  ...
  1164 system_u:system_r:httpd_t S /usr/
  sbin/lighttpd -f /etc/lighttpd/
  ...


 lighttpdが,「httpd_t」というドメインで動作していることが分かります.

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日