Миграция от nagios до icinga очень легка. Просто необходимо изменить 2 опции в icinga.conf и перезапуске с nagios файлами конфигурации, и все прекрасно. Миграция кактусов также легка, но не настолько легкий интегрировать ее приятно в webgui, pnp4nagios является предпочтительным решением icinga команды, и это интегрируется в webgui.
Перевести вторая строка предоставленного вами журнала:
Процесс rotatelogs с PID 64617 попытался выполнить поиск в домашнем каталоге , который находится на устройстве md2 и на индексе 7208961. Доступ был отказано.
Контекст безопасности процесса rotatelogs :
unlimited_u: system_r: httpd_rotatelogs_t: s0
Контекст безопасности домашнего каталога :
system_u: object_r: home_root_t: s0
Вам необходимо разрешить rotatelogs читать домашний каталог. Разрешить httpd сделать это достаточно просто ( setsebool -P httpd_enable_homedirs = 1
), но, к сожалению, rotatelogs не наследует свой тип от httpd. Что еще хуже, для rotatelogs нет параметра setsebool.
И это еще не все! Вам также необходимо разрешить rotatelogs выполнять поиск вплоть до нужного каталога, а также позволить ему выполнять все операции, необходимые для его задачи - как с самими файлами, так и с каталогами, которые их содержат.
Короче говоря. , вам необходимо написать локальную политику.
Создайте где угодно файл принудительного применения типа с именем homelogs.te
со следующим содержимым:
module homelogs 1.0;
require {
type httpd_rotatelogs_t;
type home_root_t;
type user_home_t;
type user_home_dir_t;
class dir { add_name getattr open read remove_name search write };
class file { create getattr open read rename unlink write };
}
#============= httpd_rotatelogs_t =============
allow httpd_rotatelogs_t home_root_t:dir search;
allow httpd_rotatelogs_t user_home_dir_t:dir search;
allow httpd_rotatelogs_t user_home_t:dir { add_name getattr open read remove_name search write };
allow httpd_rotatelogs_t user_home_t:file { create getattr open read rename unlink write };
Теперь скомпилируйте его :
make -f / usr / share / selinux / devel / Makefile homelogs.pp
И установите его:
semodule -i homelogs.pp
Теперь rotatelogs должны иметь все разрешения, необходимые для выполнения своей задачи. в подкаталогах домов пользователей.
Это для тех, кто хочет получить более подробную информацию о том, как я написал локальную политику. У вас есть две возможности для написания политики.
Если вы совершенно новичок в написании локальных политик, один из вариантов - использовать
Инструмент audit2allow
, входящий в состав пакета policycoreutils-python
, чтобы помочь вам написать его.
Чтобы исправить отклонения разрешений SELinux при запуске rotatelogs, вы можете запустить команду
grep rotatelogs /var/log/audit/audit.log | audit2allow -M homelogs
для загрузите журналы аудита, которые включают «ротационные журналы», в audit2allow
. Инструмент автоматически проанализирует отказы в разрешении SELinux и создаст файл принудительного применения типа, а также файл скомпилированного пакета политик ( .pp
). В этот момент вы можете просто установить созданный пакет политик, запустив:
semodule -i homelogs.pp
И точно так же вы устранили все проблемы SELinux, связанные с ротацией журналов ... верно?
Проблема с этим подходом заключается в том, что audit2allow
не может предсказать, какие разрешения необходимы; он может только проанализировать, в каких разрешениях уже было отказано.
Пока обнаружен только отказ в поиске в домашнем каталоге (буквально / home
), поэтому audit2allow
исправит только это. Подумайте, сколько раз вам придется повторно запускать инструмент каждый раз, когда вам будет отказано в следующем разрешении. И в зависимости от конфигурации rotatelogs может потребоваться несколько недель для отказа и регистрации определенного разрешения. Например, сколько времени потребуется ротации журналов, чтобы попытаться удалить старый файл журнала и получить отказ в разрешении на отключение?
Майкл Хэмптон указал в комментариях, что эту проблему можно решить, переведя SELinux в разрешающий режим:
setenforce 0
] В этом режиме SELinux будет предупреждать и регистрировать действия, но не применяет политику. Это позволяет rotatelogs выполнять все свои задачи, в то время как SELinux по-прежнему регистрирует все отказы в разрешениях. Затем можно запустить audit2allow
в журнале аудита, установить автоматически созданную политику, setenforce 1
, чтобы вернуться в принудительный режим, и все будет готово.
Не зная ранее, что разрешающий режим можно использовать таким образом, я написал локальную политику вручную, как описано ниже. Нет необходимости делать это вручную, но, надеюсь, чтение будет в некоторой степени образовательным.
Имея некоторое представление о файле Type Enforcement, вы можете решить проблемы с разрешениями до того, как они возникнут, написав его вручную. Я создал файл Type Enforcement (с расширением .te
). Не имеет значения, где находится файл принудительного применения типов.
В файле принудительного применения типов есть три раздела.
module homelogs 1.0;
В разделе модуля перечислены имя и версия модуля, который вы будете создавать с помощью своей локальной политики. Имя должно быть уникальным, иначе вы замените уже существующий модуль с таким же именем. Вы можете проверить имена установленных модулей с помощью semodule -l
.
require {
type httpd_rotatelogs_t;
type home_root_t;
type user_home_t;
type user_home_dir_t;
class dir { add_name getattr open read remove_name search write };
class file { create getattr open read rename unlink write };
}
Как упоминалось здесь :
Этот [раздел] информирует загрузчик политики, который типы, классы и роли требуются в системной политике перед установкой этого модуля. Если какое-либо из этих полей не определено, команда semodule завершится ошибкой.
В вашей ситуации ротационные журналы будут взаимодействовать с несколькими типами . После запуска ls -Z
в исполняемом файле rotatelogs и в каталогах желаемого пути я обнаружил, что потребуются следующие типы:
httpd_rotatelogs_t
home_root_t
user_home_t
user_home_dir_t
Вам также необходимо взаимодействовать с некоторыми классами . Полный список классов и их прав доступа здесь . В вашей ситуации мы будем работать только с файлом классов
и каталогом классов
. Вы также должны указать разрешения каждого класса, с которым вы будете взаимодействовать. Основываясь на полном списке, я решил требовать эти классы и разрешения (пара, вероятно, не обязательна, но я допустил ошибку):
class dir:
add_name
- Добавить файл в каталог getattr
- Получить атрибуты файла для файла, такие как режим доступа. (например, stat, некоторые ioctls. ... ) открыть
- Открыть каталог прочитать
- Прочитать содержимое файла remove_name
- Удалить файл из каталога поиск
- Доступ для поиска write
- Общий доступ на запись; требуется для добавления или удаления файла класса :
create
- getattr
- Получить атрибуты файла для файла, например режим доступа. (например, stat, некоторые ioctls. ...) open
- Открыть файл читать
- Прочитать содержимое файла переименовать
- Переименовать файл unlink
] - Удалить жесткую ссылку (удалить) написать
- Записать в файл allow httpd_rotatelogs_t home_root_t:dir search;
allow httpd_rotatelogs_t user_home_dir_t:dir search;
allow httpd_rotatelogs_t user_home_t:dir { add_name getattr open read remove_name search write };
allow httpd_rotatelogs_t user_home_t:file { create getattr open read rename unlink write };
Раздел rules читается довольно легко. Например:
разрешить httpd_rotatelogs_t user_home_t: dir {add_name getattr open read remove_name search write};
примерно означает:
Разрешить командам с типом httpd_rotatelogs_t для выполнения операций add_name, geattr, открытия, чтения, удаления_имя, поиска и записи в каталогах с типом user_home_t.
Обратите внимание, что для каждого класса требуется отдельное правило, поскольку разные классы будут иметь разные разрешения, связанные с ними.
Это избыточно, но я упомяну его еще раз. Вам необходимо скомпилировать файл Type Enforcement в пакет политик. При запуске make
файл принудительного применения типов должен находиться в вашем текущем рабочем каталоге.
make -f / usr / share / selinux / devel / Makefile homelogs.pp
Наконец, установите политику Пакет как модуль:
semodule -i homelogs.pp
Полезные ресурсы по написанию настраиваемых политик:
Не смог добавить комментарий в отличном ответе выше, поэтому мне придется добавить новый "ответ":
Если вы не можете скомпилировать свежеприготовленный модуль из-за отсутствия файла /usr/share/selinux/devel/Makefile
, обязательно установите пакет selinux-policy-devel
:
yum установите selinux-policy-devel
Теперь этот файл будет существовать, а вы можете продолжить с остальным.