• PHP 服务器安装
    • 自动化安装
    • 升级 PHP Agent
    • 手动安装 - Linux
      • 1. 确认基本信息
      • 2. 安装软件
      • 3. 安装检测插件
      • 4. 验证安装是否成功
    • 手动安装 - Windows
      • 1. 确认基本信息
      • 2. 安装软件
      • 3. 安装检测插件
      • 4. 检查安装是否成功
    • 手动安装 - MacOS
    • FAQ
      • 1. include hook 点未生效
      • 2. php_json_encode 未定义错误
      • 3. php-fpm 模式下,插件目录的文件监控功能,有时会失效
      • 4. Windows 版本提示找不到 php5ts.dll
      • 5. OpenRASP 正常拦截攻击,但是 alarm.log 没有日志

    PHP 服务器安装

    OpenRASP 依赖于如下几个扩展。如果你在使用发行版自带的 PHP 环境,可以使用 yumapt-get 等工具安装下这些扩展;如果是自己编译的 PHP 环境,则需要在编译阶段开启这些功能。

    • json
    • curl
    • pdo
      对于服务器环境和操作系统的支持情况,可查看兼容性说明 - PHP Agent,目前 5.3 - 7.2 都是支持的。

    自动化安装

    解压缩后,进入到解压后的目录中,e.g rasp-php-20180320,在终端中执行以下命令,

    1. php install.php -d /opt/rasp

    其中 /opt/rasp 为 OpenRASP 安装目录,用于存储检测插件、翻译文件、日志等等,可根据实际情况调整

    注意: 某些情况下,php cliphp-fpm 使用的 ini 不同,你可能需要手动更新 ini 文件

    升级 PHP Agent

    首先,我们建议你备份老的扩展,e.g

    1. mv /usr/lib64/php/modules/openrasp.so /usr/lib64/php/modules/openrasp.so.bak

    然后,安装新的扩展,e.g

    1. cp openrasp.so /usr/lib64/php/modules/openrasp.so

    最后,通过 graceful reload 方式重新加载服务。

    针对不同的服务器类型,你需要执行不同的命令,e.g

    1. PHP-FPM 服务器
    2. killall -USR2 php-fpm
    3. Apache HTTPD 服务器
    4. apachectl -k reload

    对于 Windows,请使用 WAMPXAMPP 等自带的工具重启 apache 服务。

    需要注意的是,请不要直接覆盖 openrasp.so,否则会产生意想不到的内存错误。我们建议使用 重命名方式 来安装新版,以避免出现问题。

    手动安装 - Linux

    1. 确认基本信息

    在 web 目录下面,我们建立一个 info.php,并填写如下内容

    1. <?php phpinfo();?>

    在浏览器里打开这个页面,使用搜索功能,

    • 定位到 extension_dir 字样,确认PHP扩展安装目录
      • e.g /usr/lib/php/20151012
    • 搜索 Additional .ini files parsed 字样,
      • 如果找到了,我们就在这个目录下面创建一个新的 ini 文件,e.g /etc/php.d/z-openrasp.ini
    • 如果找不到,就定位到 Loaded Configuration File 字样,确认 ini 配置文件路径
      • e.g /etc/php.ini

        2. 安装软件

    首先,根据你的 PHP 版本号,复制正确的 openrasp.so 到扩展目录,e.g

    1. cp php/linux-php5.4-x86_64/openrasp.so /usr/lib/php/20151012
    2. chmod 755 /usr/lib/php/20151012/openrasp.so

    然后,确定 OpenRASP 安装目录,在这里我们使用 /opt/rasp

    这个目录将会用于存储检测插件、报警日志、插件日志等内容,需要手动创建,并保证 PHP 进程可以写入,e.g

    1. mkdir -p /opt/rasp
    2. chmod 777 -R /opt/rasp

    由于报警日志存储在 /opt/rasp/logs,我们建议挑选一个空间较大的分区,以避免将根分区打满

    最后,修改 php.ini,或者创建 z-openrasp.ini 文件,添加如下内容:

    1. ; BEGIN OPENRASP
    2. [openrasp]
    3. extension=openrasp.so
    4. openrasp.root_dir=/opt/rasp
    5. ; END OPENRASP

    其中,openrasp.root_dir 表示刚才选择的 OpenRASP 安装目录,不填写则无法加载。对于其他配置参数,可参考其他配置文档进行调整。

    3. 安装检测插件

    点击这里下载官方插件 plugins/official/plugin.js,并放置到 <openrasp.root_dir>/rasp/plugins/ 目录,下载后自动加载并生效。

    4. 验证安装是否成功

    访问刚才创建的 info.php,检查 openrasp 模块是否加载成功即可,e.g

    img

    如果你没有看到类似的信息,则说明扩展加载失败。常见原因有

    • PHP版本和扩展版本不一致,比如 PHP 是 5.3 版本,但你安装了 PHP 5.6 版本的 openrasp.so
    • INI 配置不正确,请参考 php error.log 里的错误消息
      • 所有的错误消息都以 [OpenRASP] 错误码 开头,方便和其他日志进行区分
      • 对于 apache/nginx,可以查看类似 /var/log/nginx/error.log 的路径
        确认安装成功后,请删除 info.php 这个文件,以避免泄露敏感信息

    手动安装 - Windows

    1. 确认基本信息

    首先,我们来确认下PHP基本信息。在 web 目录下面,我们建立一个 info.php,并填写如下内容

    1. <?php phpinfo();?>

    在浏览器里打开这个页面,然后使用搜索功能

    • 定位到 extension_dir 字样,确认PHP扩展安装目录
      • e.g c:\wamp\bin\php-5.6.32\ext
    • 定位到 Loaded Configuration File 字样,确认 ini 配置文件路径
      • e.g c:\wamp\bin\php-5.6.32\php.ini

        2. 安装软件

    首先,根据你的PHP架构,下载对应的 VS 2015 运行库:

    • Visual C++ Redistributable Packages for Visual Studio 2015
      然后,根据你的PHP架构,复制32或者64位的DLL到PHP扩展安装目录:

    • php/win32-php5.6-x86/php_openrasp.dll

    • php/win32-php5.6-x64/php_openrasp.dll
      最后,更新 ini 配置文件,增加如下内容(请修正 openrasp.root_dir 路径
    1. ; BEGIN OPENRASP
    2. [openrasp]
    3. extension=php_openrasp.dll
    4. openrasp.root_dir=D:\rasp
    5. ; END OPENRASP

    对于 WAMP 和 XAMPP 软件,安装后需重启 Apache 服务器生效。

    3. 安装检测插件

    点击这里下载官方插件 plugins/official/plugin.js,并放置到 <openrasp.root_dir>/rasp/plugins/ 目录,下载后自动加载并生效。

    4. 检查安装是否成功

    排查方式,和 Linux 系统完全一样,不再赘述

    手动安装 - MacOS

    我们只支持 Homebrew PHP 5.6 版本,安装过程同 Linux 系统,aka

    • 复制 dylib 文件到 PHP 扩展目录
    • 修改 INI 配置文件
    • 重启 php-fpm 生效

      FAQ

    1. include hook 点未生效

    OpenRASP 扩展跟 xdebug 模块存在冲突,若同时开启了 xdebug 模块,请先禁用它

    2. php_json_encode 未定义错误

    OpenRASP 依赖于多个PHP扩展,json、pdo 等等。由于 PHP 不会严格按照依赖顺序去加载扩展,所以当 openrasp 先于 json 加载,就会产生这个错误,e.g

    1. PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/openrasp.so' - /usr/lib64/php/modules/openrasp.so: undefined symbol: php_json_encode in Unknown on line 0

    解决方法就是让 json 扩展先加载。常见的做法是调整配置文件的权重,比如将 openrasp 配置文件改为 /etc/php.d/z-openrasp.ini,这样 json 配置文件就会先于 openrasp 配置文件加载,就解决了扩展依赖的问题。

    3. php-fpm 模式下,插件目录的文件监控功能,有时会失效

    在 openrasp 扩展初始化时,我们创建了文件监控线程,用于插件目录的监控。当我们发现插件目录发生变化,就会通过发送 USR2 信号的方式,通知 php-fpm master process 去重新加载子进程,即 gracefully reload

    然而,如果你在启动 php-fpm 的时候,没有使用 -F 参数,则意味着 php-fpm 会主动 fork() 到后台。此时,我们创建的文件监控线程就会失效,也就无法监控插件目录了。

    解决方法就是使用 php-fpm -F 这样的方式启动PHP服务器。当然,如果你使用发行版自带的 php-fpm,通常都是这样启动的,无需担心。

    4. Windows 版本提示找不到 php5ts.dll

    这是因为当前的PHP环境没有开启线程安全 - Thread safety。

    目前,在Windows下面,我们只支持线程安全版本。你可以使用 WAMP 或者 XAMPP 来测试 OpenRASP,这些环境是线程安全的,可以正常加载OpenRASP扩展。

    5. OpenRASP 正常拦截攻击,但是 alarm.log 没有日志

    假设 OpenRASP 安装到了 /opt/rasp

    • 检查 logs 目录是否有写权限
      • 如果没有权限,可以执行 chmod 777 /opt/rasp/logs 增加权限
      • 检查 SELinux 是否开启,可以执行 setenforce 0 关闭
    • 检查 php error_log 是否有 OpenRASP 相关的错误日志
      • 如果没有配置过,请在 php.ini 里开启,e.g error_log = /tmp/php_error.log
    • 检查 php open_basedir 是否关闭(或者将 /opt/rasp 加入到允许的路径里)
      • 我们的 alarm 日志使用 PHP stream 写入,会受到这个配置的影响,e.g
        PHP Warning: scandir(): open_basedir restriction in effect. File(/www/rasp/logs/alarm/alarm.log.2018-07-26) is not within the allowed path(s)

    原文: https://rasp.baidu.com/doc/install/manual/php.html