SELinux

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

環境

とりあえず、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徹底ガイド
SELinuxシステム管理
この上記の2冊は良書です。

コメント

  • #comment

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-10-20 (月) 01:24:00 (5688d)