gitlab+sonarqube实现自动化代码漏洞扫描(centos内网环境安装配置及使用遇到的问题)

发布时间 2023-12-11 16:21:58作者: 寒冰之光

sonarqube可以与源码管理工具gitlab集成,实现提交代码后自动扫描检测代码的相关漏洞。该CI/CD过程大致为:

1、研发人员提交源码至gitlab服务器 —>

2、gitlab runner执行指定脚本(由项目的.gitlab-ci.yml配置文件指定具体内容,如编译项目、开启代码检测) —>

3、sonar-scanner对项目进行扫描,sonar-scanner将扫描结果发送至服务器进行查看。

在上述过程3中,由于需要在gitlab服务器上通过sonar-scanner对项目进行编译,这就要求gitlab服务器能联网下载项目相关依赖包,否则只能提前将项目依赖包上传至gitlab服务器并在.gitlab-ci.yml的脚本中指定依赖包的本地位置。如果项目依赖发生变化,还得将新的依赖包上传服务器才能完成编译。因此在内网环境下,比较适合稳定没有太大变化的项目使用。且sonarqube社区版只支持主分支的检测,如果想要检测其他分支需要安装开发版或者企业版。以下记录gitlab、sonarqube的安装配置过程(centos内网环境)。

 

一、安装gitlab(社区版)、gitlab-runner

说明:gitlab-runner是gitlab ci自动化流水线的一个服务,主要作用是用于配合gitlab实现自动化执行相关动作,例如自动化的编译、部署、测试等

1、安装gitlab依赖项policycoreutils-python;

2、安装perl环境(有可能不需要,但是我安装时提示了,服务器没有perl);

3、安装git、安装gitlab;

4、修改gitlab的配置文件将external_url改成实际的服务器ip以及想要的端口号,如external_url 'http://172.18.88.45:8055'

5、执行命令gitlab-ctl reconfigure 重启gitlab服务(该过程会很久);

6、访问系统,使用root账号登录(初始密码在/etc/gitlab/initial_root_password里)、修改密码;

