安全系統(tǒng)建設(shè)-SonarQube實(shí)現(xiàn)GitLab代碼審計(jì)

最近領(lǐng)導(dǎo)讓我調(diào)研一下代碼審計(jì)的開源工具,發(fā)現(xiàn)sonarqube這個系統(tǒng)能夠滿足我們的需求,可以與gitlab聯(lián)動進(jìn)行代碼審計(jì)。

一、代碼審計(jì)需求及方案

滿足gitlab一旦提交代碼則進(jìn)行一次代碼檢測,sonarqube+sonar-scanner+gitlab-runner+gitlab架構(gòu)設(shè)計(jì)圖


1、RD提交代碼到gitlab

2、觸發(fā)gitlab-ci,啟動gitlab-runner docker準(zhǔn)備運(yùn)行測試

3、gitlab-ci觸發(fā)sonar_runner docker鏡像啟動,并進(jìn)行代碼分析

4、代碼分析結(jié)果在commit記錄作一次comment

5、gitlab管理員合并代碼至develop或master分支

6、觸發(fā)gitlab-ci,啟動gitlab-runner docker準(zhǔn)備運(yùn)行測試

7、gitlab-ci觸發(fā)sonar_runner docker鏡像啟動,并進(jìn)行代碼分析

8、代碼分析結(jié)果保存至SonarQube平臺數(shù)據(jù)庫中

9、安全訪問web站點(diǎn),查看分析結(jié)果

二、環(huán)境部署

采用docker快速部署,但我們所使用的gitlab8 和最新的gitlab-runner docker不兼容。故部署這個https://gitlab-ci-multi-runner-downloads.s3.amazonaws.com/v1.11.2/index.html

為了性能最優(yōu),將不同模塊部署在不同的機(jī)器上:

192.168.226.130:sonarqube docker

192.168.226.131:gitlab-runner、sonar-scanner、maven

192.168.226.132:postgresql

sonarqube docker 安裝

下載插件包?sonar-gitlab-plugin-4.1.0-SNAPSHOT.jar(gitlab插件)、sonar-l10n-zh-plugin-1.27.jar(漢化包)

#vim Dockerfile

寫入:

FROM sonarqube

ADD sonar-l10n-zh-plugin-1.27.jar /opt/sonarqube/extensions/plugins/

ADD sonar-gitlab-plugin-4.1.0-SNAPSHOT.jar /opt/sonarqube/extensions/plugins

#docker pull sonarqube

#docker build -t sonarqube:zh .

#docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 -e SONARQUBE_JDBC_USERNAME=sonar -e SONARQUBE_JDBC_PASSWORD=xxx -e SONARQUBE_JDBC_URL=jdbc:postgresql://192.168.226.132:5432/sonar?--add-host=database:192.168.226.132 sonarqube:zh

訪問:http://192.168.226.130:9000/sessions/new?return_to=%2F?并修改默認(rèn)密碼

配置--配置–權(quán)限–開啟force user authentication

如果需要上傳文件到容器中的話

docker cp 本地文件 容器ID:上傳目錄

gitlab-runner 安裝

#wget -O /usr/local/bin/gitlab-runner?https://gitlab-ci-multi-runner-downloads.s3.amazonaws.com/v1.11.2/binaries/gitlab-ci-multi-runner-linux-amd64

#chmod +x /usr/local/bin/gitlab-runner

#useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

#gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner

#gitlab-runner start

#gitlab-runner register

根據(jù)提示進(jìn)行注冊

注冊成功提示:Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!?

在gitlab上查看

sonar-scanner 安裝

# wget?https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.3.0.1492-linux.zip

# unzip?sonar-scanner-cli-3.3.0.1492-linux.zip

# mv sonar-scanner-3.3.0.1492-linux/ sonar-scanner-3.3.0/

# vi?sonar-scanner-3.3.0/conf/sonar-scanner.properties

sonar.host.url=http://192.168.226.130:9000

sonar.login=admin

sonar.password=xxx

# vi /etc/profile

export SONAR_SCANNER_HOME=/opt/sonar-scanner-3.3.0

export PATH=${SONAR_SCANNER_HOME}/bin:$PATH

# source /etc/profile

maven 安裝

wget?http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz

