トラブル対応20111105 - 運用日誌

SELinuxのエラーログに以下が発生。

host=localhost.localdomain type=AVC msg=audit(1294116997.483:57): avc: denied { read } for pid=4029 comm="smartd" name="libm.so.6" dev=sda2 ino=1508034 scontext=system_u:system_r:fsdaemon_t:s0 tcontext=system_u:object_r:file_t:s0 tclass=lnk_file




メッセージ切り分け

意味としては、「/usr/sbin/smartdコマンド(セキュリティコンテキストsystem_u:system_r:fsdaemon_t:s0)がlibm.so.6ファイル(セキュリティコンテキストsystem_u:object_r:file_t:s0)を読み込もう(read)としてアクセス拒否(denied)となっている」となる。

意味通りなら環境設定に間違いがあることになる。

明らかにわかることとしては、libm.so.6ファイルはライブラリなので、通常、file_tでなくlib_tのはず。

調査切り分け

/usr/sbin/smartdがどこのlibm.so.6を読みにいくか確認

# ldd /usr/sbin/smartd
        libselinux.so.1 => /lib64/libselinux.so.1 (0x00002ba449ca8000)
        libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00002ba449ec0000)
        libm.so.6 => /lib64/libm.so.6 (0x00002ba44a1c0000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002ba44a444000)
        libc.so.6 => /lib64/libc.so.6 (0x00002ba44a652000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00002ba44a9a9000)
        libsepol.so.1 => /lib64/libsepol.so.1 (0x00002ba44abae000)
        /lib64/ld-linux-x86-64.so.2 (0x00002ba449a8b000)

/lib64/libm.so.6 であることを確認

/lib64/libm.so.6のセキュリティコンテキストを再確認

# ls -Zl /lib64/libm*
-rwxr-xr-x 1 system_u:object_r:file_t         root root 615136 10月 26 05:40 /lib64/libm-2.5.so
lrwxrwxrwx 1 system_u:object_r:file_t         root root     11 10月 27 17:46 /lib64/libm.so.6 -> libm-2.5.so

ちなみに他のライブラリファイルはどうなっているかというと、、

# ls -Zl /lib64/
...
lrwxrwxrwx 1 system_u:object_r:lib_t          root root      16 10月  5 16:05 libwrap.so.0 -> libwrap.so.0.7.6
-rwxr-xr-x 1 system_u:object_r:lib_t          root root   37368  9月 22  2009 libwrap.so.0.7.6
drwxr-xr-x 2 system_u:object_r:lib_t          root root    4096 10月 27 17:46 rtkaio
drwxr-xr-x 4 system_u:object_r:lib_t          root root    4096 12月 18 04:02 security

他は、lib_tだ。

ファイルコンテキストの現状ルール(ユーザ追加ルール)を確認

# cat /etc/selinux/targeted/contexts/files/file_contexts.local 
# This file is auto-generated by libsemanage
# Please use the semanage command to make changes

/lib64/libm.so.6    system_u:object_r:file_t:s0
/lib64/libm-2.5.so    system_u:object_r:file_t:s0

何か余計なものが登録されている。今回直接原因はこれであろう。

問題対処

セキュリティコンテキストルールを修正

# cat /etc/selinux/targeted/contexts/files/file_contexts.local 
# This file is auto-generated by libsemanage
# Please use the semanage command to make changes

/lib64/libm.so.6    system_u:object_r:file_t:s0
/lib64/libm-2.5.so    system_u:object_r:file_t:s0
# semanage fcontext -d -t system_u:object_r:file_t:s0 '/lib64/libm.so.6'
# semanage fcontext -d -t system_u:object_r:file_t:s0 '/lib64/libm-2.5.so'
# cat /etc/selinux/targeted/contexts/files/file_contexts.local 
# This file is auto-generated by libsemanage
# Please use the semanage command to make changes

# 

セキュリティコンテキストを修正

# ls -lZ /lib64/libm*
-rwxr-xr-x  root root system_u:object_r:file_t         /lib64/libm-2.5.so
lrwxrwxrwx  root root system_u:object_r:file_t         /lib64/libm.so.6 -> libm-2.5.so
# fixfiles relabel

    Files in the /tmp directory may be labeled incorrectly, this command 
    can remove all files in /tmp.  If you choose to remove files from /tmp, 
    a reboot will be required after completion.
    
    Do you wish to clean out the /tmp directory [N]? 
/sbin/setfiles:  labeling files under /
matchpathcon_filespec_eval:  hash table stats: 151863 elements, 36525/65536 buckets used, longest chain length 23
/sbin/setfiles:  labeling files under /boot
matchpathcon_filespec_eval:  hash table stats: 41 elements, 41/65536 buckets used, longest chain length 1
/sbin/setfiles:  labeling files under /var/lib/libvirt/images
matchpathcon_filespec_eval:  hash table stats: 7 elements, 7/65536 buckets used, longest chain length 1
/sbin/setfiles:  labeling files under /archives
matchpathcon_filespec_eval:  hash table stats: 3919 elements, 1971/65536 buckets used, longest chain length 9
/sbin/setfiles:  Done.
# ls -lZ /lib64/libm*
-rwxr-xr-x  root root system_u:object_r:lib_t          /lib64/libm-2.5.so
lrwxrwxrwx  root root system_u:object_r:lib_t          /lib64/libm.so.6 -> libm-2.5.so
# 

修正完了

根本原因

とりあえず、正常に戻ったはずだが、そもそも何故余計な定義が付いたのかが不明。いろいろ実験した際に定義を追加してしまったのか?暫く様子見とする。

(追伸) そういえば実験でこのファイルのセキュリティコンテキストをいじったことがある、、自分が原因だ。

以上

コメント