
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
rw
Nagiosサービスが停止して起動すると、このディレクトリの内容が削除され、再作成されます。私が見たすべての情報によれば、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について知りません。