tar zvxf?apache-maven-3.6.1-bin.tar.gz

vi /etc/profile

export MAVEN_HOME=/opt/apache-maven-3.6.1

export PATH=${MAVEN_HOME}/bin:$PATH

source /etc/profile

postgresql 安裝

#下載軟件包postgresql-10.1.tar.gz

安裝路徑為/usr/local/pgsql/

#gunzip postgresql-10.1.tar.gz

#tar xf postgresql-10.1.tar

#./configure

#make

#make install

#adduser postgres

#mkdir /usr/local/pgsql/data

#chown postgres /usr/local/pgsql/data

#su - postgres

#/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

#/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &

#./pg_ctl start -D /usr/local/pgsql/data

遠(yuǎn)程訪問數(shù)據(jù)庫設(shè)置

#vim /usr/local/pgsql/data/postgresql.conf

listen_addresses=’localhost’ 改為 listen_addresses=’*’

#vim /usr/local/pgsql/data/pg_hba.conf?

添加 IPv4 remote address connections:

host all all 0.0.0.0/0 trust

創(chuàng)建數(shù)據(jù)庫用戶sonar,創(chuàng)建數(shù)據(jù)庫sonar

三、開始使用

sonarqube填入gitlab信息

訪問http://192.168.226.130:9000,在配置--Gitlab中填入URL和token,注意這里的token

從gitlab的user settings -- account -- private token獲得token

填入到sonarqube中

給項(xiàng)目添加.gitlab-ci.yml

security_sonar:? ?

????stage: test

????script:????

??????- sonar-scanner -Dsonar.projectKey=項(xiàng)目名稱

????tags:????

??????- tags名稱

四、報(bào)錯及解決方案匯總

報(bào)錯1:

ERROR: Error during SonarQube Scanner execution

ERROR: You must define the following mandatory properties?for?'Unknown': sonar.projectKey

ERROR:

ERROR: Re-run SonarQube Scanner using the -X?switch?to enable full debug logging.

解決方案1:

根據(jù)報(bào)錯信息修改sonar-scanner.properties?

sonar.host.url=http://192.168.226.130:9000

sonar.sourceEncoding=UTF-8

sonar.jdbc.url=jdbc:postgresql://192.168.226.132:5432/sonar

sonar.jdbc.username=sonar

sonar.jdbc.password=xxx

sonar.projectKey=allProjects

sonar.projectName=allProjects

sonar.projectVersion=1.0.0

sonar.login=admin

sonar.password=xxx

報(bào)錯2:

ERROR: Error during SonarQube Scanner execution

ERROR: com.talanlabs.sonar.plugins.gitlab.CommitPublishPostJob has unsatisfied dependency?'class com.talanlabs.sonar.plugins.gitlab.ReporterBuilder'?for?constructor?'public com.talanlabs.sonar.plugins.gitlab.CommitPublishPostJob(com.talanlabs.sonar.plugins.gitlab.GitLabPluginConfiguration,com.talanlabs.sonar.plugins.gitlab.SonarFacade,com.talanlabs.sonar.plugins.gitlab.CommitFacade,com.talanlabs.sonar.plugins.gitlab.ReporterBuilder)'?from org.sonar.core.platform.ComponentContainer$ExtendedDefaultPicoContainer@5b799640:348<[Immutable]:org.sonar.core.platform.ComponentContainer$ExtendedDefaultPicoContainer@3457cc8d:51<|

ERROR:

ERROR: Re-run SonarQube Scanner using the -X?switch?to enable full debug logging.

解決方案2:

在網(wǎng)上找到https://github.com/gabrie-allaigre/sonar-gitlab-plugin/issues/213,這個只要跟著我上面部署的版本安裝,就不會出錯,需要升級sonar-gitlab-plugin

報(bào)錯3:

ERROR: Error during SonarQube Scanner execution

ERROR: GC overhead limit exceeded

ERROR:

ERROR: Re-run SonarQube Scanner using the -X switch to enable full debug logging.

解決方案3:

增加sonar-scanner的性能,由4c8g擴(kuò)容到8c16g,并且做如下操作:

vi /etc/profile

export?SONAR_SCANNER_OPTS="-Xmx16384m"

source /etc/profile

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容