首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle Listener (tnslsnr) 未設密碼風險與 LSNRCTL 設定密碼完整步驟

     編輯:Oracle 資料庫基礎

風險描述

遠端 Listener 未設密碼,攻擊者可任意:

  • 關閉 Listener (LSNRCTL STOP)
  • 設定新密碼鎖定合法管理員
  • 查詢服務狀態、版本、端點等偵察資訊
  • 結合其他漏洞 (如 TNS Poison、CVE-2012-1675) 進一步滲透

預設安裝 不設密碼,必須主動配置。

LSNRCTL 互動式設定密碼流程


$ $ORACLE_HOME/bin/lsnrctl
LSNRCTL> CHANGE_PASSWORD
Old password: <直接 Enter,若原有密碼則輸入>
New password: <輸入新強密碼>
Reenter new password: <再次確認>
Connecting to (ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))
Password changed for LISTENER
The command completed successfully
LSNRCTL> SET PASSWORD
Password: <輸入新密碼>
LSNRCTL> SAVE_CONFIG
Connecting to (ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))
Saved LISTENER configuration parameters.
Listener Parameter File   /u01/app/oracle/product/19c/dbhome_1/network/admin/listener.ora
Old Parameter File   /u01/app/oracle/product/19c/dbhome_1/network/admin/listener.ora.bak
The command completed successfully

listener.ora 關鍵參數 (SAVE_CONFIG 後自動寫入)


PASSWORDS_LISTENER = 8F3A... (加密雜湊值)
ADMIN_RESTRICTIONS_LISTENER = ON  -- 建議啟用,限制遠端管理指令

驗證密碼生效


LSNRCTL> STATUS
Connecting to (ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))
TNS-01169: The listener has not recognized the password
LSNRCTL> SET PASSWORD
Password: <輸入密碼>
LSNRCTL> STATUS
... 正常顯示狀態 ...

進階防護建議

  1. 啟用 ADMIN_RESTRICTIONS:ADMIN_RESTRICTIONS_LISTENER=ON,禁止遠端 STOP、SET、SAVE_CONFIG 等管理指令,僅允許本機 OS 認證用戶執行。
  2. 限制網路存取:防火牆/安全組僅開放應用伺服器 IP 存取 1521/TCP;管理網段單獨開放。
  3. 使用 TCPS (SSL/TLS):PROTOCOL=TCPS,加密傳輸、雙向認證,防竊聽/中間人。
  4. 定期輪換密碼:納入密碼管理政策,每 90 天輪換,同步更新應用連線池配置。
  5. 監控 Listener 日誌:DIAG_ADR_ENABLED=ON,LOG_DIRECTORY、LOG_FILE 定期審計異常連線嘗試。

常見問題

現象原因解決
TNS-01169: listener has not recognized the password未執行 SET PASSWORD 或密碼錯誤LSNRCTL> SET PASSWORD → 輸入正確密碼
SAVE_CONFIG 失敗listener.ora 唯讀 / 權限不足確保 $ORACLE_HOME/network/admin 可寫、擁有者 oracle:oinstall
應用連線失敗密碼設定不影響 Client 連線,僅影響 LSNRCTL 管理檢查 tnsnames.ora、防火牆、Listener.ora SID_LIST

一鍵腳本化 (非互動式)


#!/bin/bash
# set_listener_password.sh
ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
NEW_PASS="StrongPass#2024"

$ORACLE_HOME/bin/lsnrctl <

適合自動化部署 (Ansible/Terraform) 批量配置。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved