大规模部署
物理机部署
百度内部主要是 Java/PHP 两种语言,其中Java服务器主要是 tomcat。目前,我们只提供了 Java + Tomcat 环境的批量安装脚本,可在源代码仓库里找到:
批量安装脚本会执行如步骤:
- 遍历所有名字为 "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 等参数的值。
对于 alpine 容器,需要增加如下内容
RUN apk add --no-cache gcompat libcurl libstdc++
如果不能运行,请尝试增加软连接
ln -s /lib64/ld-linux-x86-64.so.2 /lib/ld-linux-x86-64.so.2
Java 版本
Tomcat 示例
假设 tomcat 安装路径为 /tomcat/,在服务器启动之前增加 ADD + RUN 命令即可:
ADD https://packages.baidu.com/app/openrasp/release/latest/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/release/latest/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/release/latest/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