Red Hat System Administration II 8.2

Изучение и устранение проблем SELinux

Задачи

После завершения этого раздела вы сможете:

  • использовать утилиты анализа log-файлов SELinux;

  • отображать полезную информацию во время устранения проблем в SELinux с помощью команды sealert.

Устранение проблем SELinux

Важно понимать, какие действия необходимо выполнить, если SELinux запрещает доступ к файлам на сервере, которые должны быть доступны. Следующие действия помогут устранить подобные проблемы.

  1. Перед внесением каких-либо изменений подумайте: возможно, SELinux правильно делает свою работу, блокируя несанкционированный доступ. Попытки веб-сервера получить доступ к файлам в каталоге /home могут указывать на компрометацию службы, если веб-содержимое опубликовано не пользователями. Если доступ все-таки нужен, необходимо выполнить дополнительные действия.

  2. Самая распространенная проблема с SELinux — неправильный контекст файла. Это может происходить, если файл создается в расположении с одним контекстом файла и перемещается в расположение, где ожидается другой контекст. В большинстве случаев выполнение команды restorecon устранит проблему. Такой способ устранения проблем практически не влияет на безопасность остальной части системы.

  3. Еще одно решение проблемы ограниченного доступа — настройка переключателя. Например, переключатель ftpd_anon_write контролирует возможность загрузки файлов на FTP-сервер анонимными пользователями. Включите этот переключатель, чтобы разрешить анонимным пользователям FTP загружать файлы на сервер. При настройке переключателей нужно проявлять особую осторожность, так как они существенно влияют на безопасность системы.

  4. Возможно, в политике SELinux есть ошибка, которая блокирует доступ. Так как SELinux — это зрелая технология, такие ситуации возникают редко. Если очевидно, что в политике ошибка, сообщите о ней в службу поддержки Red Hat.

Отслеживание нарушений SELinux

Установите пакет setroubleshoot-server, чтобы отправлять сообщения SELinux в /var/log/messages. setroubleshoot-server прослушивает сообщения аудита в /var/log/audit/audit.log и отправляет короткую сводку в /var/log/messages. Эта сводка содержит уникальные идентификаторы (UUID) нарушений SELinux, которые можно использовать для получения дополнительных сведений. Команда sealert -l UUID используется для создания отчета об определенном инциденте. Используйте команду sealert -a /var/log/audit/audit.log для создания отчетов обо всех инцидентах в этом файле.

Рассмотрите следующую последовательность команд на стандартном веб-сервере Apache:

[root@host ~]# touch /root/file3
[root@host ~]# mv /root/file3 /var/www/html
[root@host ~]# systemctl start httpd
[root@host ~]# curl http://localhost/file3
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /file3
on this server.</p>
</body></html>

Вы ожидаете, что веб-сервер будет раздавать содержимое файла file3, но вместо этого он возвращает ошибку Permission denied (в разрешении отказано). В файлах /var/log/audit/audit.log и /var/log/messages можно найти дополнительную информацию об этой ошибке.

[root@host ~]# tail /var/log/audit/audit.log
...output omitted...
type=AVC msg=audit(1392944135.482:429): avc:  denied  { getattr } for
  pid=1609 comm="httpd" path="/var/www/html/file3" dev="vda1" ino=8980981
  scontext=system_u:system_r:httpd_t:s0
  tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file
...output omitted...
[root@host ~]# tail /var/log/messages
...output omitted...
Feb 20 19:55:42 host setroubleshoot: SELinux is preventing /usr/sbin/httpd
  from getattr access on the file . For complete SELinux messages. run
  sealert -l 613ca624-248d-48a2-a7d9-d28f5bbe2763

Оба log-файла указывают, что причина проблемы в отказе SELinux. Команда sealert, указанная в выводе в /var/log/messages, предоставляет дополнительную информацию, включая возможное исправление.

[root@host ~]# sealert -l 613ca624-248d-48a2-a7d9-d28f5bbe2763
SELinux is preventing /usr/sbin/httpd from getattr access on the file .

*****  Plugin catchall (100. confidence) suggests   **************************

