После завершения этого раздела вы сможете:
использовать утилиты анализа log-файлов SELinux;
отображать полезную информацию во время устранения проблем в SELinux с помощью команды sealert.
Важно понимать, какие действия необходимо выполнить, если SELinux запрещает доступ к файлам на сервере, которые должны быть доступны. Следующие действия помогут устранить подобные проблемы.
Перед внесением каких-либо изменений подумайте: возможно, SELinux правильно делает свою работу, блокируя несанкционированный доступ. Попытки веб-сервера получить доступ к файлам в каталоге /home могут указывать на компрометацию службы, если веб-содержимое опубликовано не пользователями. Если доступ все-таки нужен, необходимо выполнить дополнительные действия.
/home
Самая распространенная проблема с SELinux — неправильный контекст файла. Это может происходить, если файл создается в расположении с одним контекстом файла и перемещается в расположение, где ожидается другой контекст. В большинстве случаев выполнение команды restorecon устранит проблему. Такой способ устранения проблем практически не влияет на безопасность остальной части системы.
Еще одно решение проблемы ограниченного доступа — настройка переключателя. Например, переключатель ftpd_anon_write контролирует возможность загрузки файлов на FTP-сервер анонимными пользователями. Включите этот переключатель, чтобы разрешить анонимным пользователям FTP загружать файлы на сервер. При настройке переключателей нужно проявлять особую осторожность, так как они существенно влияют на безопасность системы.
ftpd_anon_write
Возможно, в политике SELinux есть ошибка, которая блокирует доступ. Так как SELinux — это зрелая технология, такие ситуации возникают редко. Если очевидно, что в политике ошибка, сообщите о ней в службу поддержки Red Hat.
Установите пакет 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 для создания отчетов обо всех инцидентах в этом файле.
/var/log/messages
/var/log/audit/audit.log
UUID
Рассмотрите следующую последовательность команд на стандартном веб-сервере 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>
[root@host ~]#
touch /root/file3
mv /root/file3 /var/www/html
systemctl start httpd
curl http://localhost/file3
Вы ожидаете, что веб-сервер будет раздавать содержимое файла file3, но вместо этого он возвращает ошибку Permission denied (в разрешении отказано). В файлах /var/log/audit/audit.log и /var/log/messages можно найти дополнительную информацию об этой ошибке.
file3
Permission denied
[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
tail /var/log/audit/audit.log
tail /var/log/messages
Оба 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
sealert -l 613ca624-248d-48a2-a7d9-d28f5bbe2763
В разделе Raw Audit Messages указан целевой файл, который вызывает проблему — /var/www/html/file3. Кроме того, не похоже, чтобы целевой контекст tcontext принадлежал веб-серверу. Используйте команду restorecon /var/www/html/file3 для исправления контекста файла. Если необходимо изменить и другие файлы, команда restorecon может рекурсивно сбросить контекст: restorecon -R /var/www/.
Raw Audit Messages
/var/www/html/file3
tcontext
Раздел Raw Audit Messages команды sealert содержит информацию из файла /var/log/audit.log. Для поиска в файле /var/log/audit.log используйте команду ausearch. Опция -m выполняет поиск по типу сообщения. Опция -ts выполняет поиск по времени.
/var/log/audit.log
-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
ausearch -m AVC -ts recent
SYSCALL msg=audit
httpd
httpd_t
AVC msg=audit
denied
comm="httpd" src=82 scontext=system_u:system_r:httpd_t:s0
Если веб-консоль установлена, ее также можно использовать для устранения проблем SELinux. Войдите на веб-консоль и выберите SELinux в меню слева. В окне SELinux Policy указано текущее состояние принудительного режима. Все проблемы подробно описаны в разделе SELinux Access Control Errors.
Щелкните символ >, чтобы просмотреть сведения об ошибке. Щелкните ссылку solution details, чтобы отобразить все сведения и возможное решение.
Как только проблема будет решена, в разделе SELinux Access Control Errors больше не будет отображаться ошибка. Если отображается сообщение No SELinux alerts, значит, все проблемы были устранены.
No SELinux alerts
Man-страница (8)sealert