【发布时间】:2019-06-21 21:43:03
【问题描述】:
我正在尝试通过导入 zxJDBC 从 jython 脚本连接到 sqlite db。我正在使用 sqlite-jdbc-3.20.1.jar,它是由 jython 在运行时加载的。我也从 cgi-bin 调用 jython 脚本。
脚本从终端运行时运行良好,但浏览器拒绝了我的权限。当脚本尝试在此行连接数据库时脚本失败: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
我尝试通过使用-Djava.io.tmpdir=/web/MySITE/misc/tmp 重新路由 jython/java tmp 目录来移动 /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 failed with permission denied ,SELinux 模式设置为强制执行。我尝试并运行了以下命令。
setsebool -P httpd_tmp_exec 1
setsebool -P httpd_execmem 1
setsebool -P httpd_enable_cgi 1 0
我仍然从 sqlite 获得拒绝 .lck 文件的权限。然后我将 SELinux 模式更改为 permissive 并且它起作用了。
问题是服务器在 Azure 云服务上运行,我们的安全人员希望强制执行 SELinux,否则我将违反 STIG。我不是 SELinux 方面的专家。我的问题是在执行 SELinux 时需要启用或禁用什么,以便 jar 文件中的 tmp 二进制文件由 httpd 执行?我认为这个httpd_tmp_exec 可以解决问题,但它没有。感谢任何帮助、建议或解决方法。
【问题讨论】:
标签: apache sqlite selinux jython-2.7