next up previous contents
Next: 10 新たにドメインを作成する Up: SELinux Policy Editor(seedit)管理ガイド(マニュアル) 2.0 Previous: 8 Simplified Policyの基礎知識   Contents

Subsections


9 ポリシーを追加する

9.1 Permissiveモードで問題切り分け

SELinuxのアクセス拒否のためにアプリケーションが動作しない、と判明したら ポリシーを追加する必要があります。
ポリシーを追加する前に、permissiveモードで動作確認を行います。 もし、permissiveモードでアプリケーションが動作したならば、SELinuxが原因 でアプリケーションが動作しないことになります。この場合は、ポリシーを追加 してやる必要があります。 SELinux Policy Editorでは、 このような場合にポリシーを生成するためのツールがGUIおよびコマンドライン で用意されています。より具体的な例は、新規ドメイン作成とともに、 10章にて紹介します。

9.2 ポリシ生成の仕組み

ポリシの生成はSELinuxのログを基にして行われます。 Permissiveモードでの 動作確認の間に, SELinuxのログが取得されます。Permissiveモードとは、アク セスがSELinuxによって拒否される場合、ログを取るだけのモードでした。 (SELinuxが原因で動作しない)アプリケーションを動作させるには、 拒否されるアクセスを許可してやる必要があります。
以下は、アクセス拒否ログの例です。このログを例に、ポリシ生成ツールがど うやってポリシを生成するのかを見ていきます。
----
time->Wed Apr 26 18:34:32 2006
1: type=PATH msg=audit(1146090872.442:29): item=0 
name="/etc/vsftpd/vsftpd.conf" flags=101  inode=584775 dev=03:03 
mode=0100600 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1146090872.442:29):  
cwd="/etc/selinux/seedit/src/policy/simplified_policy"
2: type=SYSCALL msg=audit(1146090872.442:29): arch=40000003 
syscall=5 success=yes exit=3 a0=bfb04c52 a1=8800 a2=0 a3=8800 
items=1 pid=13151 auid=4294967295 uid=0 gid=0 euid=0 suid=0 
fsuid=0 egid=0 sgid=0 fsgid=0 comm="vsftpd" exe="/usr/sbin/vsftpd"
3: type=AVC msg=audit(1146090872.442:29): avc:  denied  { read } 
for  pid=13151 comm="vsftpd" name="vsftpd.conf" dev=hda3 
ino=584775 scontext=user_u:system_r:ftpd_t 
tcontext=system_u:object_r:default_t tclass=file
----
3行目はSELinuxのアクセス拒否ログで, 「 ftpd_tドメインが、 vsftpd.confという名前のファイルを読もうとして拒否された」 という意味です. 3行目から、以下のような設定を追加する必要があることが分かります。

allow vsftpd.conf r;
これだけでは、vsftpd.confのフルパスを記述してないので、アクセス を許可できてません。しかし、3行目のログにはフルパス情報は書かれていませ ん。 フルパスを得るために、1行目のログを利用します。ここに、vsftpd.conf のフルパスは/etc/vsftpd/vsftpd.confと書かれています。 1行目と3行目を組み合わせることで、以下を追加すればいいことが分かります。
allow /etc/vsftpd/vsftpd.conf r;
auditdサービスを起動していない場合、1行目のログは取得されません。つまり、 フルパス情報がログに含まれないことを意味します。ですので、SELinux Policy Editorを使うときはauditdを使うことをお薦めします。
なお、auditdが動いてない場合は、locateコマンドを使ってフルパスを推測し ますが、失敗することも多いです。

9.3 GUI(ポリシ生成ツール)

9.3.1 ツールを起動

コントロールパネルより ポリシーを生成をクリックします。図 10のような画面が開きます。

Figure 10: ポリシ生成ツール
Image vsftpd-generate

これは、ポリシ自動生成のための設定画面です。通常はデフォルトのままでかま いません。「ポリシーの生成」ボタンを押すことで、ポリシーが生成されます。
なお、ここで設定可能な項目を参考のために解説します。

9.3.2 結果を確認し、設定を実際に追加

設定を生成 ボタンを押すと、ポリシーが生成されます。 しばらく時間 がかかります。設定生成が完了すると、「結果」タブに結果が表示されます。
11は、生成された結果の例です。

Figure 11: ポリシ生成結果
Image vsftpd-generate-result
最初の行では、 allownet -protocol tcp -port 1024- server; という設定をvsftpd_tドメインに追加するかを聞いています。 対応するアクセス拒否ログも一緒に表示されています。このポリシーを追加した い場合は、チェックボックスにチェックを入れます。

まとめて指定 ボタンは便利な機能です。ディレクトリ単位でまとめてア クセス許可をすることができます。
allow /etc/vsftpd/vsftpd.conf r,s;を選択し、「まとめて指定」ボタ ンを押していくと、以下のようにファイル名が変わっていきます。

