• 大规模部署
    • 物理机部署
    • 容器化部署
      • Java 版本
        • Tomcat 示例
        • SpringBoot 示例
      • PHP 版本

    大规模部署

    物理机部署

    百度内部主要是 Java/PHP 两种语言,其中Java服务器主要是 tomcat。目前,我们只提供了 Java + Tomcat 环境的批量安装脚本,可在源代码仓库里找到:

    • baidu/openrasp - rasp-install/remote/linux/batch-installer.sh 批量安装脚本会执行如步骤:

    • 遍历所有名字为 "java" 的进程

    • 获取进程相关信息
      • 进程检查: 获取启动参数、环境变量信息,检查是否为 tomcat 进程,如果不是,跳过
      • 端口检查: 尝试获取 tomcat 一个可用的 HTTP 端口,如果找不到跳过当前进程
      • 权限检查: 如果用户为root,使用su进行安装;否则检查进程UID是否和当前用户一致,不一致跳过
      • 用户检查: 检查是否能否获取到当前用户名,获取不到就跳过
      • 版本检查: 检查 tomcat/jdk 是否为支持的范围,不支持就跳过
      • 冲突检查: 检查是否有其他的 javaagent 参数,如果发现且不为 openrasp,就跳过
    • 安装流程
      • 首先执行 RaspInstall.jar 进行安装,如果出错进入回滚流程
      • 然后尝试关闭 tomcat 服务器,最多等待30s
      • 之后尝试启动 tomcat 服务器,并不断尝试访问之前找到的 URL 地址,最多尝试60次
        • 如果失败,进入回滚流程
    • 回滚流程
      • 执行卸载操作,然后启动 tomcat 服务器
      • 如果无法启动,打印错误
    • 最后上传完整的脚本日志,包括安装和回滚(如果有) 当然,在实际上线的过程中,我们还编写了一个打包脚本,用来生成单文件的安装包。有兴趣可以参考 baidu/openrasp - rasp-install/packer 相关脚本。

    容器化部署

    容器部署通常都需要定制。在百度内部,我们一般是修改 Dockerfile,并在发布镜像时集成 OpenRASP。在执行下面的命令之前,请先在管理后台获取 app_id/app_secret/backendurl 等参数的值。

    Java 版本

    Tomcat 示例

    假设 tomcat 安装路径为 /tomcat/,在服务器启动之前增加 ADD + RUN 命令即可:

    1. ADD https://packages.baidu.com/app/openrasp/rasp-java.tar.gz /tmp
    2. RUN cd /tmp \
    3. && tar -xf rasp-java.tar.* \
    4. && /jdk/bin/java -jar rasp-*/RaspInstall.jar -install /tomcat/ -appid XXX -appsecret XXX -backendurl XXX \
    5. && rm -rf rasp-*

    更多内容可参考 baidu-security/app-env-docker - src/openrasp/tomcat7.0/Dockerfile

    SpringBoot 示例

    假设 springboot 打包后的jar为 /springboot.jar,请先解压缩 rasp 相关文件,然后修改 JVM 启动参数:

    1. ADD https://packages.baidu.com/app/openrasp/rasp-java.tar.gz /tmp
    2. RUN cd /tmp \
    3. && tar -xf rasp-java.tar.* \
    4. && mv rasp-*/rasp/ /rasp/ \
    5. && rm -f rasp-java.tar.gz
    6. RUN echo "cloud.enable: true" >> /rasp/conf/openrasp.yml \
    7. && echo "cloud.backend_url: XXX" >> /rasp/conf/openrasp.yml \
    8. && echo "cloud.app_id: XXX" >> /rasp/conf/openrasp.yml \
    9. && echo "cloud.app_secret: XXX" >> /rasp/conf/openrasp.yml
    10. RUN java -javaagent:"/rasp/rasp.jar" -jar /springboot.jar

    PHP 版本

    请在 apache/php-fpm 启动前增加如下命令

    1. ADD https://packages.baidu.com/app/openrasp/rasp-php-linux.tar.bz2 /tmp/
    2. RUN cd /tmp \
    3. && tar -xf rasp-php-linux.tar.bz2 \
    4. && php rasp-php-*/install.php -d /opt/rasp/ --backend-url XXX --app-id XXX --app-secret XXX \
    5. && rm -rf rasp-php*

    更多内容可参考 baidu-security/app-env-docker - src/openrasp/php5.4/Dockerfile