发布于2026-07-07 阅读(0)
扫一扫,手机访问
使用 lsnrctl 进行 Oracle 监听器安全配置

关于 Oracle 监听器的安全配置,其实是整个数据库安全链条中容易被忽视的一环。很多人喜欢把精力花在 SQL 注入防护或者数据加密上,但出了事一查原因,发现监听器被陌生人改了个配置,这就尴尬了。下面我们按实际场景一步步拆解,把防护做到位。
首先要解决的是监听器口令问题。未经授权的人能不能停下监听器、能不能改配置,全看这一步。
设置或修改口令的操作很直观,在 lsnrctl 环境里运行 change_password 就好。设置完成后,记得用 set password 验证身份,再执行 stop 或 sa ve_config 这样的敏感操作,否则会被系统拒绝。生效后,参数文件里会出现类似 PASSWORDS_LISTENER 的哈希条目。
lsnrctl
LSNRCTL> change_password
Old password:
New password:
Reenter new password:
LSNRCTL> set password
Password:
LSNRCTL> sa ve_config
值得注意的细节是:只要执行 stop、sa ve_config 这类操作前,必须主动用 set password 验证一下,否则一切都会被挡掉。完成配置后,用 status 查看,Security 一栏的状态就能确认是否已锁定。
再来一层硬限制:在 listener.ora 里加上 ADMIN_RESTRICTIONS_
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = your_host)(PORT = 1521))
)
)
ADMIN_RESTRICTIONS_LISTENER = on
万一密码忘了怎么办?别急,可以临时编辑 listener.ora,删掉或注释掉 PASSWORDS_LISTENER 和 ADMIN_RESTRICTIONS_LISTENER 这两行,重启监听器后,再按上面的步骤重设口令。
传输层不能裸奔。如果数据在网络上以明文传输,等于把敏感信息拱手送人。Oracle 原生就支持传输层加密,无需额外软件。
在 listener.ora 中的监听器段加上 SECURITY_LISTENER 配置,就能强制要求客户端使用加密,并限定可用的算法。加密等级设为 REQUIRED,意味着客户端必须支持加密才能连上来。
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = your_host)(PORT = 1521))
)
)
SECURITY_LISTENER =
(ENCRYPTION_CLIENT = REQUIRED)
(ENCRYPTION_TYPES_CLIENT = (AES256, AES192, AES128))
配置完成后,reload 或重启监听器即可生效。
如果还需要更强的安全级别,可以上 TLS/SSL 加密通道,不过这意味着需要证书体系。此时监听协议要从 TCP 改为 TCPS,端口也建议换成 2484,同时指定 SSL 版本和加密套件。
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCPS)(HOST = your_host)(PORT = 2484))
)
)
SECURITY_LISTENER =
(SSL_VERSION = 1.2)
(SSL_CIPHER_SUITES = (TLS_AES_256_GCM_SHA384, TLS_AES_128_GCM_SHA256))
证书和密钥文件的权限与路径要严格按照 Oracle 的要求来配置,否则启动失败是常有的事。
光靠在监听器内部做防护还不够,网络层才是最前线的屏障。监听器默认跑在 1521 端口,建议只放通受信网段或具体 IP。
如果用的是 ufw 防火墙,一条规则就能解决问题:
sudo ufw allow from 192.168.1.0/24 to any port 1521
sudo ufw enable
生产环境尤其注意:监听器端口只对内部网络或跳板机可见就好,别搞什么公网暴露,出了事再后悔就晚了。
再说主机层面的文件权限。监听器进程通常以 oracle 用户运行,建议整个 ORACLE_HOME 的属主和属组都保持为 oracle:oinstall。关键文件的权限设到 700 或 640 就够了,尤其是 lsnrctl 这个可执行文件,更不应该让普通用户随便碰。
sudo chown -R oracle:oinstall $ORACLE_HOME
sudo chmod 700 $ORACLE_HOME/bin/lsnrctl
如果某些运维人员确实需要执行 lsnrctl 命令,也可以通过 sudoers 精细化授权,只允许特定用户或组以免密方式执行指定命令,而不是把所有管理权限全交出去。
oracle ALL=(ALL) NOPASSWD: /u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl
想要更细的管控,还可以结合 sudo 命令白名单以及参数限制,完全能做到给多少权限干多少事。
安全不是一锤子买卖。日志监控和定期审计,才能让攻击者即便突破了防线也会留下马脚。
启用较详细的日志级别(比如 log_level 16),并指定日志文件路径,可以持续追踪监听器的活动状态。如果需要更细致地排查问题,还可以开启 trace 模式,不过生产环境慎用——太详细就意味着性能开销。
lsnrctl
LSNRCTL> set log_level 16
LSNRCTL> set log_file listener.log
LSNRCTL> trace support
LSNRCTL> show trc_file
日志默认会落到 $ORACLE_HOME/network/log/ 目录下,定期归档、清理,别让日志撑满磁盘。
最后,有几条持续加固的原则值得记下:
这套逻辑下来,监听器的安全性已经比大多数环境高出不少。关键在于:每一步都不是孤立的,口令、加密、访问控制、日志监控,四位一体,才能真正形成闭环。
上一篇:lsnrctl如何设置环境变量
下一篇:Ubuntu C++环境如何优化
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8