背景
VMwareHarbor镜像仓库默认使用了swagger ui,也因此暴露了swagger.json文件。在安全要求高的环境下会触发“Swagger未授权访问漏洞”,虽然暴露的信息不是特别关键。但仍然是信息泄露,需要禁用swagger.json的访问。
参考文章
【Harbor官方仓库issue解决:how can I remove swagger UI #18591】
解决
解决思路
- 方法一:禁用swagger功能。
- 难度 :高
- 说明:涉及修改harbor容器及源码,本运维不会。修改后涉及重启容器,可能需要重新启停harbor应用。
- 方法二:启用防火墙。
- 难度: 中
- 说明:通过firewalld 启用rich rule,屏蔽安全扫描(安全设备的IP),仅让K8S或其它业务服务器有权限访问harbor地址。但如果安全扫描是通过服务器上的agent进行,则此方法无效。比较耗时的是统计所有业务IP、调整策略,工作量稍多。此方法不用重启harbor应用,但防火墙白名单内的IP仍然能获取到泄露信息。
- 参考命令:
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=17x.xxx.xxx.x/32 accept'
sudo firewall-cmd --reload
- 方法三:删除swagger.json文件。
- 难度:低
- 说明 :直接人为造成404,没有防火墙策略的情况下任何人访问不到swagger.json文件,就不存在信息泄露。不用重启harbor,简单的docker命令即可完成。
解决
选择上述方法三,同时也是harbor官方issue提供的方法。
【Harbor官方仓库issue解决:how can I remove swagger UI #18591】
参考命令:
[sysma@ymt ~]$ sudo docker ps #查看状态
[sysma@ymt ~]$ sudo docker commit harbor-portal goharbor/harbor-portal:v2.8.2_keepSwagger.json #备份容器
[sysma@ymt ~]$ sudo docker images #查看备份好的容器镜像
[sysma@ymt ~]$ sudo docker exec -it harbor-portal /bin/sh #使用普通权限登录容器
sh-5.0$ ls -l /usr/share/nginx/html/swagger.json
-rw-r--r-- 1 root root 250406 2023-06-02 11:36 /usr/share/nginx/html/swagger.json
sh-5.0$ mv /usr/share/nginx/html/swagger.json /
mv: bad '/usr/share/nginx/html/swagger.json': Permission denied #普通用户无权执行mv命令
sh-5.0$ exit
exit
[sysma@ymt ~]$ sudo docker exec -uroot -it harbor-portal /bin/sh #使用root权限登录容器
sh-5.0\# mv /usr/share/nginx/html/swagger.json / #将swagger.json移动到/目录。
sh-5.0\# history
1 mv /usr/share/nginx/html/swagger.json /
2 history
sh-5.0\# exit #退出容器
[sysma@ymt ~]$
或者可以直接使用官方提供的命令,再减少几个步骤,直接不登陆容器,远程容器执行删除命令:
(记得先备份容器,再删除swagger.json文件)
docker exec -ti -u root harbor-portal rm /usr/share/nginx/html/swagger.json