CentOS 上保障 lsnrctl 与 Oracle Listener 的安全性
一 基础防护要点
设置强口令并持久化:进入 lsnrctl 后执行 change_password 设置新口令,随后用 set password 验证,再执行 save_config 写入配置文件。未设置口令时,远程或本地都可能被直接停止监听(如执行 lsnrctl stop),存在被滥用风险。设置完成后,诸如 status、stop、save_config 等管理操作需要口令才能执行。示例:
lsnrctl
LSNRCTL> change_password
Old password: <回车>
New password: <强口令>
Reenter new password: <强口令>
LSNRCTL> set password
Password: <强口令>
LSNRCTL> save_config
注意:口令会被加密后写入 listener.ora,形如:PASSWORDS_LISTENER = <密文>。如忘记口令,可临时移除该加密行后重启监听,再重新设置口令。为降低风险,建议同时限制监听管理仅本机可用(见下节)。
禁用本地操作系统认证以强制口令校验:默认存在 LOCAL_OS_AUTHENTICATION_LISTENER = ON,允许本机在无需口令的情况下管理监听。为强制口令校验,建议在 listener.ora 中显式关闭:
LOCAL_OS_AUTHENTICATION_LISTENER = OFF
修改后执行 lsnrctl stop/start 或 reload 使配置生效。关闭后,即便是本机执行 lsnrctl status/stop 等也需要先 set password 验证口令。
启用管理限制以减少运行期被篡改:在 listener.ora 中为监听器开启 ADMIN_RESTRICTIONS(按监听器名):
ADMIN_RESTRICTIONS_LISTENER = ON
开启后,监听运行期间不允许通过 lsnrctl 的 set 等管理命令在线修改参数;所有变更需先编辑 listener.ora 并 reload/重启。这能有效阻止通过 lsnrctl 在线变更监听配置的风险。
二 网络与系统层加固
限制监听端口访问:仅允许受控网段访问监听端口(默认 1521/TCP)。在 CentOS 上可用 firewalld 精细化放行,例如仅允许管理网段 192.168.1.0/24:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" \
source address="192.168.1.0/24" port port="1521" protocol="tcp" accept'
firewall-cmd --reload
同时建议仅在内网或跳板机后管理监听,避免将监听端口直接暴露在公网。
以最小权限运行:将 Oracle 软件目录与监听相关文件(如 $ORACLE_HOME/network/admin、日志目录)的所有者与权限收敛为 oracle:oinstall,仅管理员可写;避免在监听主机上开放不必要的服务与端口,减少攻击面。
启用日志与审计:保持监听日志与告警日志开启,便于事后溯源。可在 listener.ora 中设置日志级别与日志文件,并定期审计异常启停、非法访问尝试等记录:
LOGGING_LISTENER = ON
LOG_FILE_LISTENER = /u01/app/oracle/diag/tnslsnr/<listener>/trace/listener.log
TRACE_LEVEL_LISTENER = SUPPORT
日志路径与滚动策略可结合 Oracle 诊断目录规范进行统一管控。
三 快速加固清单
| 措施 | 操作要点 | 验证方式 |
|---|---|---|
| 设置监听口令并持久化 | 在 lsnrctl 中执行 change_password → set password → save_config | 新开会话执行 lsnrctl status/stop 需先 set password |
| 强制口令校验 | listener.ora 中设置 LOCAL_OS_AUTHENTICATION_LISTENER = OFF | 本机执行 lsnrctl status 不再直接成功 |
| 运行期防篡改 | listener.ora 中设置 ADMIN_RESTRICTIONS_ |
监听运行时 lsnrctl set 命令应被拒绝 |
| 限制远程管理 | 仅允许跳板/管理网段访问 1521/TCP | 防火墙规则仅放行白名单网段 |
| 最小权限与目录收敛 | oracle:oinstall 拥有监听相关目录与文件 | 检查 ls -ld 权限与属主 |
| 日志与审计 | 开启 LOGGING/TRACE,集中收集与定期审计 | 查看 listener.log 是否持续写入与异常记录 |
四 常见误区与提示