一.简介

代码上线前需要进行安全检查包括,常见的是扫描工具sonarqube/nessus,以及常见的在线沙箱如微步云沙箱等。SonarQube是一个开源的代码质量管理系统,用于检测代码中的错误,安全问题和代码规范。它可以现有的Gitlab、Jenkins集成,以便在项目拉取后进行连续的代码检查。官方社区版本 下载地址,官方安装与 使用文档。实例组件:

代码上线之安全检查sonarqube9.9.6安装及java代码分析_postgresql

二.安装

#安装要求
8C 16G 64位系统 
SonarQube 服务器需要 Java 版本 17,而 SonarQube 扫描仪需要 Java 版本 11 或 17
postgresql 11及以上
  • 1.
  • 2.
  • 3.
  • 4.

0.安装jdk/postgresql/git

#关闭防火墙和selinux
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
setenforce 0
systemctl disable firewalld
systemctl stop firewalld
#安装jdk
#配置yum源
cd /etc/yum.repos.d/
gzip CentOS-*
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#卸载原有的openjdk-1.8
rpm -qa | grep jdk*
yum -y remove java-1.8.0-openjdk*
#安装openjdk 17
#下载
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
#解压
tar -xf jdk-17_linux-x64_bin.tar.gz -C /usr/local
#软连接
ln -s /usr/local/jdk-17.0.12 /usr/local/jdk
#环境变量配置
cat >>/etc/profile<<'EOF'
export JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
EOF
source /etc/profile
#添加用户
useradd sonar
#sonar用户生效
su - sonar
source /etc/profile
java -version
#安装常用工具git
yum -y install git
#配置postgresql12yum源
cat >/etc/yum.repos.d/pgsql.repo<<'EOF'
[psql]
name=psql repo
baseurl=https://mirror.tuna.tsinghua.edu.cn/postgresql/repos/yum/12/redhat/rhel-7.4-x86_64/
enabled=1
gpgcheck=0
EOF
#安装pgsql12
yum -y install postgresql12-server
#初始化数据库
postgresql-12-setup initdb
#启动数据库
systemctl enable postgresql-12
systemctl start postgresql-12
#检查端口
ss -tlunp | grep 5432
#创建用户、数据库
su - postgres
psql
create user sonar with password 'alibaby';
create database sonar owner sonar;
grant all privileges on database sonar to sonar;
\q
#配置文件修改访问控制 添加对sonar用户和sonar库的信任
cd /var/lib/pgsql/12/data/
sed -i '/# IPv4 local connections:/a host  sonar   sonar    127.0.0.1/32     trust' pg_hba.conf  
#重启数据库
systemctl restart postgresql-12
#登录测试 提示口令输入密码alibaby,正常登录说明没问题
su - postgres
psql -h127.0.0.1 -Usonar -dsonar -W
\q
exit
#修改文件描述符
#切换到root用户
exit
sysctl -w vm.max_map_count=524288
sysctl -w fs.file-max=131072
ulimit -n 131072
ulimit -u 8192
cat >>/etc/security/limits.conf<<'EOF'
sonar   -   nofile   131072
sonar   -   nproc    8192
EOF
#修改内核参数
echo 'vm.max_map_count=524288' >>/etc/sysctl.conf
echo 'fs.file-max=131072' >>/etc/sysctl.conf
sysctl -p
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.

1.安装sonar

#下载安装包
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.9.6.92038.zip
#解压
unzip sonarqube-9.9.6.92038.zip -d /usr/local/
#软连接
ln -s /usr/local/sonarqube-9.9.6.92038/ /usr/local/sonarqube
#修改权限
chown -R sonar.sonar /usr/local/sonarqube/
#修改配置文件  连接数据库
cd /usr/local/sonarqube/conf/
sed -i '/#sonar.jdbc.username=/i sonar.jdbc.username=sonar' sonar.properties 
sed -i '/#sonar.jdbc.username=/i sonar.jdbc.password==alibaby' sonar.properties 
sed -i '/#sonar.jdbc.username=/i sonar.jdbc.url=jdbc:postgresql://localhost/sonar' sonar.properties 
#启动sonarqube sonar用户启动
su - sonar 
/usr/local/sonarqube/bin/linux-x86-64/sonar.sh start
#sonarqube启停
/usr/local/sonarqube/bin/linux-x86-64/sonar.sh start|stop|restart
#检查端口
netstat -tlunp | grep 9000
#日志查看/usr/local/sonarqube/logs
tailf /usr/local/sonarqube/logs/nohub.log
tailf /usr/local/sonarqube/logs/web.log
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.

2. 访问测试  http://192.168.77.151:9000 初始用户名口令admin/admin

代码上线之安全检查sonarqube9.9.6安装及java代码分析_sonarqube_02

代码上线之安全检查sonarqube9.9.6安装及java代码分析_代码上线_03

代码上线之安全检查sonarqube9.9.6安装及java代码分析_postgresql_04

3.中文包插件下载  下载地址


#下载中文包 sonar-l10n-zh-plugin-9.9.jar
#上传到插件所在目录
cd /usr/local/sonarqube/extensions/plugins
rz sonar-l10n-zh-plugin-9.9.jar
#更改所有者为sonar
chown -R sonar.sonar ../plugins/*
#重启服务
su - sonar -c "/usr/local/sonarqube/bin/linux-x86-64/sonar.sh restart"
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

代码上线之安全检查sonarqube9.9.6安装及java代码分析_postgresql_05

三.排错

错误1:

加载主类 org.sonar.application.App 时出现 LinkageError

java.lang.UnsupportedClassVersionError: org/sonar/application/App has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0

解决:
卸载原有的jdk8,安装jdk17,并配置环境变量
多个JAVA环境,官方指导export SONAR_JAVA_PATH="path/to/java_home/bin/java"
  • 1.
  • 2.
  • 3.

错误2:Suppressed: org.postgresql.util.PSQLException: 致命错误: 用户 "sonar" Ident 认证失败

解决:
配置文件修改访问控制 添加对sonar用户和sonar库的信任
  • 1.
  • 2.

四.本地java代码安全检查示例

1.新建项目

代码上线之安全检查sonarqube9.9.6安装及java代码分析_sonarqube_06

2.填写项目名称

代码上线之安全检查sonarqube9.9.6安装及java代码分析_postgresql_07

3.选本地分析项目

代码上线之安全检查sonarqube9.9.6安装及java代码分析_sonarqube_08

4.创建令牌

代码上线之安全检查sonarqube9.9.6安装及java代码分析_postgresql_09

#令牌
Analyze "sonar-javae": sqp_20da1964f8e897e7e6af9f7d54b9afb92fee2307
  • 1.
  • 2.

代码上线之安全检查sonarqube9.9.6安装及java代码分析_postgresql_10

5.选maven

代码上线之安全检查sonarqube9.9.6安装及java代码分析_代码上线_11

#项目目录下执行如下命令
mvn clean verify sonar:sonar \
  -Dsonar.projectKey=sonar-javae \
  -Dsonar.host.url=http://192.168.77.151:9000 \
  -Dsonar.login=sqp_20da1964f8e897e7e6af9f7d54b9afb92fee2307
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

6.进入项目目录执行以上命令

代码上线之安全检查sonarqube9.9.6安装及java代码分析_postgresql_12

7.分析完成 查看结果的地址(第一步的页面刷新也行)

代码上线之安全检查sonarqube9.9.6安装及java代码分析_代码上线_13

8.结果查看

代码上线之安全检查sonarqube9.9.6安装及java代码分析_sonarqube_14