温馨提示×

如何通过lsnrctl进行安全设置

小樊
32
2025-12-09 00:33:59
栏目: 编程语言

通过 lsnrctl 的监听器安全设置指南

一 基础防护 设置监听口令与操作限制

  • 进入监听器控制台并设置/修改密码:在命令行执行 lsnrctl 进入交互界面,使用 change_password 设置强口令,随后用 set password 输入口令,最后执行 save_config 将变更持久化到配置文件。注意:口令校验对 stop、save_config 等管理操作生效,对 start 不生效(防止恶意停止正在运行的监听)。设置完成后,listener.ora 会自动写入类似 PASSWORDS_LISTENER = <密文> 的条目。示例:
    LSNRCTL> change_password
    Old password:
    New password:
    Reenter new password:
    LSNRCTL> set password
    Password:
    LSNRCTL> save_config
    
  • 启用管理限制,禁止在线修改:在 listener.ora 的监听段末尾添加 ADMIN_RESTRICTIONS_<LISTENER_NAME> = on(例如 ADMIN_RESTRICTIONS_LISTENER = on)。开启后,运行中的监听器拒绝通过 lsnrctl 执行 set 等修改类命令,必须停止监听并将参数改为 off 后才能变更,显著降低被远程篡改的风险。示例:
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = your_host)(PORT = 1521))
        )
      )
    ADMIN_RESTRICTIONS_LISTENER = on
    
  • 远程操作风险控制:未设置口令时,攻击者可在远端执行 lsnrctl stop 关闭监听,造成拒绝服务。完成口令与 ADMIN_RESTRICTIONS 设置后,远程执行管理命令需提供口令,否则操作失败。

二 传输与网络层加固

  • 限制监听地址与端口:在 listener.ora 仅绑定必要接口(例如指定主机名或内网地址),避免使用 0.0.0.0 暴露到公网;仅开放必要端口(默认 1521)。示例:
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.20)(PORT = 1521))
        )
      )
    
  • 主机防火墙精细放行:仅允许受信任网段访问监听端口。以 UFW 为例,仅放行 192.168.1.0/241521
    sudo ufw allow from 192.168.1.0/24 to any port 1521
    
    在 Debian/Ubuntu 上,结合本地防火墙与监听绑定地址,可显著降低暴露面。
  • 加密传输(可选增强):在 listener.ora 中配置 SSL/TLS(示例):
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCPS)(HOST = your_host)(PORT = 1521))
        )
      )
    SSL_CLIENT_AUTHENTICATION = FALSE
    SSL_VERSION = 1.2
    
    并在 sqlnet.ora 中设置客户端加密/校验策略(如 SQLNET.ENCRYPTION_SERVER = REQUIRED)。完成后重启监听使配置生效。

三 命令与文件权限最小化

  • 以最小权限运行:监听器进程应以 oracle 等低权系统账号运行,避免使用 root 直接启动监听,减少被提权后的影响范围。
  • 限制 lsnrctl 可执行文件访问:仅允许受控用户/组执行。示例(路径以实际环境为准):
    sudo chown root:root /u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl
    sudo chmod 700 /u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl
    
  • 精细化 sudo 授权(可选):通过 /etc/sudoers(使用 visudo)仅授权特定用户/组执行 lsnrctl,避免无限制提权:
    oracle ALL=(ALL) NOPASSWD: /u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl
    
  • 启用系统安全模块:在需要时利用 SELinuxAppArmor 对 lsnrctl 及 Oracle 目录施加最小权限与访问规则,进一步缩小攻击面。

四 审计监控与维护

  • 启用详细日志与跟踪:在 listener.ora 中提升日志级别并指定跟踪文件,便于审计与故障排查。示例:
    LOG_LEVEL_LISTENER = 16
    TRACE_FILE_LISTENER = listener_trace.log
    
    定期检查 $ORACLE_HOME/network/log 下的日志与跟踪文件,关注异常连接、频繁启停与配置变更。
  • 变更留痕与备份:任何对 listener.ora 的修改先备份,变更后用 lsnrctl status 与日志核对生效情况;定期更新 Oracle 数据库与监听器补丁,修复已知漏洞。

五 应急与常见问题

  • 忘记监听口令的处理:在 listener.ora 中删除或注释 PASSWORDS_<LISTENER_NAME> 行并重启监听,即可清除口令;随后按前述步骤重新设置强口令与 ADMIN_RESTRICTIONS。操作前务必评估对现网的影响并安排维护窗口。
  • 远程 stop 被拒绝:这是口令保护生效的正常现象。请在 lsnrctl 中先执行 set password 输入口令,再执行 stop/save_config 等管理操作。

0