安全系统建设-SonarQube实现GitLab代码审计

最近领导让我调研一下代码审计的开源工具,发现sonarqube这个系统能够满足我们的需求,可以与gitlab联动进行代码审计。

一、代码审计需求及方案

满足gitlab一旦提交代码则进行一次代码检测,sonarqube+sonar-scanner+gitlab-runner+gitlab架构设计图


1、RD提交代码到gitlab

2、触发gitlab-ci,启动gitlab-runner docker准备运行测试

3、gitlab-ci触发sonar_runner docker镜像启动,并进行代码分析

4、代码分析结果在commit记录作一次comment

5、gitlab管理员合并代码至develop或master分支

6、触发gitlab-ci,启动gitlab-runner docker准备运行测试

7、gitlab-ci触发sonar_runner docker镜像启动,并进行代码分析

8、代码分析结果保存至SonarQube平台数据库中

9、安全访问web站点,查看分析结果

二、环境部署

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

为了性能最优,将不同模块部署在不同的机器上:

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 并修改默认密码

配置--配置–权限–开启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

根据提示进行注册

注册成功提示: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

远程访问数据库设置

#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

创建数据库用户sonar,创建数据库sonar

三、开始使用

sonarqube填入gitlab信息

访问http://192.168.226.130:9000,在配置--Gitlab中填入URL和token,注意这里的token

从gitlab的user settings -- account -- private token获得token

填入到sonarqube中

给项目添加.gitlab-ci.yml

security_sonar:   

    stage: test

    script:    

      - sonar-scanner -Dsonar.projectKey=项目名称

    tags:    

      - tags名称

四、报错及解决方案汇总

报错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:

根据报错信息修改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

报错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:

在网上找到https://github.com/gabrie-allaigre/sonar-gitlab-plugin/issues/213,这个只要跟着我上面部署的版本安装,就不会出错,需要升级sonar-gitlab-plugin

报错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扩容到8c16g,并且做如下操作:

vi /etc/profile

export SONAR_SCANNER_OPTS="-Xmx16384m"

source /etc/profile

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容