---
# System prepended metadata

title: 使用 SonarQube 做專案弱點掃描
tags: [資安]

---

# 使用 SonarQube 做專案弱點掃描

>安裝 SonarQube on Rocky Linux

## 安裝 Java
```
sudo dnf install java-17-openjdk-devel -y
```

:::warning
大型專案在維護時才需要照已下流程安裝
若是小型測試請[點此](#安裝sonarqube簡易版本)

:::

## 安裝資料庫（以 PostgreSQL 為例）
省略

## 建立資料庫與使用者給 SonarQube 用：
```
sudo su - postgres
```
```
psql
```
```
CREATE USER sonar WITH ENCRYPTED PASSWORD 'sonar123';
```
```
CREATE DATABASE sonardb OWNER sonar;
```
```
GRANT ALL PRIVILEGES ON DATABASE sonardb TO sonar;
```
```
\q
```
```
exit
```

## 調整系統參數
SonarQube 需要較高的 vm.max_map_count、fs.file-max 等系統設定。
```
sudo tee -a /etc/sysctl.conf <<EOF
vm.max_map_count=262144
fs.file-max=65536
EOF
```
```
sudo sysctl -p
```

## 建專用使用者、下載 SonarQube
```
sudo useradd -m -d /opt/sonarqube -s /bin/bash sonar
```
```
cd /tmp
```
```
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-25.9.0.112764.zip
```
```
unzip sonarqube-25.9.0.112764.zip
```
```
sudo mv sonarqube-25.9.0.112764 /opt/sonarqube
```
```
sudo chown -R sonar:sonar /opt/sonarqube
```

## 配置 SonarQube (sonar.properties)

設定資料庫連線、Web 主機與port：

```
sudo su sonar
```
```
 vim /opt/sonarqube/sonarqube-25.9.0.112764/conf/sonar.properties
```
```
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar123
sonar.jdbc.url=jdbc:postgresql://localhost/sonardb

sonar.web.host=0.0.0.0
sonar.web.port=9000
```

## 啟動 SonarQube
建立 /etc/systemd/system/sonarqube.service

```
exit
```
```
vim /etc/systemd/system/sonarqube.service
```
```
[Unit]
Description=SonarQube service
After=network.target

[Service]
Type=forking
# 啟動/停止指令改成完整路徑
ExecStart=/opt/sonarqube/sonarqube-25.9.0.112764/bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube/sonarqube-25.9.0.112764/bin/linux-x86-64/sonar.sh stop
ExecReload=/opt/sonarqube/sonarqube-25.9.0.112764/bin/linux-x86-64/sonar.sh restart

User=sonar
Group=sonar

# 系統限制
LimitNOFILE=65536
LimitNPROC=8192
TimeoutStartSec=240

# 設定環境變數（可選，視需要）
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk"
Environment="SONARQUBE_HOME=/opt/sonarqube/sonarqube-25.9.0.112764"

[Install]
WantedBy=multi-user.target
```

存檔後 reload systemd

```
sudo systemctl daemon-reload
```

啟用並啟動服務
```
sudo systemctl enable --now sonarqube
```

查看服務狀態
```
sudo systemctl status sonarqube
```

## 安裝sonarqube簡易版本
(供小型專案用, 已安裝正常版本請跳過)
```
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-25.9.0.112764.zip
```
```
unzip sonarqube-25.9.0.112764.zip
```
```
cd sonarqube-25.9.0.112764
```
```
bin/linux-x86-64/sonar.sh start
```
防火牆記得允許 9000 port 
```
sudo firewall-cmd --zone=public --add-port=9000/tcp --permanent
```
重設防火牆
```
sudo firewall-cmd --reload
```

## 安裝 sonarscan

```
cd ~
```
```
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-7.2.0.5079-linux-x64.zip
```

```
unzip sonar-scanner-cli-7.2.0.5079-linux-x64.zip
```

改名字
```
mv sonar-scanner-7.2.0.5079-linux-x64 sonar-scanner-7.2
```
```
echo 'export PATH=$PATH:$HOME/sonar-scanner-7.2/bin' >> ~/.bashrc
``` 
```
source ~/.bashrc
```
```
cd sonar-scanner-7.2/conf/
```

```
vim sonar-scanner.properties
```
設定你的 SonarQube URL
```
# SonarQube 伺服器位置
sonar.host.url=http://localhost:9000
```

設定好後去你要掃描的資料夾中建立 sonar-project.properties
```
vim sonar-project.properties
```

```
sonar.projectKey=my_python_project
sonar.projectName=My Python Project
sonar.projectVersion=1.0
sonar.sources=.
sonar.language=py
sonar.sourceEncoding=UTF-8
```

先去 sonarqube 網頁取得 token

![2025-09-23 17 22 46](https://hackmd.io/_uploads/S1NWDke2lx.png)

![2025-09-23 17 23 19](https://hackmd.io/_uploads/rknzPJl3ll.png)

![2025-09-23 17 23 49](https://hackmd.io/_uploads/SJjEPJlhel.png)

建立一個 token 
![image](https://hackmd.io/_uploads/BJjBPJghxx.png)

接著會顯示 token, 請妥善保存

執行掃描
```
sonar-scanner -Dsonar.login=<你的 token>
```

掃描完成結果
![image](https://hackmd.io/_uploads/H125PJx3el.png)

可以到網頁上去看分析報告
![image](https://hackmd.io/_uploads/r1U2P1g3ge.png)



















