* [[SELinux]]
Security-Enhanced LinuxでセキュアOSとしての機能を持ったLinuxです。FedoraやCentOs等はデフォルトで有効になってます。
#contents

** 環境
とりあえず、FedoraCore3で試してましたが、今はCentOSでやってます。
** 語彙
TEとかラベルとかいろいろと言葉がでてきて、紛らわしいので整理していきます。まずプロセス単位のアクセス制御のことをTE(Type Enforcement)と呼びます。このときアクセス制御をする際にプロセスやリソースにラベルをつけて制御をするのですが、このときプロセスにつけているラベルをドメイン、リソースにつけているラベルをタイプといいます。またこのファイルや、ディレクトリといったリソースのことをオブジェクトとよばれ、そのオブジェクトごとにどのような操作を行うことが出来るかをアクセスベクタと呼びます。ですので、ラベルのついたプロセス(ドメイン)が、ラベルのついたリソースに対して、何が出来るか(アクセスベクタ)を関連させ制御を行うことがTEになります。~
またポリシータイプという言葉がでてきますが、targetedポリシーとstrictポリシーの2種類があります。そもそもこれはどのようなセキュリティポリシーにするのかという大きな決め事を選択します。targetedポリシーは特定のデーモンを対象にしてTEをおこないますが、strictポリシーはすべてになります。それではいま自分はどちらかを確認してみます。 
 cat /etc/sysconfig/selinux
このSELINUXTYPE=targetedがいまのポリシーになってます。せっかくSELinuxをつかうんですから、strictにしておきたいところですが、普通にインストールするとtargetedポリシーしか使えないので、
ftp://fr2.rpmfind.net/linux/fedora/core/updates/3/i386/selinux-policy-strict-sources-1.19.10-2.noarch.rpm ftp://fr2.rpmfind.net/linux/fedora/core/updates/3/i386/selinux-policy-strict-1.19.10-2.noarch.rpm
をダウンロードして、インストールしておきます。ではついでにこのファイルにSELINUX=enforcingと記述があります。これはなんでしょうか。これは動作モードをあらわしています。permissiveとenforcingの2種類があり、permissiveはポリシーに反する場合は、ログに出力されますが、enforcingはTEを行いますので、まずpermissiveで動かしエラーがなければ、変更して動かします。
ついでにtargetedのソースも入れておきます。
 yum install selinux-policy-targeted-sources
** 設定
-動作モード
 cat /selinux/enforce
で0であればpermissive,1であれば、enforcingである。この動作モードは
 permissive ログは出力するがアクセス拒否の設定をしていても許可する。設定の時に。
 enforcing 運用時のモード。設定どおりに動く
設定段階では、permissiveで設定していくので、
 echo 0 > /selinux/enforce
としておく。
 getcon
でロールとドメインを確認できる。
-セキュリティポリシー変更
 getsebool -a
で確認して、
 setsebool httpd_ssi_exec 0
としてやるとinactiveになります。1にするとactiveになります。またこれを再起動時にも有効にする場合は、
 /etc/selinux/ポリシータイプ/booleans
に書き込みましょう。この時、ポリシータイプとはtargetedもしくはstrictです。
また
 sestatus -v
で状態を見ることができます。
-定義ファイル~
ドメイン定義ファイルが
 /etc/selinux/strict/src/policy/domains/program
にファイル名.teで
 /etc/selinux/strict/src/policy/file_contexts/program 
にファイルコンテキスト定義ファイルがファイル名.fcであります。
-ロールの割り当て
 /etc/selinux/strict/src/policy/users
に追加して、 /etc/selinux/strict/src/policyで
 make reload
** /etc/selinux/strict/src/policy
 domains
  user.te:user_t,staff_rに関する設定
  admin.te:sysadm_tに関する設定
  program:各アプリケーションの設定 allow
 file_contexts
  program:各アプリケーションの設定 domains/programと対
** ログ
 /var/log/messages
を見てみましょう。ちなみに~
Jul  3 00:54:52 localhost kernel: audit(1190319691.598:0): avc:  denied  { setattr } for  pid=9280 comm=smbd name=smbpasswd dev=dm-0 ino=5276804 scontext=root:system_r:initrc_t tcontext=root:object_r:samba_etc_t tclass=file~
こんな感じでpermissiveにしていると、山盛りでていますので、つぶしていきます...
では見ていきましょう。まずdeniedは拒否されてます。拒否されたのはsetattrのアクセスベクターです。pidはプロセスIDです。scontextがこのプロセスID:smbdのセキュリティコンテキストで、tcontextが対象となるファイルsmbpasswdのセキュリティコンテキストです。initrc_tドメインがsamba_etc_tタイプにsetattrを試みて拒否されてます。inoはiノード番号で、find / -inum 5276804 で検索してみるとそのファイルの場所がわかるかもしれません。

** TIPS
*** audit2allow
allowポリシーを作成してくれます。/etc/selinux/strict/src/policyで、
 audit2allow -d -v >> domains/add_org.te
とするとadd_org.teが作成されます。エラーが出る場合はコメントしておきましょう。touch tmp/loadが表示され作成できましたら、make reloadです。ただあくまでも参考程度にしてください。
*** セキュリティコンテキストの表示
各コマンドでセキュリティコンテキストを表示できます。
 id ユーザ
 ls ファイル -Z,--context セキュリティコンテキスト表示 --lcontext 詳細
 ps プロセス -Z,--context セキュリティコンテキスト表示
*** ラベルを振る
 chcon 
 fixfiles /etc/selinux/strict/src/policy/file_contexts/file_contextsの内容ですべてふる
  引数checkで間違ったラベルを表示、restoreでまちがっているものをすべて変更、relabelですべて変更
 restorecon /etc/selinux/strict/src/policy/file_contexts/file_contextsの1つ以上ふる
  例:restorecon /etc/rc.local
 setfiles
mysqlをインストールして、スクリプトを/etc/init.dにコピーしたんですが、その時点ではおかしかったのですが、restoreconでsystem_u:object_r:initrc_exec_tに変更されました。また再起動時にラベルを振りなおすには/に
 .autorelabel
を空ファイルで作成しておきます。
*** デーモンの起動
 run_init /etc/init.d/httpd start
*** 標準のロール
 staff_r sysadm_rに遷移する許可のあるユーザが通常使用するロール
 sysadm_r システム管理者用
 system_r プロセスが使用するロール
 user_r 一般ユーザ用
*** ロールの変更
 newrole -r sysadm_r
*** タイプ付与
 chcon -R system_u:object_r:タイプ ファイルorディレクトリ
** リンク
http://fedoranews.yanbaru.dyndns.org/creativecommons/selinux-faq-ja/
** 参考書籍
[[SELinux徹底ガイド>http://www.amazon.co.jp/exec/obidos/ASIN/ 4822221113/worried-22]]~
[[SELinuxシステム管理>http://www.amazon.co.jp/exec/obidos/ASIN/ 4873112257/worried-22]]~
この上記の2冊は良書です。
** コメント
-eHARZpqkbdc -- [[nyatadjsb]] &new{2008-10-20 (月) 05:59:30};
--#comment

#comment


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS