第七十五章 锁定 Apache (UNIX® Linux macOS)

文章目录

  • 第七十五章 锁定 Apache (UNIX® Linux macOS)
    • 推荐选项:`Apache API` 模块 (`CSPa24.so`)
    • 替代选项 `1`:带有 `NSD` 的 `Apache API` 模块 (`mod_csp.so`)
    • 替代选项 `2`:带有 `NSD` 的 `CGI` 模块 (`nph-CSPcgi`)
    • 替代选项 `3`:带有 `NSD` 的内置`Apache API` 模块 (`mod_csp.c`)

      第七十五章 锁定 Apache (UNIX® Linux macOS)

      在某些情况下,Apache 被锁定,因此您无法轻松配置服务器来访问 Apache 文件系统之外的文件。例如,安全增强型 Linux (SELinux) 就是这种情况。

      对于以这种方式锁定的配置,其他地方讨论的 Web 网关配置会导致在尝试访问 CSP 资源时返回 HTTP 403 Forbidden 错误代码。有两种策略可以处理这个问题。

      • 修改 Web 网关主目录的安全上下文,以便 Apache 可以访问此位置中保存的文件。
      • 将 Web Gateway 的主目录移动到 Apache 根文件系统下的某个位置(在 SELinux 设置中已预先配置为可供 Apache 访问)。

        首先,修改 Web 网关主目录的 SELinux 安全上下文通常很简单,涉及以下步骤。

        作为示例,我们使用 /opt/webgateway/bin 的 Web Gateway 主目录、侦听端口 1972 的 IRIS Superserver 以及安装在 /usr/iris/ 中的 IRIS。

        chcon 命令设置文件上下文并立即生效。

        sudo chcon -R -t httpd_sys_content_t /usr/iris/csp
        sudo chcon -R -t httpd_sys_rw_content_t /opt/webgateway/conf/CSP.ini
        sudo chcon -R -t httpd_sys_rw_content_t /opt/webgateway/conf/CSPRT.ini
        sudo chcon -R -t httpd_sys_rw_content_t /opt/webgateway/logs/CSP.log
        sudo chcon -t httpd_modules_t /opt/webgateway/bin/CSPa2.so
        sudo chcon -t httpd_modules_t /opt/webgateway/bin/CSPa2Sys.so
        sudo chcon -t httpd_modules_t /opt/webgateway/bin/CSPa22.so
        sudo chcon -t httpd_modules_t /opt/webgateway/bin/CSPa22Sys.so
        sudo chcon -t httpd_modules_t /opt/webgateway/bin/CSPa24.so
        sudo chcon -t httpd_modules_t /opt/webgateway/bin/CSPa24Sys.so
        

        但是,chcon 命令所做的更改将在下次重新标记后丢失;因此,除了 chcon 之外,还有必要使用 semanage fcontext 工具。以下命令允许 Web Gateway 在强制执行 SELinux 时运行:

        semanage fcontext -a -t lib_t "/opt/webgateway/bin/(.*\.so)?" 2> /dev/null
        semanage fcontext -a -t httpd_sys_rw_content_t "/opt/webgateway/bin/temp(/.*)?" 2> /dev/null
        semanage fcontext -a -t httpd_sys_rw_content_t "/opt/webgateway/bin/CSP(.*\.ini)?" 2> /dev/null
        semanage fcontext -a -t httpd_sys_rw_content_t "/opt/webgateway/bin/CSP.log" 2> /dev/null
        restorecon -vr /opt/webgateway/bin > /dev/null
        

        然后使用如下所示的命令。请注意,正确设置超级服务器端口的上下文非常重要(如最后一行所示);否则,Web Gateway 将无法访问它,从而导致“服务器不可用”错误。

        sudo /usr/sbin/semanage fcontext -a -t httpd_sys_content_t
            "/usr/iris/csp(/.)?"
        sudo /usr/sbin/semanage fcontext -a -t httpd_sys_rw_content_t
            "/opt/webgateway/conf/CSP.ini"
        sudo /usr/sbin/semanage fcontext -a -t httpd_sys_rw_content_t
            "/opt/webgateway/conf/CSPRT.ini"
        sudo /usr/sbin/semanage fcontext -a -t httpd_sys_rw_content_t
            "/opt/webgateway/logs/CSP.log"
        sudo /usr/sbin/semanage fcontext -a -t httpd_modules_t
            "/opt/webgateway/bin/CSPa2.so"
        sudo /usr/sbin/semanage fcontext -a -t httpd_modules_t
            "/opt/webgateway/bin/CSPa2Sys.so"
        sudo /usr/sbin/semanage fcontext -a -t httpd_modules_t
            "/opt/webgateway/bin/CSPa22.so"
        sudo /usr/sbin/semanage fcontext -a -t httpd_modules_t
           "/opt/webgateway/bin/CSPa22Sys.so"
        sudo /usr/sbin/semanage fcontext -a -t httpd_modules_t
            "/opt/webgateway/bin/CSPa24.so"
        sudo /usr/sbin/semanage fcontext -a -t httpd_modules_t
            "/opt/webgateway/bin/CSPa24Sys.so"
        sudo /usr/sbin/semanage port -a -t http_port_t -p tcp 51773
        

        这些是授予 Web 网关(在托管 Apache 服务器的上下文中运行)对其主目录中的文件的访问权限的基本步骤。

        另一种方法(如果上面建议的方法不可接受则应使用该方法)是将 Web Gateway 配置为在 Apache 提供的预配置目录中工作。以下命令假设 Apache 安装在 /usr/apache 中。

        • CGI 模块应复制到:/usr/apache/cgi-bin/
          cp /usr/iris/csp/bin/*cgi* /usr/apache/cgi-bin/
          
          • API 模块应复制到:/usr/apache/modules/
            cp /usr/iris/csp/bin/*.so /usr/apache/modules/
            
            • 静态文件应复制到以下位置:/usr/apache/htdocs/
              cp /usr/iris/csp/samples/* /usr/apache/htdocs/csp/samples/
              cp /usr/iris/csp/broker/* /usr/apache/htdocs/csp/broker/
              cp /usr/iris/csp/sys/* /usr/apache/htdocs/csp/sys/
              

              另外,复制上述位置下的所有子目录。

              移动 Web Gateway 安装后,必须对 Apache 配置中指定的路径进行适当的更改。

              推荐选项:Apache API 模块 (CSPa24.so)

              LoadModule cspsys_module_sa /usr/apache/modules/CSPap24.so
              CSPSYSModulePath /usr/apache/modules/
              CSPFileTypes csp cls zen cxw
              

              替代选项 1:带有 NSD 的 Apache API 模块 (mod_csp.so)

              LoadModule csp_module /usr/apache/modules/mod_csp.so
              CSPFileTypes csp cls zen cxw 
              ScriptAliasMatch /csp/bin/Systems/Module.cxw "/usr/apache/cgi-bin/nph-CSPcgiSys" 
              ScriptAliasMatch /csp/bin/RunTime/Module.cxw "/usr/apache/cgi-bin/nph-CSPcgi"
              

              替代选项 2:带有 NSD 的 CGI 模块 (nph-CSPcgi)

              AllowOverride None
              Options FollowSymLinks ExecCGI
              Require all granted
              ScriptAliasMatch /csp/bin/Systems/Module.cxw "/usr/apache/cgi-bin/nph-CSPcgiSys" 
              ScriptAliasMatch /csp/bin/RunTime/Module.cxw "/usr/apache/cgi-bin/nph-CSPcgi"
              ScriptAliasMatch /*\.([Cc][Ss][Pp]|[Cc][Ll][Ss])$ "/usr/apache/cgi-bin/nph-CSPcgi"
              

              替代选项 3:带有 NSD 的内置Apache API 模块 (mod_csp.c)

              CSPFileTypes csp cls zen cxw 
              ScriptAliasMatch /csp/bin/Systems/Module.cxw "/apache/cgi-bin/nph-CSPcgiSys" 
              ScriptAliasMatch /csp/bin/RunTime/Module.cxw "/usr/apache/cgi-bin/nph-CSPcgi"