CentOS 7サーバーの1つで、Sudo
ユーザー(Nagiosデーモンのリモート監視)からnrpe
を実行できません。
エラーメッセージ:
Dec 31 08:28:10 ip-172-31-36-176 Sudo: pam_unix(Sudo:session): session opened for user root by (uid=0)
Dec 31 08:28:10 ip-172-31-36-176 Sudo: nrpe : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/bin/check_pm2 -A
Dec 31 08:28:10 ip-172-31-36-176 Sudo: pam_systemd(Sudo:session): Failed to connect to system bus: Permission denied
もちろん、nrpe
はsudoersファイルにあります:
Defaults:nrpe !requiretty
nrpe ALL = (root) NOPASSWD: /usr/local/bin/pm2_check_pm2
/ usr/local/bin/pm2_check_pm2の内容:
#!/bin/bash
Sudo -u pm2 check_pm2 -A
(pm2はここでは特権のないユーザーです、Sudo check_pm2 -A
にも同じ問題があります)。
setenforce 0
は問題を解決します。他のサーバーでも同じ構成で問題なく動作します。
semanage export
出力:
boolean -D
login -D
interface -D
user -D
port -D
node -D
fcontext -D
module -D
boolean -m -1 httpd_can_network_connect
boolean -m -1 httpd_can_network_memcache
boolean -m -1 httpd_can_sendmail
boolean -m -1 nagios_run_Sudo
fcontext -a -f a -t cert_t '/etc/(letsencrypt|certbot)/(live|archive)(/.*)?'
ll -Z /var/run/dbus/system_bus_socket
出力:
srw-rw-rw-. root root system_u:object_r:system_dbusd_var_run_t:s0 /var/run/dbus/system_bus_socket
OS:CentOS 7.6、最新のアップデート。 selinux *とdbus *を再インストールしても解決しませんでした。
お知らせ下さい。
最終的に次のモジュールコードで修正されました:
module nrpe 1.0;
require {
type mongod_t;
type nrpe_t;
type proc_net_t;
type initrc_var_run_t;
type system_dbusd_t;
type user_home_t;
type user_home_dir_t;
type admin_home_t;
type systemd_logind_t;
type unconfined_t;
class capability { dac_override dac_read_search };
class process execmem;
class file { read open write lock };
class unix_stream_socket connectto;
class dir {open read search};
class sock_file { getattr write };
class dbus send_msg;
class unix_stream_socket connectto;
}
#============= mongod_t ==============
allow mongod_t proc_net_t:file { open read };
#============= nrpe_t ==============
allow nrpe_t user_home_t:dir search;
allow nrpe_t user_home_dir_t:dir search;
allow nrpe_t system_dbusd_t:unix_stream_socket connectto;
allow nrpe_t initrc_var_run_t:file read;
allow nrpe_t self:capability { dac_override dac_read_search };
allow nrpe_t self:process execmem;
allow nrpe_t admin_home_t:file { read open };
allow nrpe_t admin_home_t:sock_file { getattr write };
allow nrpe_t initrc_var_run_t:file open;
allow nrpe_t system_dbusd_t:dbus send_msg;
allow nrpe_t initrc_var_run_t:file lock;
allow nrpe_t systemd_logind_t:dbus send_msg;
allow nrpe_t user_home_t:file { open read };
allow nrpe_t user_home_t:sock_file { getattr write };
allow systemd_logind_t nrpe_t:dbus send_msg;
allow nrpe_t unconfined_t:unix_stream_socket connectto;
私のセットアップでは、「mongod_t proc_net_t:file」がnrpeチェックタイムアウトなしで続行する必要がありましたが、理由は不明です。