If you believe that httpd should be allowed getattr access on the
  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:
# grep httpd /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp


Additional Information:
Source Context                system_u:system_r:httpd_t:s0
Target Context                unconfined_u:object_r:admin_home_t:s0
Target Objects                 [ file ]
Source                        httpd
Source Path                   /usr/sbin/httpd
Port                          <Unknown>
Host                          servera
Source RPM Packages           httpd-2.4.6-14.el7.x86_64
Target RPM Packages
Policy RPM                    selinux-policy-3.12.1-124.el7.noarch
Selinux Enabled               True
Policy Type                   targeted
Enforcing Mode                Enforcing
Host Name                     servera
Platform                      Linux servera 3.10.0-84.el7.x86_64 #1
                              SMP Tue Feb 4 16:28:19 EST 2014 x86_64 x86_64
Alert Count                   2
First Seen                    2014-02-20 19:55:35 EST
Last Seen                     2014-02-20 19:55:35 EST
Local ID                      613ca624-248d-48a2-a7d9-d28f5bbe2763

Raw Audit Messages
type=AVC msg=audit(1392944135.482:429): avc:  denied  { getattr } for
  pid=1609 comm="httpd" path="/var/www/html/file3" dev="vda1" ino=8980981
  scontext=system_u:system_r:httpd_t:s0
  tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file

type=SYSCALL msg=audit(1392944135.482:429): arch=x86_64 syscall=lstat
  success=no exit=EACCES a0=7f9fed0edea8 a1=7fff7bffc770 a2=7fff7bffc770
  a3=0 items=0 ppid=1608 pid=1609 auid=4294967295 uid=48 gid=48 euid=48
  suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295
  comm=httpd exe=/usr/sbin/httpd subj=system_u:system_r:httpd_t:s0 key=(null)

Hash: httpd,httpd_t,admin_home_t,file,getattr 

Примечание

В разделе Raw Audit Messages указан целевой файл, который вызывает проблему — /var/www/html/file3. Кроме того, не похоже, чтобы целевой контекст tcontext принадлежал веб-серверу. Используйте команду restorecon /var/www/html/file3 для исправления контекста файла. Если необходимо изменить и другие файлы, команда restorecon может рекурсивно сбросить контекст: restorecon -R /var/www/.

Раздел Raw Audit Messages команды sealert содержит информацию из файла /var/log/audit.log. Для поиска в файле /var/log/audit.log используйте команду ausearch. Опция -m выполняет поиск по типу сообщения. Опция -ts выполняет поиск по времени.

[root@host ~]# ausearch -m AVC -ts recent
----
time->Tue Apr  9 13:13:07 2019
type=PROCTITLE msg=audit(1554808387.778:4002): proctitle=2F7573722F7362696E2F6874747064002D44464F524547524F554E44
type=SYSCALL msg=audit(1554808387.778:4002): arch=c000003e syscall=49 success=no exit=-13 a0=3 a1=55620b8c9280 a2=10 a3=7ffed967661c items=0 ppid=1 pid=9340 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1554808387.778:4002): avc:  denied  { name_bind } for  pid=9340 comm="httpd" src=82 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:reserved_port_t:s0 tclass=tcp_socket permissive=0

Веб-консоль

Если веб-консоль установлена, ее также можно использовать для устранения проблем SELinux. Войдите на веб-консоль и выберите SELinux в меню слева. В окне SELinux Policy указано текущее состояние принудительного режима. Все проблемы подробно описаны в разделе SELinux Access Control Errors.

Рисунок 5.3: Окно SELinux Policy на веб-консоли

Щелкните символ >, чтобы просмотреть сведения об ошибке. Щелкните ссылку solution details, чтобы отобразить все сведения и возможное решение.

Рисунок 5.4: Решение SELinux Policy на веб-консоли

Как только проблема будет решена, в разделе SELinux Access Control Errors больше не будет отображаться ошибка. Если отображается сообщение No SELinux alerts, значит, все проблемы были устранены.

Рисунок 5.5: Сообщение No SELinux Alerts на веб-консоли

Ссылки

Man-страница (8)sealert