使用OWASP ZAP全扫描Docker镜像生成报告时遇Permission denied错误
解决Jenkins中OWASP ZAP Docker镜像生成HTML报告权限拒绝问题
问题描述
在Jenkins执行如下OWASP ZAP全扫描阶段时:
stage('OWASP ZAP Full Scan') { steps { script { sh "sudo docker run -v /var/lib/jenkins/workspace/Front:/zap/wrk/:rw -t ghcr.io/zaproxy/zaproxy:stable zap-full-scan.py -t http://192.168.56.7:80/ -r testreport.html" } } }
扫描执行后无法生成HTML报告,报错信息如下:
ERROR [Errno 13] Permission denied: '/zap/wrk/testreport.html' 2024-04-16 09:30:57,094 I/O error: [Errno 13] Permission denied: '/zap/wrk/testreport.html' Traceback (most recent call last): File "/zap/zap-full-scan.py", line 469, in main write_report(os.path.join(base_dir, report_html), zap.core.htmlreport()) File "/zap/zap_common.py", line 569, in write_report with open(file_path, mode='wb') as f: PermissionError: [Errno 13] Permission denied: '/zap/wrk/testreport.html' Found Java version 11.0.22 Available memory: 8719 MB Using JVM args: -Xmx2179m
解决方案
1. 匹配容器用户与主机目录权限
ZAP容器默认以zap用户(UID 1000)运行,主机Jenkins工作目录可能属于jenkins用户,导致容器内用户无写入权限。执行以下命令修改目录所属权限:
sudo chown -R 1000:1000 /var/lib/jenkins/workspace/Front
修改后重新触发扫描任务即可。
2. 指定容器以Jenkins用户身份运行
先通过id jenkins命令获取主机Jenkins用户的UID(假设为1001),然后在Docker运行命令中指定该用户:
stage('OWASP ZAP Full Scan') { steps { script { sh "sudo docker run -u 1001:1001 -v /var/lib/jenkins/workspace/Front:/zap/wrk/:rw -t ghcr.io/zaproxy/zaproxy:stable zap-full-scan.py -t http://192.168.56.7:80/ -r testreport.html" } } }
3. 临时开放目录全局写入权限(仅测试场景)
若只是临时测试,可临时给目录添加全局写入权限,但此方法存在安全风险,生产环境禁止使用:
sudo chmod -R 777 /var/lib/jenkins/workspace/Front
内容的提问来源于stack exchange,提问作者Balkiss
相关产品推荐
相关产品推荐