7、修改系统为中文:root账号-偏好设置-本地化里,语言选择中文即可(http://172.18.88.45:8055/-/profile/preferences)

8、安装gitlab-runner(网上有提到gitlab-runner的版本最好与gitlab保持一致,否则可能会有意外情况。我这边装的版本是一致的),修改服务配置文件,将用户改为root。默认是gitlab-runner,不改可能有权限问题;

vi /etc/systemd/system/gitlab-runner.service

ExecStart=/usr/bin/gitlab-runner "run" "--working-directory" "/home/gitlab-runner" "--config" "/etc/gitlab-runner/config.toml" "--service" "gitlab-runner" "--user" "root"

重启服务

systemctl daemon-reload

systemctl restart gitlab-runner

  

二、安装sonarqube(社区版)、sonar-scanner

说明:sonar-scanner主要租用是用于扫描指定代码漏洞,并将结果推送至sonarqube服务器保存查看。这两个一般安装在gitlab服务器上。

1、安装jdk11;

2、修改文件句柄数(最大文件数)和用户最大进程数限制;vi /etc/security/limits.conf

* soft nofile 65536
* hard nofile 65536
* soft nproc 655350
* hard nproc 655350

3、安装数据库,一般选择postgresql(以postgresql13为例);

a.#创建数据目录(位置自定)
mkdir -p /home/data/postgresql-13.0/

b.#修改目录的属主属组
chown postgres:postgres -R /home/data/postgresql-13.0/

c.#初始化pgsql
sudo -u postgres /usr/pgsql-13/bin/initdb --encoding=UTF-8 --username=postgres --pgdata=/home/data/postgresql-13.0/data
d.#记录配置文件路径

vi /home/data/postgresql-13.0/data/postgresql.conf

listen_addresses = '172.18.88.44' # what IP address(es) to listen on;

e.#定义哪些服务器、可以用什么样的方式,访问postgresql

/home/data/postgresql-13.0/data/pg_hba.conf

host all all 0.0.0.0/0 md5
f.#修改service文件中数据目录

vi /usr/lib/systemd/system/postgresql-13.service

Environment=PGDATA=/home/data/postgresql-13.0/data/
g.#重载服务
systemctl daemon-reload 

h.#启动postgresql
systemctl start postgresql-13
systemctl enable postgresql-13

 4、创建sonarqube使用的数据库和用户

psql -U postgres #连接数据库(此命令会用postgres用户,默认连入postgres数据库。-U指定用户 -d指定数据库)
#新建用户sonarqube,密码xxxxxx
create user sonarqube with password 'xxxxxx';
#创建数据库sonarqube_9_6并指定owner为sonarqube
create database sonarqube_9_6 with owner sonarqube;
#授权sonarqube用户在数据库sonarqube_9_6拥有所有权限
grant all on database sonarqube_9_6 to sonarqube;

 5、安装sonarqube,修改配置文件

#创建用户sonar,因为sonarqube会用到ES,ES不能用root用户启动
useradd sonar

#解压包
unzip sonarqube-9.6.1.59531.zip

 #修改目录的属主属组

chown -R sonar:sonar sonarqube-9.6.1.59531/

#修改配置文件,postgresql连接配置
sonar.jdbc.username=sonarqube
sonar.jdbc.password=xxxxxx
sonar.jdbc.url=jdbc:postgresql://xx.xx.xx.xx:5432/sonarqube_9_6

#端口配置
sonar.web.port=9000

6、启动sonarqube

sudo -u sonar /home/soft/sonarqube-9.6.1.59531/bin/linux-x86-64/sonar.sh start

7、汉化的话,可以

将下载好的汉化包(sonar-l10n-zh-plugin-9.6.jar)移动到插件目录下,然后重启一下sonarqube服务即可
/home/soft/sonarqube-9.6.1.59531/extensions/plugins/

8、安装sonar-scanner

a、修改配置文件(假设安装在/usr/local/sonar-scanner下)

 vi /usr/local/sonar-scanner/conf/sonar-scanner.properties

sonar.host.url=http://172.18.88.44:9000 #sonarqube服务器url
sonar.login=XXXXXXXXXX  #在sonarqube里配置的令牌,后面会讲到在sonarqube里怎么配置
sonar.sourceEncoding=UTF-8 #Default source code encoding

b、修改系统配置文件,增加scanner的配置

vi /etc/profile

export SONAR_SCANNER_HOME=/usr/local/sonar-scanner
export PATH=${SONAR_SCANNER_HOME}/bin:${PATH}

 c、重载配置文件

source /etc/profile

d、查看sonar-scanner是否启动了

sonar-scanner -v

  

 三、gitlab与sonarqube的集成

gitlab端:

1、选择具体想要启动CI/CD的项目-设置-CI/CD-Runner,创建令牌,用于gitlab-runner的身份认证

 2、在命令行中执行 gitlab-runner register  ,进行gitlab-runner的注册配置。按照提示,输入相关的gitlab服务地址、令牌token、唯一标识、描述等。全部完成之后,回到gitlab页面中,可以看到可用的指定Runner(上图中的CheckCode)。

修改runner,把运行未标记的作业勾上:

 

 sonarqube端:

1、使用admin登录,配置-ALM-GitLab-创建配置,配置GitLab服务器的信息:

 2、配置完毕后,就可以设置项目相关内容了:项目-新增项目-GitLab,选择需要从gitlab中进行分析的项目(会要求输入gitlab的令牌,用于访问gitlab上的项目。如果前面配置没问题,应该可以看到gitlab中的项目。注意,看到的项目范围跟你输入的gitlab令牌对应的用户权限有关系)

 3、根据项目代码构建方式选择对应的技术:

 4、按照提示创建sonarqube的令牌并在gitlab的ci/cd配置页面中建立对应的变量:

 5、复制.getlab-ci.yml配置文件内容,完成教程,到gitlab对应的项目-ci/cd-编辑器中,粘贴对应的内容

 

 注意:麻烦的(坑)地方来了,由于我们的服务器在内网无法访问互联网,所以默认的脚本需要修改不联网方式,同时需要安装项目对应的sonarscanner(本示例中,安装的是net版本的)、提前将项目依赖包上传到服务器并在脚本中指定位置,否则运行不起来:

windows下查看本地的nuget包位置命令:dotnet nuget locals all --list  需要将本地的package内容上传到服务器上。

 

 完成后提交更改,就可以跑起来了。通过在代码端修改代码并提交gitlab,将会触发扫描任务:

 到sonarqube管理页面中查看扫描结果:该项目没有安全漏洞,有2个bug