如何通过调整Ubuntu下lsnrctl的安全配置来显著增强Oracle数据库的访问安全性?

更新于
2026-08-11 00:16:17
4阅读来源:SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

痛点概述这方面,为什么你需要强化 Ubuntu 上的 lsnrctl 安全

Oracle 监听器往往成为攻击者的首选入口:

  • 未经授权的普通使用者可能直接执行 lsnrctl stop/start导致业务中断。
  • 监听器口令泄露后攻击者可绕过数据库认证直接连接。
  • 缺乏审计日志,使得非法操作难以追溯。
  • 默认文件权限过宽,恶意脚本可以篡改 listener.ora 或二进制文件。

针对以上痛点,这篇文章提供一套完整的安全加固方案。帮助你在 Ubuntu 上明显提高 Oracle 数据库的访问安全性。

如何通过调整Ubuntu下lsnrctl的安全配置来显著增强Oracle数据库的访问安全性?

一、操作程序层面的权限控制

1️⃣ 修改 lsnrctl 文件所有权

将 lsnrctl 二进制及其配置文件统一归属 oracle 使用者,避免 root 之外的使用者随意修改。怎么说呢,

# 将二进制文件归属为 oracle:oinstall
sudo chown oracle:oinstall /u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl
# 将监听器配置文件归属为同一使用者
sudo chown oracle:oinstall $ORACLE_HOME/network/admin/listener.ora
sudo chown oracle:oinstall $ORACLE_HOME/network/admin/tnsnames.ora

2️⃣ 设置严格的文件权限

推荐使用 750或更严的 700 权限:

# 二进制文件仅所有者可执行
sudo chmod 750 /u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl
# 配置文件仅所有者可读写
sudo chmod 640 $ORACLE_HOME/network/admin/listener.ora
sudo chmod 640 $ORACLE_HOME/network/admin/tnsnames.ora

3️⃣ 限定能够运行 lsnrctl 的使用者组

创建专用组 dba将需要管理监听器的 DBA 加入该组:

# 创建组
sudo groupadd dba
# 将 oracle 使用者加入 dba 组
sudo usermod -aG dba oracle
# 确认成员
groups oracle

二、通过 sudoers 精细授权

不希望 DBA 拥有完整 root 权限时可在 /etc/sudoers 中仅授权 lsnrctl 操作:

# 使用 visudo 编辑 sudoers
oracle ALL= NOPASSWD: /u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl *
% dba ALL= NOPASSWD: /u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl start。\
/u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl stop,\
/u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl reload

Pain point: 防止普通使用者通过 sudo 提高为 root 后随意执行任意命令,只保留对 lsnrctl 的受控访问。

三、监听器口令与本地操作保护

1️⃣ 为监听器设置强口令并加密存储

$ORACLE_HOME/network/admin/listener.ora 中使用加密口令:

# 示例:启用口令加密
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
)
)
)
ADMIN_RESTRICTIONS_LISTENER=ON
PASSWORDS_LISTENER =
# 使用 ORAPWD 工具生成加密口令
orapwd file=$ORACLE_HOME/network/admin/orapwlistener password=MY_STRONG_PASSWORD entries=10 format=12

2️⃣ 定期轮换监听器口令并记录变更日志

  • 使用 `lsnrctl change_password`/`set password`.
  • 将每次变更写入审计日志。
  • SLA 要求:至少每 90 天更换一次。

四、网络访问控制与防火墙硬化

a) 限定监听端口只能被可信 IP 访问

# 默认阻止所有入口流量
sudo ufw default deny incoming
# 开放本机及信任子网对 1521 的访问
sudo ufw allow from 10.10.10.0/24 to any port 1521 proto tcp comment 'Oracle Listener'
# 启用防火墙
sudo ufw enable

b) 使用 TCP Wrapper 或 hosts.allow/hosts.deny 双重过滤

# /etc/hosts.allow
listener : 10.10.10.* : ALLOW
# /etc/hosts.deny
listener : ALL : DENY

五、利用 SELinux/AppArmor 提高强制访问控制

Pain point: 即使文件权限被误改,仍能阻止未授权进程调用 lsnrctl。

a) AppArmor 配置示例

  1. Create a profile file:
