在維護 vsftpd 虛擬使用者系統時,若遺失帳號密碼明文紀錄,需查看 Berkeley DB 格式的 vsftpd_login.db 內容。本文介紹使用 db_dump 工具導出資料庫資料的方法。
vsftpd 虛擬使用者認證常使用 db_load 將帳號密碼文字檔轉換為 .db 二進位資料庫檔(如 /etc/vsftpd/vsftpd_login.db)。此格式無法直接用 cat、less 閱讀。若未保留原始文字檔,管理員將無法得知現有帳號清單。
db_dump 是 Berkeley DB 套件提供的導出工具,通常位於 /usr/bin/db_dump。它是 db_load 的對應反向工具。
ls -l /usr/bin/db_*
# 應看到 db_dump, db_load, db_stat 等
/usr/bin/db_dump -p /etc/vsftpd/vsftpd_login.db
參數說明:
-p:以可列印字元輸出(預設為十六進位),方便閱讀帳號密碼VERSION=3
format=print
type=hash
db_pagesize=4096
HEADER=END
webuser1
password123
webuser2
password456
DATA=END
輸出格式為鍵值對交替出現:奇數行帳號,偶數行密碼,與 db_load 輸入格式一致。
# 若為 Btree 格式
db_dump -p -t btree /etc/vsftpd/vsftpd_login.db
db_dump -p /etc/vsftpd/vsftpd_login.db | grep -v '^VERSION\|^format\|^type\|^db_pagesize\|^HEADER=END\|^DATA=END'
若需修改帳號密碼:
# 1. 導出並編輯
db_dump -p /etc/vsftpd/vsftpd_login.db > vuser.txt
vi vuser.txt # 修改帳號密碼
# 2. 重新建立資料庫
db_load -T -t hash -f vuser.txt /etc/vsftpd/vsftpd_login.db.new
mv /etc/vsftpd/vsftpd_login.db.new /etc/vsftpd/vsftpd_login.db
chmod 600 /etc/vsftpd/vsftpd_login.db
chmod 600 僅 root 可讀-t hash 必須與原資料庫類型一致(vsftpd 預設 Hash).db 檔restorecon /etc/vsftpd/vsftpd_login.db若系統無 db_dump,可使用 Python bsddb3 模組(需安裝):
python3 -c "
import bsddb3.db as db
d = db.DB()
d.open('/etc/vsftpd/vsftpd_login.db', None, db.DB_HASH, db.DB_RDONLY)
cursor = d.cursor()
rec = cursor.first()
while rec:
print(rec[0].decode(), rec[1].decode())
rec = cursor.next()
d.close()
"
掌握 db_dump 讓你在接手無文檔的 vsftpd 系統時,也能快速掌握虛擬使用者清單,避免盲目重建造成服務中斷。