* [[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