預設情況下 Oracle 監聽器無密碼保護,任何能連線到監聽器埠(預設 1521)的用戶均可遠端執行 lsnrctl stop 關閉監聽器,造成服務中斷。本文示範設定密碼與啟用 ADMIN_RESTRICTIONS 兩大防護措施。
C:\> lsnrctl stop LISTENER
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.33.11)(PORT=1521)))
The command completed successfully
監聽器日誌僅記錄 COMMAND=stop,無來源 IP,事後難以追蹤。
[oracle@host ~]$ lsnrctl
LSNRCTL> set current_listener LISTENER
LSNRCTL> change_password
Old password: # 首次直接 Enter
New password: ********
Reenter new password: ********
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.33.11)(PORT=1521)))
Password changed for LISTENER
The command completed successfully
LSNRCTL> set password
Password: ********
The command completed successfully
LSNRCTL> save_config
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.33.11)(PORT=1521)))
Saved LISTENER configuration parameters.
Listener Parameter File /opt/oracle/product/19c/network/admin/listener.ora
Old Parameter File /opt/oracle/product/19c/network/admin/listener.bak
The command completed successfully
C:\> lsnrctl stop LISTENER
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.33.11)(PORT=1521)))
TNS-01169: The listener has not recognized the password
# 正確操作:先輸入密碼
LSNRCTL> set password
Password: ********
LSNRCTL> stop
The command completed successfully
注意:設定密碼後,伺服器端本機與遠端客戶端 皆需輸入密碼才能管理監聽器。
編輯 $ORACLE_HOME/network/admin/listener.ora,在 LISTENER 區段加入:
ADMIN_RESTRICTIONS_LISTENER = ON
效果:
lsnrctl 執行期修改指令(set、change_password、start/stop 等)被拒絕。listener.ora 並 lsnrctl reload 或重啟生效。LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = host.example.com)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/19c)
(SID_NAME = orcl)
)
)
ADMIN_RESTRICTIONS_LISTENER = ON
ADMIN_RESTRICTIONS_LISTENER = ON。listener.log 異常連線嘗試。