Confluence 挖礦病毒 升級現有系統


Confluence 挖礦病毒 升級現有系統

背景

服務器很多服務都很卡,通過檢查發現是一起運行的confluence異常,被挖礦病毒挖礦,華為雲官網也有說明。 知道問題之后,處理方式就是將現有的問題版本升級成安全版本(可在官網查看安全版本),我們選擇的是Atlassian Confluence Server/Data Center 7.13.0,由於之前只是使用,這個confluence之前搭建的大神已經離職了,所以讓我重新整,中間經歷了不少,也學了不少東西,在此記錄一下。

說明:現有的環境都是在Linux的 docker 部署的,我在升級的時候也對docker 有了更深的了解,之前也就是知道一丟丟。

方案:新建一個安全版本的 confluence(用一個新的數據庫),然后將數據庫鏈接改到老的數據庫上面去

場景復現

由於現在用的數據也還蠻多,蠻重要,又不知道在升級過程會遇到啥情況,所以我處理的第一步是在自己的電腦上還原場景,然后在本地進行升級測試,然后再到現有環境操作的。

本地搭建問題版本

1、獲取鏡像
有三個鏡像需要獲取,通用的數據庫 postgres(11.2是因為現有的就用的這個,其實不用這個版本的也沒事用最新的);問題版本confluence:(cptactionhank/atlassian-confluence:6.14.0);安全版本(atlassian/confluence-server:7.13)

docker pull postgres:11.2
docker pull cptactionhank/atlassian-confluence:6.14.0
docker pull atlassian/confluence-server:7.13

2、環境部署安裝

2.1 部署postgres

[root@localhost ~] mkdir /d/dockerData/sqlData # 在系統根目錄創建存儲數據的目錄
[root@localhost ~] docker run --name postgres -e POSTGRES_PASSWORD=123456 --restart always --publish 5432:5432 -v /d/dockerData/sqlData:/var/lib/postgresql/data -d postgres:11.2 # 讓 postgres 跑起來,注意-e POSTGRES_PASSWORD=123456 這個是必須的
[root@localhost ~] docker exec -it postgres bash  # 進入 postgres 容器,也就是postgres運行的實體
root@fb7aaeb61067:/ su postgres  # 進入后就這樣了,切換到 postgres 用戶
postgres@fb7aaeb61067:/ psql       # 進入 postgres 

postgres= create user confluence WITH PASSWORD '123456';  # 創建 confluence 用戶
CREATE ROLE
postgres= CREATE DATABASE "confluence" WITH OWNER = "confluence"; # 創建 confluence 要用的數據庫,到這兒數據庫就准備完成了
CREATE DATABASE
postgres= exit  # 退出數據庫
postgres@fb7aaeb61067:/$ exit # 退出當前用戶
root@fb7aaeb61067:/ exit      # 退出容器
[root@localhost ~] 

2.2 部署 confluence

[root@localhost ~] mkdir /d/dockerData/confluence/data # 在系統根目錄創建存儲數據的目錄
[root@localhost ~] docker run --name confluence --detach --publish 8090:8090 --publish 8091:8091 --restart always -v /d/dockerData/confluence/data:/var/atlassian/confluence cptactionhankuence:6.14.0 # 讓問題版本的confluence跑起來

在瀏覽器訪問confluence,http://{ip}:8090/替換自己的ip地址

note: 如果報錯,需要讀寫權限,執行授權命令即可:chmod -R 777 /d/dockerData/confluence 然后重啟 confluence docker restart confluence

想要破解,參看這片文章Confluence破解,別人寫過的不想再寫了;需要注意的是告訴你們怎么找到對應的文件,其他就按照上面的那個做吧。需要出一期的話,可以評論一下。

1、查看confluence的運行目錄
使用命令查看當前confluence的一些基本信息,docker inspect confluence,我們要用到的如下圖所示,
這幾個目錄其中MergedDir(/var/lib/docker/overlay2/b6001125fefd698e3c370f86f87f7b7f6d055eb740445008f08abd7bab3ad5e1/merged)這個只有當confluence處於運行狀態的時候才會存在,如果你進去沒有看到很正常。

