【问题标题】:SELinux, cgi:error permission denied when trying to execute zxJDBC.connectSELinux,cgi:error 尝试执行 zxJDBC.connect 时权限被拒绝
【发布时间】: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


    【解决方案1】:

    经过一段时间的反复试验,我现在可以连接到 sqlite。

    我只更新了 /web/MySITE/misc/tmp 目录,将 selinux 文件上下文 httpd_tmp_t 及其下的所有子目录和文件改为 httpd_sys_script_exec_t

    【讨论】:

      猜你喜欢
      • 2019-02-07
      • 1970-01-01
      • 1970-01-01
      • 2015-12-27
      • 2016-04-15
      • 2015-06-08
      • 2017-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多