Linux 上 Oracle 安全加固清单
一 系统与账户安全
- 保持系统与安全补丁为最新:定期执行系统更新(如 yum update/apt upgrade),并关注 Oracle 安全公告与 CPU(Critical Patch Update),及时修补数据库与操作系统漏洞。
- 强化 OS 口令策略:安装并配置 libpam-pwquality,设置最小长度、字符类别与重试次数,例如:minlen=12、minclass=3、retry=3。
- 最小权限与专用账户:仅创建必要的 oracle/oinstall/dba 等账户与组,禁止共享 OS 账户;限制 DBA 组中的 OS 用户数量,仅保留必要的管理员。
- 资源与登录限制:在 /etc/security/limits.conf 为 oracle 设置 nproc/nofile 等上限,避免资源耗尽与滥用;禁用不必要的本地/远程服务与端口,减少攻击面。
- 日志与完整性:集中与保护日志(如 /var/log 权限最小化、集中采集),开启系统审计(auditd),并定期巡检异常登录与权限变更。
二 Oracle 数据库安全配置
- 关闭远程 SYSDBA 登录:将 REMOTE_LOGIN_PASSWORDFILE=NONE,仅允许本地 OS 认证的 SYSDBA,降低高权限被远程滥用的风险。
- 数据字典保护:设置 O7_DICTIONARY_ACCESSIBILITY=FALSE,避免普通用户通过数据字典基表直接访问敏感元数据。
- 口令复杂度与生命周期:通过 PROFILE 启用 PASSWORD_VERIFY_FUNCTION,要求包含大小写字母、数字与特殊字符;设置 PASSWORD_LIFE_TIME≤90 天、失败锁定与解锁时间,例如:FAILED_LOGIN_ATTEMPTS=5、PASSWORD_LOCK_TIME=1/24(1 小时)、PASSWORD_GRACE_TIME=10。
- 监听器安全:为 LISTENER 设置管理密码(LSNRCTL> change_password + save_config),并限制仅可信主机可管理;必要时修改默认监听端口 1521,降低自动化扫描命中率。
- 可信网络访问控制:在 $ORACLE_HOME/network/admin/sqlnet.ora 启用 tcp.validnode_checking=yes 与 tcp.invited_nodes=(可信IP/网段),仅放行白名单。
- 传输加密与空闲超时:在 sqlnet.ora 配置 SQLNET.ENCRYPTION=REQUIRED(或更高),并启用 SQLNET.EXPIRE_TIME=15(分钟)检测与断开僵死会话。
- 会话与连接控制:结合业务设置 PROCESSES/Sessions 等资源上限,防止 DoS;对高并发场景采用连接池与中间件限流。
三 网络安全与监听加固
- 启用主机防火墙并最小化放行:仅开放 SSH(22/TCP) 与数据库端口(如 1521/TCP),使用 firewalld/ufw 或边界防火墙实施白名单策略,避免直接关闭防火墙。
- 监听与 Extproc 最小化:禁用或限制 Extproc(避免通过外部过程加载不安全库),必要时关闭 XDB(HTTP/XMLDB)服务端口,减少攻击面。
- 端口与协议治理:变更默认监听端口、限制来源 IP、分离管理通道与业务通道,并在网络边界实施 ACL/安全组 双重控制。
四 审计与备份恢复
- 启用数据库审计:设置 AUDIT_TRAIL=DB,EXTENDED(或 OS),审计关键操作(登录/登出、DDL、权限变更、敏感表访问),并定期归档与保护审计数据。
- 审计日志保护:限制 $ORACLE_BASE/admin/*/adump 等目录与审计文件的访问权限,防止篡改与删除;将审计与系统日志集中到 SIEM 进行关联分析。
- 备份与高可用:建立 RMAN 物理备份、Data Guard 灾备与定期 Data Pump 逻辑备份;验证备份可用性与恢复演练,确保 RPO/RTO 达标。
五 快速检查清单与常用命令
| 检查项 |
关键配置 |
验证命令/位置 |
| 补丁与内核 |
系统与数据库最新安全补丁 |
yum/apt 更新记录、opatch lsinventory |
| 远程 SYSDBA |
REMOTE_LOGIN_PASSWORDFILE=NONE |
SQL> show parameter remote_login_passwordfile |
| 数据字典保护 |
O7_DICTIONARY_ACCESSIBILITY=FALSE |
SQL> show parameter O7_DICTIONARY_ACCESSIBILITY |
| 口令策略 |
FAILED_LOGIN_ATTEMPTS/LOCK_TIME/LIFE_TIME/VERIFY_FUNCTION |
查询 DBA_PROFILES |
| 监听器安全 |
管理密码、监听端口 |
lsnrctl status、listener.ora |
| 可信 IP |
sqlnet.ora 白名单 |
$ORACLE_HOME/network/admin/sqlnet.ora |
| 传输加密 |
SQLNET.ENCRYPTION=REQUIRED |
$ORACLE_HOME/network/admin/sqlnet.ora |
| 空闲超时 |
SQLNET.EXPIRE_TIME=15 |
$ORACLE_HOME/network/admin/sqlnet.ora |
| 防火墙 |
仅放行 22/1521 |
firewall-cmd --list-ports / ufw status |
| 审计 |
AUDIT_TRAIL=DB,EXTENDED |
SQL> show parameter audit_trail |
提示:变更前在测试环境验证,变更窗口内做好回退方案;对 listener.ora/sqlnet.ora 等网络文件修改后需重启监听或重登录使配置生效。