SELinuxがApacheが/usr/local/nagios/var/rw/nagios.cmdにアクセスするのを防ぐことはできません。

SELinuxがApacheが/usr/local/nagios/var/rw/nagios.cmdにアクセスするのを防ぐことはできません。

UAT環境にNagios Core 4.3.4およびApache 2.4.6を実行するCentos 7サーバーがあります。同じAnsibleプレイブックを使用して設定された2番目のサーバーがPRODにあります。 Nagiosはソースコードで構築されています。 UATサーバーはNagiosコマンドを使用しようとするとこのメッセージを表示しますError: Could not stat() command file '/usr/local/nagios/var/rw/nagios.cmd'!が、PRODサーバーはそうではありません。以下に提供するすべての構成のリストは、UATとPRODサーバー間で同じです。

SELinuxでエラーが発生したことを確認しました。監査ログの出力は次のとおりです。

type=AVC msg=audit(1525250190.011:1114376): avc: 拒否 { getattr } for pid=12182 comm="cmd.cgi" path="/usr/local/nagios/var/rw/nagios.cmd" dev= " dm-0" ino=201456984 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:httpd_sys_rw_content_t:s0 tclass=fifo_file

以下は関連ディレクトリのリストです。

$ ls -Z /usr/local/nagios/var
drwxrwxr-x. nagios nagios unconfined_u:object_r:usr_t:s0   archives
-rw-r--r--. nagios users  system_u:object_r:usr_t:s0       nagios.configtest
-rw-r--r--. nagios nagios system_u:object_r:usr_t:s0       nagios.log
-rw-r--r--. nagios nagios system_u:object_r:usr_t:s0       objects.cache
-rw-r--r--. nagios nagios system_u:object_r:usr_t:s0       objects.precache
-rw-------. nagios nagios system_u:object_r:usr_t:s0       retention.dat
drwxrwsr-x. nagios nagcmd unconfined_u:object_r:httpd_sys_rw_content_t:s0 rw
drwxr-xr-x. root   root   unconfined_u:object_r:usr_t:s0   spool
-rw-rw-r--. nagios nagios system_u:object_r:usr_t:s0       status.dat

$ ls -Z /usr/local/nagios/var/rw
prw-rw----. nagios nagcmd system_u:object_r:httpd_sys_rw_content_t:s0 nagios.cmd
srw-rw----. nagios nagcmd system_u:object_r:httpd_sys_rw_content_t:s0 nagios.qh

rwNagiosサービスが停止して起動すると、このディレクトリの内容が削除され、再作成されます。私が見たすべての情報によれば、httpd_sys_rw_content_tそのタイプをディレクトリに適用すると正しく機能します。 PRODサーバーでは機能しますが、UATサーバーでは機能しません。私が理解したのは、次のコマンドが機能していることを確認する必要があります。

$ sudo sesearch --allow --source httpd_t --target httpd_sys_rw_content_t --class file
Found 6 semantic av rules:
   allow httpd_t httpd_content_type : file { ioctl read getattr lock open } ; 
   allow httpd_t httpd_sys_rw_content_t : file { ioctl read write create getattr setattr lock append unlink link rename open } ; 
   allow httpd_t httpd_sys_rw_content_t : file { ioctl read write create getattr setattr lock append unlink link rename open } ; 
   allow httpd_t httpdcontent : file { ioctl read write create getattr setattr lock append unlink link rename open } ; 
   allow httpd_t httpdcontent : file { read getattr execute open } ; 
   allow httpd_t httpd_content_type : file { ioctl read getattr lock open } ; 

ベストアンサー1

私の解決策は完全に満足していませんが、うまくいきました。私はaudit2allowカスタムポリシーを作成したことがあります(すべての正しい権限を許可するには、このポリシーを3回実行する必要がありました)。

$ sudo grep nagios.cmd /var/log/audit/audit.log | tail -3 | sudo audit2allow -M httpdnagioscmd
$ sudo semodule -i httpdnagioscmd.pp

これはファイルクラスに関連しているかもしれませんが、fifo_file実際にはfile根本的な原因を特定するのに十分なSELinuxについて知りません。

おすすめ記事