監視ツールを使用してリモートで確認する限り、システムはsystemctlを実行してサービスの状態を確認するスクリプトを呼び出します。 SELinuxを許可モードにするまでは機能しませんでした。ただし、システムを許可モードに切り替えることはできません。例外には semanage を使用し、システムを強制状態に戻す必要があります。以前はプロセスに semanage を使用していましたが、ファイルに使用したことはありません。マニュアルページを見てインターネット検索をしてみましたが、使用しなければならない正確なコマンドを把握できないようです。 /usr/lib64/application/pluginフォルダに "run_this_script"というスクリプトを許可する必要があるとします。 semanageで使用するコマンドは何ですか?
編集 - 監査ログに表示されている内容についてより多くのコンテキストを提供するために、ここにスニペットがあります。
type=AVC msg=audit(1446051455.169:3313): avc: denied { execute } for pid=15388 comm="check_init_serv" name="systemctl" dev="dm-1" ino=2101040 scontext=system_u:system_r:nrpe_t:s0 tcontext=system_u:object_r:systemd_systemctl_exec_t:s0 tclass=file
type=SYSCALL msg=audit(1446051455.169:3313): arch=c000003e syscall=59 success=no exit=-13 a0=2098450 a1=209ba50 a2=209c680 a3=7fff573ff5b0 items=0 ppid=15386 pid=15388 auid=4294967295 uid=997 gid=995 euid=997 suid=997 fsuid=997 egid=995 sgid=995 fsgid=995 tty= (none) ses=4294967295 comm="check_init_serv" exe="/usr/bin/bash" subj=system_u:system_r:nrpe_t:s0 key=(null)
type=AVC msg=audit(1446051455.169:3314): avc: denied { getattr } for pid=15388 comm="check_init_serv" path="/usr/bin/systemctl" dev="dm-1" ino=2101040 scontext=system_u:system_r:nrpe_t:s0 tcontext=system_u:object_r:systemd_systemctl_exec_t:s0 tclass=file
type=SYSCALL msg=audit(1446051455.169:3314): arch=c000003e syscall=4 success=no exit=-13 a0=2098450 a1=7fff573ff780 a2=7fff573ff780 a3=7fff573ff5b0 items=0 ppid=15386 pid=15388 auid=4294967295 uid=997 gid=995 euid=997 suid=997 fsuid=997 egid=995 sgid=995 fsgid=995 tty=(none) ses=4294967295 comm="check_init_serv" exe="/usr/bin/bash" subj=system_u:system_r:nrpe_t:s0 key=(null)
type=AVC msg=audit(1446051455.169:3315): avc: denied { getattr } for pid=15388 comm="check_init_serv" path="/usr/bin/systemctl" dev="dm-1" ino=2101040 scontext=system_u:system_r:nrpe_t:s0 tcontext=system_u:object_r:systemd_systemctl_exec_t:s0 tclass=file
type=SYSCALL msg=audit(1446051455.169:3315): arch=c000003e syscall=4 success=no exit=-13 a0=2098450 a1=7fff573ff760 a2=7fff573ff760 a3=7fff573ff5b0 items=0 ppid=15386 pid=15388 auid=4294967295 uid=997 gid=995 euid=997 suid=997 fsuid=997 egid=995 sgid=995 fsgid=995 tty=(none) ses=4294967295 comm="check_init_serv" exe="/usr/bin/bash" subj=system_u:system_r:nrpe_t:s0 key=(null)
type=AVC msg=audit(1446053257.457:3401): avc: denied { read } for pid=15647 comm="systemctl" name="journal" dev="tmpfs" ino=11584 scontext=system_u:system_r:nrpe_t:s0 tcontext=system_u:object_r:syslogd_var_run_t:s0 tclass=dir
答え1
テストされていませんが...
以下を使用して必要な名前をaudit2allow -a
見つけます。
- 戦略パッケージを有効にする:
semodule -i <module_name>.pp
- ロードされたモジュールを確認してください。
semanage module -l | grep <module_name>
- その後、実行に戻ります。
setenforce 1
答え2
NagiosリモートプラグインランチャーであるNRPEを使用しています。正しいアプローチは、sudoを介してNRPEを呼び出し、NRPEがsudoを呼び出すようにSELinuxに指示することです。
ユーザーがnrpe
sudo設定を許可されていることを確認してください。たとえば、次のようになります。
» cat /etc/sudoers.d/nrpe
Defaults:nrpe !requiretty
nrpe ALL = (root) NOPASSWD: /sbin/service <whatever> status
my_service
実際のサービス名に置き換えてスキャンを定義します。
» cat /etc/nrpe.d/nrpe_custom_checks.cfg
command[check_my_service]=/usr/lib64/nagios/plugins/check_service_status_sudo my_service
以下は確認スクリプトです。
0» cat /usr/lib64/nagios/plugins/check_service_status_sudo
#!/usr/bin/env bash
# Don't use -e, since we expect commands to fail
set -uo pipefail
OK=0
WARN=1
CRIT=2
UNKNOWN=3
STATE=${UNKNOWN}
MSG=""
if [[ $# -ne 1 ]]; then
echo "UNKNOWN - $0 needs one argument. Aborting."
exit ${UNKNOWN}
fi
SERVICENAME="$1"
OUTPUT=$(/usr/bin/sudo /sbin/service ${SERVICENAME} status 2>&1)
ES=$?
if [[ $ES -eq 0 ]]; then
STATE=${OK}
MSG="OK"
elif [[ $ES -eq 1 ]]; then
# either not running or unrecognized service
if echo "${OUTPUT}" | grep -q "unrecognized service"; then
STATE=${WARN}
MSG="WARNING"
else
STATE=${CRIT}
MSG="CRITICAL"
fi
fi
echo "${MSG} - ${OUTPUT}";
exit ${STATE}
あなた可能このSELinuxブールはユースケースに合わせて設定する必要があります。
» setsebool -P nagios_run_sudo on