/etc/vsftpd/vsftpd.conf ->
/etc/vsftpd/* ->
/etc/vsftpd/** ->
/etc/* ->
/etc/** ->
/* ->
/** ->
まとめて指定を戻すボタンを押すと、上と逆の順番でファイル名が変わっ ていきます。
チェックされたポリシーは、 以下の設定が保存されますの部分に表示さ れます(図12)。 設定を追加する前に、権限を与えすぎでないか今一度見直します。大丈夫そうな らば、 セーブし、設定を適用ボタンを押します。 これらのポリシーがファイルに記述されるだけでなく、設定内容もSELinux側に 反映されます。

Figure 12: 保存する前の画面
Image vsftpd-generate-save

9.4 コマンドライン(audit2spdlコマンド)

audit2spdlというコマンドを使うことでも、ポリシー生成を行うことができます。 使いかたは、以下のようになります。 auditdサービスが起動していない場合(Fedora Core5のデフォルト),
# audit2spdl -dl
When auditd is running(Fedora Core4 default)
# audit2spdl -al
You can read log by specifying filename,
# audit2spdl -l -i /var/log/messages

audit2spdlコマンドは、SELinuxのアクセス拒否ログを、Simplified Policyに変 換するものです。これにより、アプリケーションを動作させるために必要な権限 を簡単に追加できます。以下が、出力例です。

#audit2spdl -dl
.... It takes some time...
-------------------------
#SELinux deny log:
audit(1146162965.963:16): avc:  denied  { read } for  pid=6653 
comm="vsftpd" name="vsftpd.conf" dev=hda3 ino=584775 
scontext=user_u:system_r:ftpd_t 
tcontext=system_u:object_r:default_t tclass=file
#Suggested configuration
File ftpd_t.sp:
allow /etc/vsftpd/vsftpd.conf  r;
-------------------------
...
これは、vsftpd.confにreadアクセス拒否をされたログが出ていますが、このア クセスを許可するには、
allow /etc/vsftpd/vsftpd.conf  r;
という設定をftpd_t.spファイルに追加する必要がある、と言っています。

9.4.1 audit2spdlを効率よく使うために

auditdサービスを有効にしておいたほうが、効率よく作業ができます。 auditdサービスはより詳細なログを取ってくれるからです。 SELinuxのアクセス拒否ログには、フルパス情報が含まれていません。 例えば/etc/vsftpd.confにアクセス拒否された場合、「vsftpd.conf」にアク セス拒否されたとしか記録されません。 auditdサービスを使うと、フルパスも記録されます。 アクセス拒否ログから、ポリシーを生成するには,フルパス情報が不可欠です。 auditdサービスを有効にすることで、フルパス情報を得られ、正しいポリシーが 生成できるわけです。
Fedora Core5の場合、以下でauditdを有効にできます。
#yum install audit
#chkconfig auditd on
#/etc/init.d/auditd start
auditdを有効にしたら、通常は「audit2spdl -al」で事足ります。audit2spdl -dlは意味がなくなるので注意が必要です。
auditdを使わない場合、audit2spdlは、フルパス情報を「locateコマンド」と組 み合わせて推測します。ただし、locateコマンドを使う前に定期的に「updatedb」 コマンドを走らせる必要があります(デフォルトではcronジョブで走っていま す)。

9.4.2 提示されたポリシーを追加して設定反映

上の例では、必要なポリシーが提示されただけで、設定が反映されていません。 /etc/seedit/policy/vsftpd.sp.を開き、 「allow /etc/vsftpd/vsftpd.conf r;」という行を${}$の間に記述します。次 のようになります。
{
domain vsftpd\_t
program /usr/sbin/program;
allow ....
<ここに追加!>
}
ポリシーを追加したら、その変更内容を反映する必要があります。 「seedit-load」とタイプします。
#seedit-load
seedit-load: Success
このコマンドは、Simplified PolicyをSELinuxのポリシの形式に変換し、 /etc/selinux/seedit以下に生成されたポリシーをインストールします。 そして、そのポリシーをカーネルに読み込ませ、必要次第でファイルのラベル付 けもします。
seedit-loadコマンドの詳細な進行具合を「-v」オプションを付与することで見 ることができます。
# seedit-load -v
mkdir -p ./sepolicy;
m4 -s ./simplified_policy/*.sp >./simplified_policy/all.sp;
/usr/bin/seedit-converter -i ./simplified_policy/all.sp -o 
./sepolicy -b ./base_policy -I ./simplified_policy/include ;
.................

cp /etc/selinux/seedit/contexts/files/file_contexts.all 
/etc/selinux/seedit/contexts/files/file_contexts.all.old
seedit-load: Success

なお、上の例では、

allow /etc/vsftpd/* r;.
という設定を追加してもよいです。これは、ファイル名が、audit2spdlに提示さ れたものとは異なります。が、システム管理者は、/etc/vsftpdディレクトリが vsftpdの設定ファイルであることを知っていますので、このディレクトリ全体の 読み込み権限を与えてしまったほうが効率がよいです。

9.4.3 audit2spdlについての諸注意

  1. セキュリティ上最適とは限らない
    audit2spdlによって提示される設定は、最適なものとは限りません。 提示された設定を追加する前に、注意深く見直す必要があります。 例えば、audit2spdlのデフォルトは、詳細設定パーミッション(o,a,c,e,t))を提示しません。 代わりにwを提示しますので、設定が粗くなります。ちなみに、詳細設定パーミッ ションを提示するには、sオプションを例えばaudit2spdl -alsのように 使います。

  2. 設定の提示に失敗することがある
    ログからファイルのフルパスを得ることを失敗すると、以下のようなメッセー ジが現れます。
    #Failed to generate, because failed to obtain fullpath.
    
    SELinuxのログにはフルパス情報は含まれてませんが、audit2spdlはフルパスを 得るため様々な作業を行っています。それにも関らず失敗することもあ ります。auditdサービスを起動しておくことで、フルパスを得る可能性 を高めることができます。


next up previous contents
Next: 10 新たにドメインを作成する Up: SELinux Policy Editor(seedit)管理ガイド(マニュアル) 2.0 Previous: 8 Simplified Policyの基礎知識   Contents
Yuichi 2006-06-28