Настройка SELinux
Файл конфигурации находится /etc/selinux/config. В нём находится короткая исчерпывающая информация по настройке.
Чтобы включить SELinux на всю катушку, как говорится, то надо поставть его в режим enforcing. Чтобы включить, но в щадящем режиме, то — permissive. Таким образом SELinux будет работать, но выдавать сообщения в логах типа warning, что поможет его настроить для боевого режима (для enforcing). disabled понятно — полное открючение. Провеить статус работы можно командой getenforce. Расширенная информация — sestatus. Например, вот мой вывод расширенной информации:
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31
#Настройка
Чтобы настроить SELinux, надо перевести его в режим enforcing. Далее в зависимости от выполнения каких-либо действий (запуска какого-либо сервиса, например, httpd), надо смотреть в логи через journalctl и искать ключевое слово SELinux. Но это видимо надо настраивать как-то отдельно, у меня так не получилось. Поэтому вариант 2. Ставится утилита sealert
yum install setroubleshoot
Если что-то не будет рабоать, то можно проверить/установить вот эти модули: policycoreutils-python-utils and setroubleshoot-server.
И можно вот так посмотреть логи:
sealert -a /var/log/audit/audit.log
Вот пример вывода:
If you believe that sshd should be allowed name_bind access on the port 6623 tcp_socket by default. Then you should report this as a bug. You can generate a local policy module to allow this access. Do allow this access for now by executing: # ausearch -c 'sshd' --raw | audit2allow -M my-sshd # semodule -i my-sshd.pp
Я пытался перевести SSH на нестандартный порт 6623 и SELinux подсказывает, что для этого надо сделать, чтобы всё работало корректно, когда будет включен боевой режим enforcing. Выполняю первую рекомендованную команду:
ausearch -c 'sshd' --raw | audit2allow -M my-sshd
После её выподнению будет сформирована два файла: my-sshd.pp и my-sshd.te, о чём будет написано по выполниею команды. Если сделать cat my-sshd.te, то можно посмотреть содержимое модуля, который надо применить. Устанаваливаю модуль:
semodule -i my-sshd.pp
Выполняется не мгновенно даже на относительно шустрых машинах/вируталках.
Если при вводе команды:
sealert -a /var/log/audit/audit.log
возникет ошибка:
24% donetype=AVC msg=audit(1230770997.264:75): avc: denied { name_bind } for pid=1002 comm="sshd" src=6623 scontext=system_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:unreserved_port_t:s0 tclass=tcp_socket permissive=1 **** Invalid AVC allowed in current policy *** 42% doneTraceback (most recent call last): File "/usr/lib64/python2.7/site-packages/setroubleshoot/analyze.py", line 676, in task self.new_audit_record_handler(record_type, event_id, body_text, fields, line_number) File "/usr/lib64/python2.7/site-packages/setroubleshoot/analyze.py", line 701, in new_audit_record_handler self.avc_event_handler(audit_event) File "/usr/lib64/python2.7/site-packages/setroubleshoot/analyze.py", line 689, in avc_event_handler self.analyzer.analyze_avc(avc, self.report_receiver, False) File "/usr/lib64/python2.7/site-packages/setroubleshoot/analyze.py", line 154, in analyze_avc avc.update() File "/usr/lib64/python2.7/site-packages/setroubleshoot/audit_data.py", line 740, in update self.derive_environmental_info() File "/usr/lib64/python2.7/site-packages/setroubleshoot/audit_data.py", line 1008, in derive_environmental_info rpm = get_rpm_nvr_by_file_path(self.tpath) File "/usr/lib64/python2.7/site-packages/setroubleshoot/util.py", line 337, in get_rpm_nvr_by_file_path return get_rpm_nvr_by_file_path_temporary(path) File "/usr/lib64/python2.7/site-packages/setroubleshoot/util.py", line 300, in get_rpm_nvr_by_file_path_temporary if not os.path.exists(name): File "/usr/lib64/python2.7/genericpath.py", line 18, in exists os.stat(path) TypeError: must be encoded string without NULL bytes, not str
которая практически никак не гуглится, то у меня нашлось решение. Надо выполнить:
sealert -l "*"
Пример вывода (часть):
If you believe that chmod should be allowed setattr access on the iptables.save file by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# ausearch -c ‘chmod’ —raw | audit2allow -M my-chmod
# semodule -i my-chmod.pp
После применения команд, можно выполнить очистку кэша по ошибка selinux:
rm -f /var/lib/setroubleshoot/setroubleshoot.xml или rm -rf /var/lib/setroubleshoot/setroubleshoot_database.xml
В моём случае был файл setroubleshoot_database.xml.
Использованный метериал — https://docs.fedoraproject.org/en-US/quick-docs/troubleshooting_selinux/