"GraphDriver": {
         "Data": {
             "LowerDir": "/var/lib/docker/overlay2/b6001125fefd698e3c370f86f87f7b7f6d055eb740445008f08abd7bab3ad5e1-init/diff:/var/lib/docker/overlay2/b9962167cb303ddb46e738e69d4d972c7d0da6b7c2e74c25213571d198114a25/diff:/var/lib/docker/overlay2/e843d64b208f0c4c6ba5ee1a3ddbc5af6c7dad20b9e7b566a6c79299cb740cc0/diff:/var/lib/docker/overlay2/361252f1ae37a2f894074bb49f4ab21651526689fa31bc7cd355261475a12e4c/diff:/var/lib/docker/overlay2/28ecaf8ef11d78bfc006d0f5dacedf5e1e036726cf5b6c6466f55bd6de12dc23/diff:/var/lib/docker/overlay2/9012db03194ab642501ec18df815f070033999f936a76255dc5e317d029daf6f/diff",
             "MergedDir": "/var/lib/docker/overlay2/b6001125fefd698e3c370f86f87f7b7f6d055eb740445008f08abd7bab3ad5e1/merged",
             "UpperDir": "/var/lib/docker/overlay2/b6001125fefd698e3c370f86f87f7b7f6d055eb740445008f08abd7bab3ad5e1/diff",
             "WorkDir": "/var/lib/docker/overlay2/b6001125fefd698e3c370f86f87f7b7f6d055eb740445008f08abd7bab3ad5e1/work"
         },
         "Name": "overlay2"

2、 查找對應的目錄,主要是為了找到文件,后續需要copy來copy去的
比如 /opt/atlassian/confluence/confluence/WEB-INF/lib/atlassian-extras-decoder-v2-3.4.1.jar對應的是這個目錄下的文件/var/lib/docker/overlay2/b6001125fefd698e3c370f86f87f7b7f6d055eb740445008f08abd7bab3ad5e1/merged/opt/atlassian/confluence/confluence/WEB-INF/lib/atlassian-extras-decoder-v2-3.4.1.jar

至此,兩個環境就復現了,我們去操作一下,弄一點數據,包括上傳附件啥的,后面可以進行遷移測試。

遷移

剛開始想了好幾個方案,都試了一遍,失敗了好幾次,我這兒直接開始我最后成功的這個方案吧。

方案:新建一個安全版本的 confluence,然后將數據庫鏈接改到老的數據庫上面去。下面我們講一下詳細的過程!

1、創建初始化要用的數據庫postgres
因為新建的如果鏈接老的,它會提示要重寫數據庫,重寫可不就完蛋了,這兒我們臨時建一個postgres數據庫備用

[root@localhost ~] docker run --name postgresnew -e POSTGRES_PASSWORD=123 --restart always --publish 5433:5432 -d postgres:11.2 # 運行一個新的 postgres 名字叫 postgresnew
[root@localhost ~] docker exec -it postgresnew bash  # 進入 postgres 容器,也就是postgres運行的實體
root@72c46c58b2a8:/ su postgres
postgres@72c46c58b2a8:/ psql
postgres= create user confluence WITH PASSWORD '123456';  # 創建 confluence 用戶
CREATE ROLE
postgres= CREATE DATABASE "confluence" WITH OWNER = "confluence"; # 創建 confluence 要用的數據庫,到這兒數據庫就准備完成了
CREATE DATABASE
postgres= exit                # 退出數據庫
postgres@72c46c58b2a8:/$ exit # 退出當前用戶
root@72c46c58b2a8:/ exit      # 退出容器
[root@localhost ~] 

注意這里將新的端口映射到了 5433,另外沒有指定 -v 參數,就是用docker 自己內部的存儲數據了(也在你的機器上,查找方法和上面破解的方法一樣)

2、 搭建新的安全版本的 Confluence 7.13

[root@localhost ~] docker stop confluence   # 停掉舊的
[root@localhost ~] mkdir -p /d/dockerData/confluenceNew/data # 創建存儲新的
[root@localhost ~] docker run --name confluenceNew --detach --publish 8090:8090 --publish 8091:8091 --restart always -v /d/dockerData/confluenceNew/data:/var/atlassian/application-data/confluence atlassian/confluence-server:7.13 # 跑一個安全版本的confluence,這里要注意前后兩個版本運行數據的目錄 application-data
[root@localhost ~] docker cp /d/atlassian-agent.jar confluenceNew:/opt/atlassian/confluence/   # 拷貝一個代理的jar包 破解用的,參見 https://gitee.com/pengzhile/atlassian-agent
[root@localhost ~] docker exec -it confluenceNew bash  # 進入 新的confluence 
root@6ad1c13b2ea6:/var/atlassian/application-data/confluence echo -e '\nexport CATALINA_OPTS="-javaagent:/opt/atlassian/confluence/atlassian-agent.jar ${CATALINA_OPTS}"' >> /opt/atlassian/confluence/bin/setenv.sh  # 在confluence配置里面設置從這個代理啟動,這個是看了后面鏈接里的一個破解的文檔,我看它自己打包了一個,里面有一句這個,我搜索和琢磨了一下,應該是要修改這個文件,結果發現自己的想法是真確的,然后這個讓我對 docker file 也有了一些基本的認知
root@6ad1c13b2ea6:/var/atlassian/application-data/confluence exit  # 退出 confluenceNew
[root@localhost ~] docker restart confluenceNew
[root@localhost ~] java -jar /d/atlassian-agent.jar -d -m test@qq.com -n confluence -p conf -o http://192.168.31.11 -s B4Y8-H71P-VBXN-TBFK # 輸入這個可以得到一個密鑰,用它開啟

訪問confluence,http://{ip}:8090/替換自己的ip地址,
密鑰用上面生成的,然后數據庫配置需要特別注意,的用那個臨時的數據庫(我這兒只是端口不一樣,其他和那個一模一樣就是為了后面改的少),如圖:

dbtemp

點擊直到 新的 confluence 完成。

刪除atlassian-agent.jar
rm -rf /d/atlassian-agent.jar

3、 遷移(數據庫+confluence附件)

修改新的數據庫連接 /d/dockerData/confluenceNew/data/confluence.cfg.xml

vim /d/dockerData/confluenceNew/data/confluence.cfg.xml

#  <property name="hibernate.connection.url">jdbc:postgresql://192.168.31.11:5433/confluence</property>
# 修改這行的 5433 為 5432 就 OK 了;因為建的臨時數據庫,高保真呀,所以改的少

[root@localhost ~] docker restart confluenceNew # 重啟 confluenceNew

我們重新訪問新的confluence,http://{ip}:8090/替換自己的ip地址,我們會發現報錯了

Description Time Level Exception
This installation of Confluence has failed one or more bootstrap configuration checks. Please check the logs for details. 2021-11-29 09:35:30 fatal Confluence will not start up because the build number in the home directory [8703] doesn't match the build number in the database [7901].

如圖:

build number

處理方式: 千萬記得改配置文件里面的 build number 不要更改數據庫里面的,要不然會有其他問題。

vi /d/dockerData/confluenceNew/data/confluence.cfg.xml
#  <buildNumber>8703</buildNumber>
# 修改這個 8703 為 7901 就 OK 了;
[root@localhost ~] docker restart confluenceNew # 重啟 confluenceNew

[root@localhost ~] docker stop postgresnew # 停止臨時的 postgres,沒用了
[root@localhost ~] docker container rm postgresnew  # 刪除臨時的 postgres
[root@localhost ~] docker volume prune     # 清空剛刪除的 卷,省空間

[root@localhost ~] rm -rf /d/dockerData/confluenceNew/data/attachments # 刪除新的里面的附件文件夾,沒有的話可以不處理
[root@localhost ~] mv /d/dockerData/confluence/data/attachments /d/dockerData/confluenceNew/data/ # 老系統的附件移到新系統
[root@localhost ~] cd /d/dockerData/confluenceNew/data/
[root@localhost data] ls -lh   # 列出文件,就能看出有個貓膩, 有個 daemon 
total 84K
drwxr-x---. 2   2002   2002  214 Nov 29 07:26 analytics-logs
drwxr-x---. 3 daemon daemon   20 Nov 29 00:54 attachments  # 就是這行,我們的處理一下才能讓附件正常
drwxr-x---. 2   2002   2002    6 Nov 29 04:22 backups
drwxr-x---. 2   2002   2002    6 Nov 29 04:20 bundled-plugins
-rw-r-----. 1   2002   2002 5.8K Nov 29 07:27 confluence.cfg.xml
-rw-r--r--. 1   2002   2002    1 Nov 29 07:23 docker-app.pid
drwxr-x---. 2   2002   2002    6 Nov 29 04:21 imgEffects
drwxr-x---. 5   2002   2002 4.0K Nov 29 07:27 index
drwxr-x---. 2   2002   2002   62 Nov 29 07:07 journal
-rw-r-----. 1   2002   2002    0 Nov 29 04:20 lock
drwxr-x---. 3   2002   2002   19 Nov 29 04:24 log
drwxr-x---. 2   2002   2002 4.0K Nov 29 04:01 logs
drwxr-x---. 2   2002   2002 4.0K Nov 29 07:24 plugins-cache
drwxr-x---. 5   2002   2002   71 Nov 29 04:20 plugins-osgi-cache
drwxr-x---. 2   2002   2002    6 Nov 29 04:20 plugins-temp
drwxr-x---. 2   2002   2002  107 Nov 29 07:06 recovery
drwxr-x---. 3   2002   2002   46 Nov 29 04:24 shared-home
-rw-r-----. 1   2002   2002  450 Nov 29 04:24 synchrony-args.properties
drwxr-x---. 2   2002   2002    6 Nov 29 04:31 temp
drwxr-x---. 3   2002   2002   18 Nov 29 04:23 viewfile
drwxr-x---. 2   2002   2002  36K Nov 29 07:36 webresource-temp

[root@localhost data]  chown -R 2002:2002 attachments # 這樣子就OK了

訪問 confluence,一切應該都正常了。

其他問題

1、 空間目錄里面看不到全部的空間
解決方法: 一般配置->內容索引 (重建索引就OK了)

2、 更改域名配置后重啟被修改
解決辦法: 參考官網的文章server-xml-is-overwritten-by-Dockerfile

我的操作備份一份模板文件,然后在原來的模板文件里面改的

[root@localhost attachments] docker exec -it confluenceNew bash
root@6ad1c13b2ea6:/var/atlassian/application-data/confluence cd /opt/atlassian/etc
root@6ad1c13b2ea6:/opt/atlassian/etc ls -lh
total 20K
-rw-rw-rw-. 1 root root 4.8K Nov 13 16:15 confluence.cfg.xml.j2
-rw-rw-rw-. 1 root root   82 Nov 13 16:15 confluence-init.properties.j2
-rw-rw-rw-. 1 root root 3.1K Nov 13 16:15 seraph-config.xml.j2
-rw-rw-rw-. 1 root root 3.4K Nov 13 16:15 server.xml.j2  # 就是這個文件,copy一份修改就行了,找不到文件記得看第一個破解的那兒會有介紹怎么找對應的docker存在本地的文件

總結

一開始的思路還是沒有想明白,最后搞定了之后感覺剛開始有點傻了,不過這個過程中也是學到了很多,中途補了linux的一些知識,再加上 docker 的一些東西,真的是收獲良多。

參考鏈接

Confluence破解
Docker 部署 Confluence(破解版)
docker confluence挖礦病毒處理及版本升級


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM