Я пытаюсь настроить SELinux на веб-сервере Red Hat Enterprise Linux 6.2, который запускает Apache 2.2.15 и Perl 5.10.1 и подключается к удаленным базам данных Oracle. Клиент Oracle 11.2g установлен. Скрипты PHP, которые обращаются к Oracle, работают, а скрипты Perl - нет. Когда SELinux работает, и я пытаюсь получить доступ к сценариям Perl через свой веб-браузер, в журналах ошибок Apache отображается следующее сообщение:
Can't load '/usr/local/lib64/perl5/auto/DBD/Oracle/Oracle.so' for module DBD::Oracle: libclntsh.so.11.1: cannot open shared object file: No such file or directory at /usr/lib64/perl5/DynaLoader.pm line 200.
Как ни странно, журнал аудита не записывает никаких соответствующих сообщений. Однако, когда я запускаю SELinux в разрешающий режим, Perl-скрипт работает отлично.
Это результат ls -lZ на libclntsh.so.11.1:
-rwxr-xr-x. oracle oracle system_u:object_r:textrel_shlib_t:s0 /path/to/oracle/product/11.2.0/client/lib/libclntsh.so.11.1
Есть ли у кого-нибудь предложения по исправлению этого? Я хотел бы иметь возможность запускать веб-сервер с помощью SELinux.
ОБНОВИТЬ: После установки selinux на dontaudit я получил больше результатов в audit.log. Однако модуль, который я создал с помощью audit2allow, не устанавливается. Выход semodule -i
является: semodule: Failed on cgi_oracle!
cgi_oracle.te
содержит:
module cgi_oracle 1.0;
require {
type httpd_log_t;
type httpd_t;
type httpd_sys_script_t;
class process { siginh noatsecure rlimitinh };
class file { read write };
}
#============= httpd_sys_script_t ==============
allow httpd_sys_script_t httpd_log_t:file { read write };
#============= httpd_t ==============
allow httpd_t httpd_sys_script_t:process { siginh rlimitinh noatsecure };
Отмечен ряд политик SELinux. dontaudit
так, что они не оставлять сообщения в журнале аудита. Обычно это происходит потому, что это политики, которые просто спамят журнал бесполезными записями, но иногда разработчики dontaudit
отрицание, а не устранение основной проблемы. Политика, которую вы используете, почти наверняка входит в их число, так как вы не видите никаких сообщений, когда вы авторизуетесь. audit.log
.
Вы можете временно отключить dontaudit
запустив:
semodule -DB
После того, как вы обнаружили причину проблемы, снова включите dontaudit
с участием:
semodule -B
Чтобы создать свою политику после ее создания, запустите:
make -f /usr/share/selinux/devel/Makefile
Вы также можете попробовать setroubleshoot ... он также подскажет, что ограничивается, и команды для решения проблемы. В большинстве случаев все, что вам нужно сделать, это скопировать и вставить именно то, что указано.
yum install -y setroubleshoot
затем
grep setrouble /var/log/messages
Например:
Aug 6 12:36:11 cnt3 setroubleshoot: [avc.ERROR] Plugin Exception catchall_boolean #012Traceback (most recent call last):#012 File "/usr/lib/python2.6/site-packages/setroubleshoot/analyze.py", line 191, in analyze_avc#012 report = plugin.analyze(avc)#012 File "/usr/share/setroubleshoot/plugins/catchall_boolean.py", line 90, in analyze#012 man_page = self.check_for_man(b)#012 File "/usr/share/setroubleshoot/plugins/catchall_boolean.py", line 76, in check_for_man#012 man_page = name.split("_")[0] + "_selinux"#012AttributeError: 'tuple' object has no attribute 'split'
Aug 6 12:36:11 cnt3 setroubleshoot: SELinux is preventing /usr/libexec/gdm-session-worker from read access on the directory /root. For complete SELinux messages. run sealert -l 721b07e3-e0e2-4a0e-a676-8eb622f7ce01
sealert -l 721b07e3-e0e2-4a0e-a676-8eb622f7ce01
sealert -l 721b07e3-e0e2-4a0e-a676-8eb622f7ce01
SELinux is preventing /usr/libexec/gdm-session-worker from read access on the directory /root.
***** Plugin catchall (100. confidence) suggests ***************************
Если вы считаете, что gdm-session-worker должен иметь доступ для чтения в корневом каталоге по умолчанию. Тогда вы должны сообщить об этом как об ошибке. Вы можете создать модуль локальной политики, чтобы разрешить этот доступ. Разрешите этот доступ на данный момент, выполнив:
grep gdm-session-wor /var/log/audit/audit.log | audit2allow -M mypol
semodule -i mypol.pp
Следуйте тому, что вам говорит sealert -l, и я думаю, ваша проблема должна быть решена. Надеюсь, это поможет.
Чтобы правильно определить проблему - вы должны запустить тест в разрешающем режиме SELinux, иначе вам нужно будет запускать тесты один за другим, что может занять некоторое время. После этого остановите веб-службу, убедитесь, что ваши журналы аудита пусты или чередуются, запустите веб-службу, выполните сценарии / тесты, проверьте журналы аудита и напишите новую политику. Насколько я понимаю, ваши сценарии хотят получить доступ к библиотекам Oracle для чтения, поэтому вам нужно будет добавить разрешение на чтение для "system_u: object_r: textrel_shlib_t: s0" в вашем приложении. Я не знаю, какова структура маркировки для Oracle, но я уверен, что вы сможете узнать. Проверьте audit2allow.