Как создать исключение SELinux для отдельных файлов

Я не уверен, что вы ищете, но вы можете создавать простые службы, используя socat , чтобы прослушивать порт и получать он запускает сценарий оболочки, например, для каждого соединения. Вы можете ограничить максимальное количество одновременных подключений. Например, создайте сценарий bash ./ myscript с удержанием:

#!/bin/bash
read message
echo "hello. got $message"
sleep 10
echo "bye"

Затем запустите socat на порту 10005 с макс 2 дочерними элементами, чтобы запустить сценарий:

socat TCP4-LISTEN:10005,reuseaddr,fork,max-children=2 SYSTEM:./myscript

Теперь вы можете подключиться к этому порту используя любой сетевой инструмент, который вам нравится, и взаимодействуйте со скриптом.Используя встроенную функцию bash / dev / tcp / для подключения к порту, будет достаточно следующего:

(echo "$(date) my message"; cat -n >&2) <>/dev/tcp/localhost/10005 >&0 &

Если вы введете эту команду несколько раз, только 2 будут выполнены, а остальные будут поставлены в очередь. Типичный вывод будет

1  hello. got Wed May 11 17:33:19 CEST 2016 my message
2  bye
4
28.10.2015, 20:37
1 ответ

Я вижу, вы используете NRPE, удаленный исполняющий модуль Nagios. Правильный способ сделать это — вызвать NRPE через sudo и сообщить SELinux, что NRPE разрешено вызывать sudo.

Убедитесь, что вы разрешили пользователю nrpeв sudo config, например. делая:

» 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
0
23.06.2020, 09:50

Теги

Похожие вопросы