2012-04-08

SELinux: file redirection is denied

logwatch のデフォルト設定では、レポートをメールで送信する。しかし不要なサービスは起動しないのがセオリー、logwatch の為だけにメールサーバーを起動したくない。代わりにレポートを /var/log 下に保存するため、cron に下記のようなスクリプトを登録する。

#!/bin/bash
LOGWATCH=/usr/sbin/logwatch
if [ -x "$LOGWATCH" ] ; then
    mkdir -p /var/log/logwatch
    $LOGWATCH -save /var/log/logwatch/logwatch-$(date +%Y%m%d)
fi

RHEL6 でこれを実行すると、SELinux に引っ掛かる。/var/log/audit/audit.log には、

type=AVC msg=audit(1332785643.501:68869): avc:  denied  { write } for  pid=23193 comm="logwatch" name="logwatch" dev=sda5 ino=258088 scontext=system_u:system_r:logwatch_t:s0-s0:c0.c1023 tcontext=system_u:object_r:var_t:s0 tclass=dir
type=SYSCALL msg=audit(1332785643.501:68869): arch=c000003e syscall=2 success=no exit=-13 a0=3037430 a1=441 a2=1b6 a3=3f5311dba0 items=0 ppid=23178 pid=23193 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=7979 comm="logwatch" exe="/usr/bin/perl" subj=system_u:system_r:logwatch_t:s0-s0:c0.c1023 key=(null)

logwatch_t は var_t に書き込む権限がない、と言っている。なのでやり方を変えてみる。

$LOGWATCH -print >>/var/log/logwatch/logwatch-$(date +%Y%m%d)

結果は、

type=AVC msg=audit(1332873421.565:77913): avc:  denied  { append } for  pid=4424 comm="logwatch" path="/var/local/pearl/log/logwatch/logwatch-20120328" dev=sda5 ino=258164 scontext=system_u:system_r:logwatch_t:s0-s0:c0.c1023 tcontext=system_u:object_r:var_t:s0 tclass=file
type=SYSCALL msg=audit(1332873421.565:77913): arch=c000003e syscall=59 success=yes exit=0 a0=17cd9f0 a1=17caea0 a2=17cacf0 a3=18 items=0 ppid=4409 pid=4424 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=9452 comm="logwatch" exe="/usr/bin/perl" subj=system_u:system_r:logwatch_t:s0-s0:c0.c1023 key=(null)

じゃどうすりゃいいんだよ、と途方に暮れていると、

記事の内容は logwatch とは関係ないが、試してみる価値はある。

$LOGWATCH -print | cat >>/var/log/logwatch/logwatch-$(date +%Y%m%d)

ビンゴ。:-D

結論: ファイルにリダイレクトする際は、取りあえず cat を通しとけ。

そうすれば、SELinux に呪いの言葉を吐く回数が減る。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。