SELinux

Настройка 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/

Добавить комментарий