温馨提示×

centos上oracle如何进行安全管理

小樊
42
2025-12-21 10:31:59
栏目: 云计算

CentOS 上 Oracle 安全管理清单

一 系统层安全

  • 保持系统与数据库补丁为最新,定期执行 yum update;仅启用必需服务,使用 firewalld 白名单放行必要端口(如 SSH 22、Oracle 监听端口),切勿直接关闭防火墙。为 SSH 启用密钥登录、禁用 root 直连、限制可登录用户与来源网段。
  • 强化操作系统认证:设置合理的 PAM 密码复杂度(如最小长度、字符类别)与登录失败锁定策略;对生产环境建议开启 TMOUT 会话超时(例如 600 秒)。
  • 文件与目录权限最小化:数据库数据文件、归档日志、参数文件等仅对 oracle:oinstall 可写,其他用户只读;检查关键目录(如 $ORACLE_HOME/bin)权限,避免被非授权修改。
  • 审计与监控:集中采集与保留系统审计日志(如 auditd),对 /var/log/securemessages、数据库告警日志设置轮转与长期留存策略。

二 数据库账户与权限

  • 坚持最小权限职责分离:仅为应用用户授予完成任务所需权限,避免将 DBA 角色授予业务账号;优先使用自定义角色承载权限,谨慎使用 Oracle 预定义角色(如 CONNECT 在新版本仅含 CREATE SESSION)。
  • 清理与收敛高风险授权:撤销 PUBLIC 对高风险程序包(如 UTL_FILE、UTL_HTTP、UTL_TCP、UTL_SMTP、DBMS_RANDOM)的 EXECUTE;回收诸如 SELECT ANY TABLE 等过宽系统权限;锁定或删除默认/过期/测试账号。
  • 口令策略与复杂度:运行 @?/rdbms/admin/utlpwdmg.sql 生成密码校验函数,在 PROFILE 中设置 PASSWORD_LIFE_TIME ≤ 90 天FAILED_LOGIN_ATTEMPTSPASSWORD_LOCK_TIMEPASSWORD_REUSE_TIME/MAXPASSWORD_GRACE_TIME 等,强制复杂度与周期更换。
  • 安全应用角色:通过 CREATE ROLE … IDENTIFIED USING 将角色启用与业务条件(如来源 IP、时间窗、应用上下文)绑定,避免在代码中硬编码口令或到处赋权。
  • 权限分析与复核:利用 Privilege Analysis 发现过度授权,定期做账号与权限复核与回收。

三 监听与网络安全

  • 监听安全:为 LISTENER 设置管理密码(在 lsnrctl 中执行 change_passwordsave_config),仅在内网受控主机可管理;必要时更改默认监听端口 1521 并同步客户端配置。
  • 源地址访问控制:在 $ORACLE_HOME/network/admin/sqlnet.ora 启用 tcp.validnode_checking=yes,通过 tcp.invited_nodes(白名单)或 tcp.excluded_nodes(黑名单)限制可连 IP;变更后执行 lsnrctl reload
  • 传输加密:在 sqlnet.ora 启用 SQLNET.ENCRYPTION=REQUIRED(或更高)以防范窃听;必要时结合 Kerberos 等强认证。
  • 远程操作系统认证:保持 REMOTE_OS_AUTHENT=FALSE,避免在非安全网络上信任客户端操作系统身份。
  • 空闲连接治理:设置 SQLNET.EXPIRE_TIME=15(单位:分钟)以检测并清理半开/僵死连接。
  • 高可用与隐蔽性:避免对外暴露管理端口,限制管理主机来源,变更默认端口并做好资产台账与变更记录。

四 审计与合规

  • 启用数据库审计:设置 AUDIT_TRAIL=DB(或 OS)开启审计;按需审计登录/关键数据访问/权限变更等,定期导出与归档审计记录,保护审计数据完整性。
  • 登录审计补充:可创建 AFTER LOGON 触发器记录登录用户与时间,用于快速排查与合规取证(注意触发器不替代标准审计)。
  • 等保与安全基线:结合 等保 2.0 要求落实身份鉴别、访问控制、安全审计、入侵防范、可信验证等条款;对服务器与数据库分别形成基线配置与变更流程。

五 快速加固命令示例

  • 防火墙仅放行 SSH 与 Oracle 端口(示例为 1521
    • 查看状态:systemctl status firewalld
    • 放行端口:firewall-cmd --permanent --add-port=1521/tcp
    • 放行 SSH:firewall-cmd --permanent --add-service=ssh
    • 生效:firewall-cmd --reload
  • 撤销 PUBLIC 对高风险包的 EXECUTE
    • REVOKE EXECUTE ON UTL_FILE FROM PUBLIC;
    • REVOKE EXECUTE ON UTL_HTTP FROM PUBLIC;
    • REVOKE EXECUTE ON UTL_TCP FROM PUBLIC;
    • REVOKE EXECUTE ON UTL_SMTP FROM PUBLIC;
    • REVOKE EXECUTE ON DBMS_RANDOM FROM PUBLIC;
  • 启用密码复杂度与策略
    • 生成函数:@?/rdbms/admin/utlpwdmg.sql
    • 创建并应用 PROFILE(示例):
      • CREATE PROFILE sec_profile LIMIT PASSWORD_LIFE_TIME 90 FAILED_LOGIN_ATTEMPTS 6 PASSWORD_LOCK_TIME 1/24 PASSWORD_REUSE_TIME UNLIMITED PASSWORD_REUSE_MAX UNLIMITED PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION;
      • ALTER USER app_user PROFILE sec_profile;
  • 监听白名单与加密
    • sqlnet.ora:
      • tcp.validnode_checking=yes
      • tcp.invited_nodes=(192.168.1.10,192.168.1.20)
      • SQLNET.ENCRYPTION=REQUIRED
    • 使配置生效:lsnrctl reload
  • 会话空闲探测
    • sqlnet.ora:SQLNET.EXPIRE_TIME=15
  • 登录审计触发器(补充)
    • 建表:CREATE TABLE logon_audit(session_user VARCHAR2(128), login_time DATE);
    • 触发器:CREATE OR REPLACE TRIGGER tri_logon AFTER LOGON ON DATABASE BEGIN INSERT INTO logon_audit VALUES(SYS_CONTEXT(‘USERENV’,‘SESSION_USER’), SYSDATE); END;/
  • 说明:以上命令需由具有相应权限的 DBA 在维护窗口内执行,变更前务必在测试环境验证并做好回退方案与备份。

0