/etc/apparmor.d/usr.bin.lsnrctl:
#include 
#include 
/usr/bin/lsnrctl {
# 限制只能读取配置文件目录
/u01/app/oracle/** r,# 禁止写入程序关键方法除非是 owner
/etc/** rwk,# 网络限制,仅允许本机或指定子网连接到端口 1521
network inet stream。
}
  1. 加载并强制启用:
# 加载配置并切换到 enforce 模式
sudo apparmor_parser -r -W /etc/apparmor.d/usr.bin.lsnrctl
sudo aa-enforce /usr/bin/lsnrctl

b) SELinux简易策略

# 创建自定义类型并绑定二进制文件
semanage fcontext -a -t bin_t "/usr/bin/lsnrctl"
restorecon -v /usr/bin/lsnrctl

semanage login -a -s staffu dbauser

ausearch -m avc -ts recent | audit2allow -w -a

六、审计、日志与实时监控

  • a) 启用 auditd 对 lsnrctl 调用进行审计:

# 在 /etc/audit/rules.d/audit.rules 添加规则
-w /u01/app/oracle/product/19.0.0/dbhome1/bin/lsnrCtl -p x -k lsnrctl_exec

sudo systemctl restart auditd

如何通过调整Ubuntu下lsnrctl的安全配置来显著增强Oracle数据库的访问安全性?

ausearch -k lsnrctlexec --format raw | aureport -x --summary

  • b) 配合 syslog 与 ELK/Kibana 实现集中化告警:
步骤 操作说明
① 收集日志 将 `/var/log/audit/audit.log` 转发至 rsyslog,接下来推送至 Logstash。
② 建立告警规则 当出现 `EXECVE` 且 `exe="/usr/bin/lsnrCtl"` 时触发 Slack/E‑mail 通知。

七、安全加固清单

  • LsnrCtl 文件所有权统一为 oracle:oinstall。
  • LsnrCtl 二进制权限设为 750;配置文件设为 640,
  • Dba 使用者加入专属组,仅授予 sudo 执行 LsnrCtl 的权限。
  • Sudoers 中限定具体子命令,并使用 NOPASSWD 防止交互式密码输入。
  • Lsrnrc 加密口令 & ADMIN_RESTRICTIONS_LISTENER=ON。
  • Lsrnrc 定期轮换密码,变更记录写入审计日志。说起来,Kubernetes/UFW 防火墙只放通可信 IP 对端口 1521 的 TCP 流量。AAppArmor 或 SELinux 强制限制 LsrnCtl 能够读取的方法与网络范围。Aauditd 对 LsrnCtl 执行进行监控,并将事件推送至集中化 SIEM 网站。C定期进行渗透测试或红队演练,验证上述防护是否生效。

    八、从“防御”到“零信任”的跃迁

    通过以上七大模块——程序权限、精细 sudo 授权、监听器口令硬化、网络防火墙、MAC 强制访问控制还有全链路审计——可以把原本松散且易被滥用的 lsnrctl 环境转变为“最小特权+可追溯”的安全程序。这样,即使攻击者获取了普通使用者账号,也只能在受限范围内执行预定义操作,从根本上降低 Oracle 数据库被非法访问或破坏的风险。实现真正意义上的Ubuntu + Oracle 零信任架构​​​​​​​​​​​​​​​​​​​​​‌‍‍‍‍‍‌​‌‍‏‏‏‏‏‏‏‏‏‎‎‎‎‎‬‌‌‌‌‌‌‮‬‮‪‪‪‪‪‭‭‭‭        ​​​​​​​**安全升级**。​       

标签:Ubuntu

痛点概述这方面,为什么你需要强化 Ubuntu 上的 lsnrctl 安全

Oracle 监听器往往成为攻击者的首选入口:

  • 未经授权的普通使用者可能直接执行 lsnrctl stop/start导致业务中断。
  • 监听器口令泄露后攻击者可绕过数据库认证直接连接。
  • 缺乏审计日志,使得非法操作难以追溯。
  • 默认文件权限过宽,恶意脚本可以篡改 listener.ora 或二进制文件。

针对以上痛点,这篇文章提供一套完整的安全加固方案。帮助你在 Ubuntu 上明显提高 Oracle 数据库的访问安全性。

如何通过调整Ubuntu下lsnrctl的安全配置来显著增强Oracle数据库的访问安全性?

一、操作程序层面的权限控制

1️⃣ 修改 lsnrctl 文件所有权

将 lsnrctl 二进制及其配置文件统一归属 oracle 使用者,避免 root 之外的使用者随意修改。怎么说呢,

# 将二进制文件归属为 oracle:oinstall
sudo chown oracle:oinstall /u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl
# 将监听器配置文件归属为同一使用者
sudo chown oracle:oinstall $ORACLE_HOME/network/admin/listener.ora
sudo chown oracle:oinstall $ORACLE_HOME/network/admin/tnsnames.ora

2️⃣ 设置严格的文件权限

推荐使用 750或更严的 700 权限:

# 二进制文件仅所有者可执行
sudo chmod 750 /u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl
# 配置文件仅所有者可读写
sudo chmod 640 $ORACLE_HOME/network/admin/listener.ora
sudo chmod 640 $ORACLE_HOME/network/admin/tnsnames.ora

3️⃣ 限定能够运行 lsnrctl 的使用者组

创建专用组 dba将需要管理监听器的 DBA 加入该组:

# 创建组
sudo groupadd dba
# 将 oracle 使用者加入 dba 组
sudo usermod -aG dba oracle
# 确认成员
groups oracle

二、通过 sudoers 精细授权

不希望 DBA 拥有完整 root 权限时可在 /etc/sudoers 中仅授权 lsnrctl 操作:

# 使用 visudo 编辑 sudoers
oracle ALL= NOPASSWD: /u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl *
% dba ALL= NOPASSWD: /u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl start。\
/u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl stop,\
/u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl reload

Pain point: 防止普通使用者通过 sudo 提高为 root 后随意执行任意命令,只保留对 lsnrctl 的受控访问。

三、监听器口令与本地操作保护

1️⃣ 为监听器设置强口令并加密存储

$ORACLE_HOME/network/admin/listener.ora 中使用加密口令:

# 示例:启用口令加密
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
)
)
)
ADMIN_RESTRICTIONS_LISTENER=ON
PASSWORDS_LISTENER =
# 使用 ORAPWD 工具生成加密口令
orapwd file=$ORACLE_HOME/network/admin/orapwlistener password=MY_STRONG_PASSWORD entries=10 format=12

2️⃣ 定期轮换监听器口令并记录变更日志

  • 使用 `lsnrctl change_password`/`set password`.
  • 将每次变更写入审计日志。
  • SLA 要求:至少每 90 天更换一次。

四、网络访问控制与防火墙硬化

a) 限定监听端口只能被可信 IP 访问

# 默认阻止所有入口流量
sudo ufw default deny incoming
# 开放本机及信任子网对 1521 的访问
sudo ufw allow from 10.10.10.0/24 to any port 1521 proto tcp comment 'Oracle Listener'
# 启用防火墙
sudo ufw enable

b) 使用 TCP Wrapper 或 hosts.allow/hosts.deny 双重过滤

# /etc/hosts.allow
listener : 10.10.10.* : ALLOW
# /etc/hosts.deny
listener : ALL : DENY

五、利用 SELinux/AppArmor 提高强制访问控制

Pain point: 即使文件权限被误改,仍能阻止未授权进程调用 lsnrctl。

a) AppArmor 配置示例

  1. Create a profile file:
/etc/apparmor.d/usr.bin.lsnrctl:
#include 
#include 
/usr/bin/lsnrctl {
# 限制只能读取配置文件目录
/u01/app/oracle/** r,# 禁止写入程序关键方法除非是 owner
/etc/** rwk,# 网络限制,仅允许本机或指定子网连接到端口 1521
network inet stream。
}
  1. 加载并强制启用:
# 加载配置并切换到 enforce 模式
sudo apparmor_parser -r -W /etc/apparmor.d/usr.bin.lsnrctl
sudo aa-enforce /usr/bin/lsnrctl

b) SELinux简易策略

# 创建自定义类型并绑定二进制文件
semanage fcontext -a -t bin_t "/usr/bin/lsnrctl"
restorecon -v /usr/bin/lsnrctl

semanage login -a -s staffu dbauser

ausearch -m avc -ts recent | audit2allow -w -a

六、审计、日志与实时监控

  • a) 启用 auditd 对 lsnrctl 调用进行审计:

# 在 /etc/audit/rules.d/audit.rules 添加规则
-w /u01/app/oracle/product/19.0.0/dbhome1/bin/lsnrCtl -p x -k lsnrctl_exec

sudo systemctl restart auditd

如何通过调整Ubuntu下lsnrctl的安全配置来显著增强Oracle数据库的访问安全性?

ausearch -k lsnrctlexec --format raw | aureport -x --summary

  • b) 配合 syslog 与 ELK/Kibana 实现集中化告警:
步骤 操作说明
① 收集日志 将 `/var/log/audit/audit.log` 转发至 rsyslog,接下来推送至 Logstash。
② 建立告警规则 当出现 `EXECVE` 且 `exe="/usr/bin/lsnrCtl"` 时触发 Slack/E‑mail 通知。

七、安全加固清单

  • LsnrCtl 文件所有权统一为 oracle:oinstall。
  • LsnrCtl 二进制权限设为 750;配置文件设为 640,
  • Dba 使用者加入专属组,仅授予 sudo 执行 LsnrCtl 的权限。
  • Sudoers 中限定具体子命令,并使用 NOPASSWD 防止交互式密码输入。
  • Lsrnrc 加密口令 & ADMIN_RESTRICTIONS_LISTENER=ON。
  • Lsrnrc 定期轮换密码,变更记录写入审计日志。说起来,Kubernetes/UFW 防火墙只放通可信 IP 对端口 1521 的 TCP 流量。AAppArmor 或 SELinux 强制限制 LsrnCtl 能够读取的方法与网络范围。Aauditd 对 LsrnCtl 执行进行监控,并将事件推送至集中化 SIEM 网站。C定期进行渗透测试或红队演练,验证上述防护是否生效。

    八、从“防御”到“零信任”的跃迁

    通过以上七大模块——程序权限、精细 sudo 授权、监听器口令硬化、网络防火墙、MAC 强制访问控制还有全链路审计——可以把原本松散且易被滥用的 lsnrctl 环境转变为“最小特权+可追溯”的安全程序。这样,即使攻击者获取了普通使用者账号,也只能在受限范围内执行预定义操作,从根本上降低 Oracle 数据库被非法访问或破坏的风险。实现真正意义上的Ubuntu + Oracle 零信任架构​​​​​​​​​​​​​​​​​​​​​‌‍‍‍‍‍‌​‌‍‏‏‏‏‏‏‏‏‏‎‎‎‎‎‬‌‌‌‌‌‌‮‬‮‪‪‪‪‪‭‭‭‭        ​​​​​​​**安全升级**。​       

标签:Ubuntu