商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 如何用lsnrctl进行安全配置

如何用lsnrctl进行安全配置

  发布于2026-07-07 阅读(0)

扫一扫,手机访问

使用 lsnrctl 进行 Oracle 监听器安全配置

如何用lsnrctl进行安全配置

关于 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_=on,这样运行期间就不能通过 lsnrctl 动态改配置了。比如想改个日志路径,只能先关上监听器,编辑完配置文件再重启,运行时会被直接拒绝。

  • 配置示例:
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/ 目录下,定期归档、清理,别让日志撑满磁盘。

最后,有几条持续加固的原则值得记下:

  • 定期更新 Oracle 数据库和监听器的补丁,很多已知漏洞就是通过补丁堵上的。
  • 只监听必要的网络接口和端口,别因为方便就把监听器暴露在不可信的网络里。
  • listener.ora 配置文件要定期备份并做基线管理,变更必须走流程,并准备好回退方案。

这套逻辑下来,监听器的安全性已经比大多数环境高出不少。关键在于:每一步都不是孤立的,口令、加密、访问控制、日志监控,四位一体,才能真正形成闭环。

本文转载于:https://www.yisu.com/ask/13128138.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注