wazuh是一个开源的项目,有进行漏洞检测,安全侦测等功能
下面是这个项目,服务端给客户端升级的代码执行步骤:
wpk包升级流程:
1、服务端:
bin目录下,升级脚本:agent_upgrade
升级命令举例:/var/ossec/bin/agent_upgrade -a 001 -f /var/ossec/var/upgrade/up.wpk -x upgrade.sh
脚本agent_upgrade,主要运行命令:
/var/ossec/framework/python/bin/python3 /var/ossec/framework/scripts/agent_upgrade.py -a 144 -f /var/ossec/var/upgrade/up.wpk -x upgrade.sh
所以升级程序主要看agent_upgrade.py
在agent_upgrade.py中,根据是否有file判断是执行指定升级包还是指定版本号下载。因为指定版本号下载是网上版本的升级方式,本次举例采用指定升级包的方式。
在这里使用的agent.upgrade_custom()的升级方式。进入到代码文件agent.py的函数upgrade_custom
函数upgrade_custom主要做了两件事情:
- 发送升级包:_send_custom_wpk_file
- 发送安装命令:s = OssecSocket(common.REQUEST_SOCKET);msg = "{0} com upgrade {1} {2}".format(str(self.id).zfill(3), sending_result[1], installer);s.send(msg.encode())
2、客户端
Agentd.c的函数AgentdStart开始,进入到线程req_receiver。
命令为com类型,进入到函数wcom_dispatch。
wcom_open打开文件,
wcom_write写入文件,(安装包接收)
wcom_upgrade进行升级。
wcom_upgrade函数的升级步骤:
a、_unsign 解签;
b、_uncompress解压;
c、Clean up upgrade folder;
d、Unmerge;
e、Installer executable file安装执行文件;
f、Execute执行升级操作 :源代码里的upgrade.sh
. /etc/ossec-init.conf 2> /dev/null || exit 1
(sleep 5 && chmod +x $DIRECTORY/var/upgrade/src/init/*.sh && $DIRECTORY/var/upgrade/src/init/pkg_installer.sh) >/dev/null 2>&1 &
pkg_installer.sh包含了install.sh的执行。实际上就是安装脚本的更新步骤