SELinux, cgi: отказано в разрешении на ошибку при попытке выполнить zxJDBC.connect
Я пытаюсь подключиться к базе данных sqlite из сценария jython, импортировав zxJDBC. Я использую sqlite-jdbc-3.20.1.jar, и он загружается jython во время выполнения. Я также вызываю jython-скрипт из cgi-bin.
Скрипт работает просто отлично, когда он запускается из терминала, но я получаю разрешение от браузера. Сценарий завершается ошибкой, когда сценарий пытается подключиться к БД по этой строке: connection = zxJDBC.connect( JDBC_URL, None, None, JDBC_DRIVER )
[cgi:error] [pid 53697]: java.lang.UnsatisfiedLinkError: /tmp/sqlite-3.20.1-cdbdb7f2-9803-4110-888f-e6696ae53e40-libsqlitejdbc.so: /tmp/sqlite-3.20.1-cdbdb7f2-9803-4110-888f-e6696ae53e40-libsqlitejdbc.so: failed to map segment from shared object: Permission denied
Я попытался переместить файл /tmp, перенаправив каталог jython/java tmp с помощью -Djava.io.tmpdir=/web/MySITE/misc/tmp
и дал ему разрешение 777 только для тестирования, но получил ту же ошибку, но на этот раз в доступе к файлу.lck отказано.
[cgi:error] [pid 53695]: /web/MySITE/misc/tmp/sqlite-3.20.1-3509ec54-5576-4e50-9d35-b4ffb15b94a6-libsqlitejdbc.so.lck (Permission denied)
Я видел этот пост: PHP exec Java cmd завершился ошибкой с отказом в разрешении, режим SELinux установлен на принудительное. Я попробовал и выполнил следующие команды.
setsebool -P httpd_tmp_exec 1
setsebool -P httpd_execmem 1
setsebool -P httpd_enable_cgi 1 0
Я все еще получал разрешение на файл.lck от sqlite. Затем я изменил режим SELinux на разрешающий, и это сработало.
Проблема в том, что сервер работает в облачной службе Azure, и наши специалисты по безопасности хотят, чтобы SELinux был принудительно применен, иначе у меня будет нарушение STIG. Я не эксперт по SELinux. Мой вопрос: что нужно включить или отключить, когда SELinux принудительно применяется, чтобы двоичные файлы tmp из файлов jar выполнялись httpd? Я думал это httpd_tmp_exec
сделает свое дело, но это не так. Ценю любую помощь, предложения или обходные пути.
1 ответ
Через некоторое время проб и ошибок я теперь могу подключиться к sqlite.
Я обновил только каталог /web/MySITE/misc/tmp, чтобы иметь контекст файла selinux httpd_tmp_t
и все подкаталоги и файлы под ним должны быть httpd_sys_script_exec_t
,