大规模部署

物理机部署

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

批量安装脚本会执行如步骤:

  1. 遍历所有名字为 "java" 的进程
  2. 获取进程相关信息
    • 进程检查: 获取启动参数、环境变量信息,检查是否为 tomcat 进程,如果不是,跳过
    • 端口检查: 尝试获取 tomcat 一个可用的 HTTP 端口,如果找不到跳过当前进程
    • 权限检查: 如果用户为root,使用su进行安装;否则检查进程UID是否和当前用户一致,不一致跳过
    • 用户检查: 检查是否能否获取到当前用户名,获取不到就跳过
    • 版本检查: 检查 tomcat/jdk 是否为支持的范围,不支持就跳过
    • 冲突检查: 检查是否有其他的 javaagent 参数,如果发现且不为 openrasp,就跳过
  3. 安装流程
    • 首先执行 RaspInstall.jar 进行安装,如果出错进入回滚流程
    • 然后尝试关闭 tomcat 服务器,最多等待30s
    • 之后尝试启动 tomcat 服务器,并不断尝试访问之前找到的 URL 地址,最多尝试60次
      • 如果失败,进入回滚流程
  4. 回滚流程
    • 执行卸载操作,然后启动 tomcat 服务器
    • 如果无法启动,打印错误
  5. 最后上传完整的脚本日志,包括安装和回滚(如果有)

当然,在实际上线的过程中,我们还编写了一个打包脚本,用来生成单文件的安装包。有兴趣可以参考 baidu/openrasp - rasp-install/packer 相关脚本。

容器化部署

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

Java 版本

Tomcat 示例

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

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

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

SpringBoot 示例

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

ADD https://packages.baidu.com/app/openrasp/rasp-java.tar.gz /tmp
RUN cd /tmp \
    && tar -xf rasp-java.tar.* \
    && mv rasp-*/rasp/ /rasp/ \
    && rm -f rasp-java.tar.gz

RUN echo "cloud.enable: true" >> /rasp/conf/openrasp.yml \
    && echo "cloud.backend_url: XXX" >> /rasp/conf/openrasp.yml \
    && echo "cloud.app_id: XXX" >> /rasp/conf/openrasp.yml \
    && echo "cloud.app_secret: XXX" >> /rasp/conf/openrasp.yml

RUN java -javaagent:"/rasp/rasp.jar" -jar /springboot.jar

PHP 版本

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

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

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