gitlab+sonarqube实现自动化代码漏洞扫描(centos内网环境安装配置及使用遇到的问题)
<p><strong>sonarqube可以与源码管理工具gitlab集成,实现提交代码后自动扫描检测代码的相关漏洞</strong>。该CI/CD过程大致为:</p><p>1、研发人员提交源码至gitlab服务器 —></p>
<p>2、gitlab runner执行指定脚本(由项目的.gitlab-ci.yml配置文件指定具体内容,如编译项目、开启代码检测) —></p>
<p>3、sonar-scanner对项目进行扫描,sonar-scanner将扫描结果发送至服务器进行查看。</p>
<p>在上述过程3中,由于需要在gitlab服务器上通过sonar-scanner对项目进行编译,这就要求gitlab服务器能联网下载项目相关依赖包,否则只能提前将项目依赖包上传至gitlab服务器并在.gitlab-ci.yml的脚本中指定依赖包的本地位置。如果项目依赖发生变化,还得将新的依赖包上传服务器才能完成编译。因此在内网环境下,比较适合稳定没有太大变化的项目使用。且sonarqube社区版只支持主分支的检测,如果想要检测其他分支需要安装开发版或者企业版。以下记录gitlab、sonarqube的安装配置过程(centos内网环境)。</p>
<p> </p>
<p><strong>一、安装gitlab(社区版)、gitlab-runner</strong></p>
<p>说明:gitlab-runner是gitlab ci自动化流水线的一个服务,主要作用是用于配合gitlab实现自动化执行相关动作,例如自动化的编译、部署、测试等</p>
<p>1、安装gitlab依赖项policycoreutils-python;</p>
<p>2、安装perl环境(有可能不需要,但是我安装时提示了,服务器没有perl);</p>
<p>3、安装git、安装gitlab;</p>
<p>4、修改gitlab的配置文件将external_url改成实际的服务器ip以及想要的端口号,如external_url 'http://172.18.88.45:8055'</p>
<p>5、执行命令gitlab-ctl reconfigure 重启gitlab服务(该过程会很久);</p>
<p>6、访问系统,使用root账号登录(初始密码在/etc/gitlab/initial_root_password里)、修改密码;</p>
<p>7、修改系统为中文:root账号-偏好设置-本地化里,语言选择中文即可(http://172.18.88.45:8055/-/profile/preferences)</p>
<p>8、安装gitlab-runner(网上有提到gitlab-runner的版本最好与gitlab保持一致,否则可能会有意外情况。我这边装的版本是一致的),修改服务配置文件,将用户改为root。默认是gitlab-runner,不改可能有权限问题;</p>
<p>vi /etc/systemd/system/gitlab-runner.service</p>
<p>ExecStart=/usr/bin/gitlab-runner "run" "--working-directory" "/home/gitlab-runner" "--config" "/etc/gitlab-runner/config.toml" "--service" "gitlab-runner" "--user" "root"</p>
<p>重启服务</p>
<p>systemctl daemon-reload</p>
<p>systemctl restart gitlab-runner</p>
<p> </p>
<p><strong>二、安装sonarqube(社区版)、sonar-scanner</strong></p>
<p>说明:sonar-scanner主要租用是用于扫描指定代码漏洞,并将结果推送至sonarqube服务器保存查看。这两个一般安装在gitlab服务器上。</p>
<p>1、安装jdk11;</p>
<p>2、修改文件句柄数(最大文件数)和用户最大进程数限制;vi /etc/security/limits.conf</p>
<p>* soft nofile 65536<br>* hard nofile 65536<br>* soft nproc 655350<br>* hard nproc 655350</p>
<p>3、安装数据库,一般选择postgresql(以postgresql13为例);</p>
<p>a.#创建数据目录(位置自定)<br>mkdir -p /home/data/postgresql-13.0/ </p>
<p>b.#修改目录的属主属组<br>chown postgres:postgres -R /home/data/postgresql-13.0/ </p>
<p>c.#初始化pgsql<br>sudo -u postgres /usr/pgsql-13/bin/initdb --encoding=UTF-8 --username=postgres --pgdata=/home/data/postgresql-13.0/data <br>d.#记录配置文件路径</p>
<p>vi /home/data/postgresql-13.0/data/postgresql.conf</p>
<p>listen_addresses = '172.18.88.44' # what IP address(es) to listen on;</p>
<p>e.#定义哪些服务器、可以用什么样的方式,访问postgresql</p>
<p>/home/data/postgresql-13.0/data/pg_hba.conf</p>
<p>host all all 0.0.0.0/0 md5<br>f.#修改service文件中数据目录</p>
<p>vi /usr/lib/systemd/system/postgresql-13.service</p>
<p>Environment=PGDATA=/home/data/postgresql-13.0/data/<br>g.#重载服务<br>systemctl daemon-reload </p>
<p>h.#启动postgresql<br>systemctl start postgresql-13<br>systemctl enable postgresql-13</p>
<p> 4、创建sonarqube使用的数据库和用户</p>
<p>psql -U postgres #连接数据库(此命令会用postgres用户,默认连入postgres数据库。-U指定用户 -d指定数据库)<br>#新建用户sonarqube,密码xxxxxx<br>create user sonarqube with password 'xxxxxx';<br>#创建数据库sonarqube_9_6并指定owner为sonarqube<br>create database sonarqube_9_6 with owner sonarqube;<br>#授权sonarqube用户在数据库sonarqube_9_6拥有所有权限<br>grant all on database sonarqube_9_6 to sonarqube;</p>
<p> 5、安装sonarqube,修改配置文件</p>
<p>#创建用户sonar,因为sonarqube会用到ES,ES不能用root用户启动<br>useradd sonar</p>
<p>#解压包<br>unzip sonarqube-9.6.1.59531.zip</p>
<p> #修改目录的属主属组</p>
<p>chown -R sonar:sonar sonarqube-9.6.1.59531/</p>
<p>#修改配置文件,postgresql连接配置<br>sonar.jdbc.username=sonarqube<br>sonar.jdbc.password=xxxxxx<br>sonar.jdbc.url=jdbc:postgresql://xx.xx.xx.xx:5432/sonarqube_9_6</p>
<p>#端口配置<br>sonar.web.port=9000</p>
<p>6、启动sonarqube</p>
<p>sudo -u sonar /home/soft/sonarqube-9.6.1.59531/bin/linux-x86-64/sonar.sh start</p>
<p>7、汉化的话,可以</p>
<p>将下载好的汉化包(sonar-l10n-zh-plugin-9.6.jar)移动到插件目录下,然后重启一下sonarqube服务即可<br>/home/soft/sonarqube-9.6.1.59531/extensions/plugins/</p>
<p>8、安装sonar-scanner</p>
<p>a、修改配置文件(假设安装在/usr/local/sonar-scanner下)</p>
<p> vi /usr/local/sonar-scanner/conf/sonar-scanner.properties</p>
<p>sonar.host.url=http://172.18.88.44:9000 #sonarqube服务器url<br>sonar.login=XXXXXXXXXX #在sonarqube里配置的令牌,后面会讲到在sonarqube里怎么配置<br>sonar.sourceEncoding=UTF-8 #Default source code encoding</p>
<p>b、修改系统配置文件,增加scanner的配置</p>
<p>vi /etc/profile</p>
<p>export SONAR_SCANNER_HOME=/usr/local/sonar-scanner<br>export PATH=${SONAR_SCANNER_HOME}/bin:${PATH}</p>
<p> c、重载配置文件</p>
<p><span class="hljs-built_in">source /etc/profile</span></p>
<p><span class="hljs-built_in">d、查看sonar-scanner是否启动了</span></p>
<p><span class="hljs-built_in">sonar-scanner -v</span></p>
<p><img src="https://img2023.cnblogs.com/blog/1863578/202312/1863578-20231211102226014-1716949627.png"></p>
<p> </p>
<p><strong> 三、gitlab与sonarqube的集成</strong></p>
<p>gitlab端:</p>
<p>1、选择具体想要启动CI/CD的项目-设置-CI/CD-Runner,创建令牌,用于gitlab-runner的身份认证</p>
<p><img src="https://img2023.cnblogs.com/blog/1863578/202312/1863578-20231211171035810-1163374758.png"></p>
<p> 2、在命令行中执行 gitlab-runner register ,进行gitlab-runner的注册配置。按照提示,输入相关的gitlab服务地址、令牌token、唯一标识、描述等。全部完成之后,回到gitlab页面中,可以看到可用的指定Runner(上图中的CheckCode)。</p>
<p><img src="https://img2023.cnblogs.com/blog/1863578/202312/1863578-20231208154310109-2141216658.png"></p>
<p>修改runner,把运行未标记的作业勾上:</p>
<p><img src="https://img2023.cnblogs.com/blog/1863578/202312/1863578-20231211144505062-303672026.png"></p>
<p> </p>
<p> sonarqube端:</p>
<p>1、使用admin登录,配置-ALM-GitLab-创建配置,配置GitLab服务器的信息:</p>
<p><img src="https://img2023.cnblogs.com/blog/1863578/202312/1863578-20231211101605028-1716109466.png"></p>
<p><img src="https://img2023.cnblogs.com/blog/1863578/202312/1863578-20231211101733294-1778239911.png"></p>
<p> 2、配置完毕后,就可以设置项目相关内容了:项目-新增项目-GitLab,选择需要从gitlab中进行分析的项目(会要求输入gitlab的令牌,用于访问gitlab上的项目。如果前面配置没问题,应该可以看到gitlab中的项目。注意,看到的项目范围跟你输入的gitlab令牌对应的用户权限有关系)</p>
<p><img src="https://img2023.cnblogs.com/blog/1863578/202312/1863578-20231211135254434-1156110941.png"></p>
<p><img src="https://img2023.cnblogs.com/blog/1863578/202312/1863578-20231211135427106-1901377160.png"></p>
<p> 3、根据项目代码构建方式选择对应的技术:</p>
<p><img src="https://img2023.cnblogs.com/blog/1863578/202312/1863578-20231211135813248-223339729.png"></p>
<p> 4、按照提示创建sonarqube的令牌并在gitlab的ci/cd配置页面中建立对应的变量:</p>
<p><img src="https://img2023.cnblogs.com/blog/1863578/202312/1863578-20231211140216420-418157118.png"></p>
<p><img src="https://img2023.cnblogs.com/blog/1863578/202312/1863578-20231211140314730-992061103.png"></p>
<p> 5、复制.getlab-ci.yml配置文件内容,完成教程,到gitlab对应的项目-ci/cd-编辑器中,粘贴对应的内容</p>
<p><img src="https://img2023.cnblogs.com/blog/1863578/202312/1863578-20231211140446290-1112534293.png"></p>
<p> <img src="https://img2023.cnblogs.com/blog/1863578/202312/1863578-20231211140804124-995081842.png"></p>
<p> 注意:麻烦的(坑)地方来了,由于我们的服务器在内网无法访问互联网,所以默认的脚本需要修改不联网方式,同时需要安装项目对应的sonarscanner(本示例中,安装的是net版本的)、提前将项目依赖包上传到服务器并在脚本中指定位置,否则运行不起来:</p>
<p><img src="https://img2023.cnblogs.com/blog/1863578/202312/1863578-20231211152100404-1803542208.png"></p>
<p>windows下查看本地的nuget包位置命令:<span class="hljs-keyword">dotnet <span class="hljs-keyword">nuget locals all<span class="hljs-parameter"> --list</span></span></span> 需要将本地的package内容上传到服务器上。</p>
<p> </p>
<p> 完成后提交更改,就可以跑起来了。通过在代码端修改代码并提交gitlab,将会触发扫描任务:</p>
<p><img src="https://img2023.cnblogs.com/blog/1863578/202312/1863578-20231211161112888-1226509769.png"></p>
<p><img src="https://img2023.cnblogs.com/blog/1863578/202312/1863578-20231211161202454-1239538582.png"></p>
<p> 到sonarqube管理页面中查看扫描结果:该项目没有安全漏洞,有2个bug</p>
<p><img src="https://img2023.cnblogs.com/blog/1863578/202312/1863578-20231211161318544-448525030.png"></p>
<p> <img src="https://img2023.cnblogs.com/blog/1863578/202312/1863578-20231211161545805-60262256.png"> </p><br><br>
来源:https://www.cnblogs.com/coldlight/p/17887082.html
頁:
[1]