Ubuntu環境下lsnrctl的安全設置指南
lsnrctl是Oracle數據庫的核心管理工具,用于控制監聽器服務。在Ubuntu系統中,需通過權限管理、配置加固、加密通信、訪問控制及監控審計等多維度措施,確保其運行安全。以下是具體實施步驟:
修改lsnrctl文件權限
lsnrctl通常位于Oracle軟件目錄(如/u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl
)。通過chmod
命令限制權限,僅允許所有者(root或oracle)執行:
sudo chmod 750 /u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl
或更嚴格的700
(僅所有者可讀、寫、執行)。
調整文件所有者和組
將lsnrctl的所有者設為root
,組設為oracle
(Oracle數據庫默認組),避免普通用戶篡改:
sudo chown root:oracle /u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl
配置sudoers文件
若需允許特定用戶(如admin
)以oracle
身份運行lsnrctl(無需密碼),使用visudo
安全編輯/etc/sudoers
文件,添加:
admin ALL=(oracle) NOPASSWD: /u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl *
此配置限制僅admin
用戶可免密調用lsnrctl。
設置listener.ora權限
listener.ora(位于$ORACLE_HOME/network/admin/
)包含監聽器端口、地址等敏感信息,需限制為oracle
用戶和oinstall
組可讀寫:
sudo chown oracle:oinstall $ORACLE_HOME/network/admin/listener.ora
sudo chmod 660 $ORACLE_HOME/network/admin/listener.ora
啟用ADMIN_RESTRICTIONS
在listener.ora文件末尾添加以下參數,禁止動態修改監聽器配置(如端口、地址),需重啟監聽器生效:
ADMIN_RESTRICTIONS_LISTENER = ON
此設置可防止未授權用戶通過lsnrctl
命令修改監聽器行為。
啟用SSL/TLS加密
為保護數據傳輸安全,需配置監聽器使用SSL。步驟如下:
openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out cert.pem
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = your_host)(PORT = 1521)) # 普通TCP端口
(ADDRESS = (PROTOCOL = TCPS)(HOST = your_host)(PORT = 1522)) # SSL加密端口
)
)
SECURITY_LISTENER =
(ENCRYPTION_CLIENT = REQUIRED) # 強制客戶端使用加密
(ENCRYPTION_TYPES_CLIENT = (AES256, AES192, AES128)) # 支持的加密算法
(SSL_VERSION = 1.2) # 使用TLS 1.2及以上版本
lsnrctl stop && lsnrctl start
配置Oracle Wallet管理證書
使用Oracle Wallet安全存儲證書和私鑰,避免明文泄露:
mkstore -wrl /path/to/wallet -create
mkstore -wrl /path/to/wallet -importcert -alias server_cert -file cert.pem
mkstore -wrl /path/to/wallet -importkey -alias server_key -file key.pem
SQLNET.AUTHENTICATION_SERVICES = (TCPS)
WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /path/to/wallet)))
限制監聽器訪問IP
在listener.ora文件中,通過HOST
參數指定允許訪問監聽器的IP地址(如僅允許內網IP192.168.1.0/24
):
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521)) # 僅允許指定主機
)
)
此配置可阻斷外部非法IP的連接請求。
配置防火墻規則
使用Ubuntu的ufw
(Uncomplicated Firewall)限制1521(TCP)和1522(TCPS)端口的訪問,僅允許信任IP:
sudo ufw allow from 192.168.1.0/24 to any port 1521 proto tcp # 允許內網訪問普通端口
sudo ufw allow from 192.168.1.0/24 to any port 1522 proto tcp # 允許內網訪問SSL端口
sudo ufw enable # 啟用防火墻
或使用iptables
實現更細粒度的控制。
設置強密碼
為監聽器設置復雜密碼(包含大小寫字母、數字、特殊字符),并定期更換(每90天):
lsnrctl
LSNRCTL> SET PASSWORD # 進入密碼修改界面
輸入舊密碼:******
輸入新密碼:***********
確認新密碼:***********
LSNRCTL> EXIT
啟用日志審計
監聽器日志(位于$ORACLE_HOME/network/log/listener.log
)記錄了所有連接請求和配置變更,需定期檢查異常行為(如頻繁的失敗登錄嘗試)??赏ㄟ^tail
命令實時監控:
tail -f $ORACLE_HOME/network/log/listener.log
或配置日志輪轉(如使用logrotate
),避免日志文件過大。
若系統啟用SELinux或AppArmor,需調整策略允許lsnrctl運行:
sestatus
),若為Enforcing
模式,使用audit2allow
生成自定義策略:sudo ausearch -c 'lsnrctl' --raw | audit2allow -M my-lsnrctl
sudo semodule -i my-lsnrctl.pp
/etc/apparmor.d/usr.sbin.lsnrctl
文件,添加允許的文件和目錄訪問規則(如/u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl
)。通過以上步驟,可全面強化Ubuntu環境下lsnrctl的安全性,有效防范未授權訪問、數據泄露及惡意篡改等風險。實施前需備份相關配置文件(如listener.ora、sqlnet.ora),并在測試環境驗證配置的正確性。