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,

Другие вопросы по тегам