温馨提示×

centos oracle配置中安全策略

小樊
35
2026-01-02 02:57:39
栏目: 云计算

CentOS 上 Oracle 安全策略清单

一 操作系统层安全基线

  • 身份鉴别与口令策略
    • 启用强口令与定期更换:在 /etc/login.defs 设置 PASS_MAX_DAYS 90;对存量用户执行 chage -M 90 用户名
    • PAM 复杂度与锁定:在 /etc/pam.d/system-auth 增加或调整
      • 口令复杂度:pam_pwquality 示例参数 minlen=8 ucredit=-2 lcredit=-4 dcredit=-1 ocredit=-1 retry=3
      • 登录失败锁定:pam_tally2/pam_faillock 示例 deny=3 unlock_time=900 even_deny_root(锁定次数不大于 20
    • 会话超时:在 /etc/profile 设置 TMOUT=600(不大于 1800 秒)
  • 访问控制与最小权限
    • root 属组包含系统管理员;sudoers 禁止非必要 ALL=(ALL) ALL;按“系统管理员/审计管理员/安全管理员”三权分立分配账号与权限
    • 文件与目录权限:常规配置不大于 644,可执行文件不大于 755;日志与敏感配置不大于 640
  • 服务与端口最小化
    • 关闭不必要服务与端口;仅开放必要访问(如 SSH 22、数据库 1521
  • 防火墙与主机加固
    • 启用 firewalld 并仅放行必要端口;远程管理仅走 SSH
    • 保持系统与安全补丁更新(yum/dnf 更新与内核/glibc 等关键修复)
  • 资源与内核参数
    • limits.conf 示例(按实际内存与负载调整):
      • oracle soft nofile 10240;oracle hard nofile 65536
      • oracle soft nproc 20470;oracle hard nproc 16384
      • oracle soft stack 10240
    • sysctl.conf 示例:
      • fs.file-max 6815744;fs.aio-max-nr 1048576
      • kernel.shmall 2097152;kernel.shmmax 2147483648;kernel.shmmni 4096
      • kernel.sem 250 32000 100 128
      • net.ipv4.ip_local_port_range 9000 65500
      • net.core.rmem_default 4194304;net.core.rmem_max 4194304
      • net.core.wmem_default 262144;net.core.wmem_max 1048576
    • 使配置生效:执行 sysctl -p;PAM 会话限制需在 /etc/pam.d/login 加入 session required pam_limits.so

二 数据库层安全策略

  • 网络访问控制
    • 白名单控制:在 $ORACLE_HOME/network/admin/sqlnet.ora 设置
      • tcp.validnode_checking=yes
      • tcp.invited_nodes=(192.168.31.71,192.168.31.77192.168.31.0/24)
      • 注意:白名单必须包含数据库服务器本机地址(不可用 localhost/127.0.0.1 替代)
      • 使生效:lsnrctl stop/start
    • 主机层补充:如需限制 SSH 来源,可配合 /etc/hosts.allow / etc/hosts.denyiptables 仅放行管理网段
  • 监听器安全
    • 设置监听密码并关闭本地 OS 认证(防恶意 stop)
      • lsnrctl > change_password > set password > save_config
      • listener.ora 增加:LOCAL_OS_AUTHENTICATION_LISTENER=OFF
  • 登录审计与空闲超时
    • 登录审计示例:创建表与触发器记录登录用户与时间
      • CREATE TABLE LOGON_TABLE(SESSION_USER VARCHAR2(256), CREATE_TIME DATE);
      • CREATE OR REPLACE TRIGGER TRI_LOGON AFTER LOGON ON DATABASE BEGIN INSERT INTO LOGON_TABLE VALUES (SYS_CONTEXT(‘USERENV’,‘SESSION_USER’), SYSDATE); END; /
    • 空闲探测(防半开连接):在 sqlnet.ora 设置 SQLNET.EXPIRE_TIME=15(单位:分钟)
  • 口令复杂度与账户锁定
    • 运行 @?/rdbms/admin/utlpwdmg.sql 生成 VERIFY_FUNCTION_11G 校验函数
    • 调整默认 PROFILE
      • alter profile DEFAULT limit PASSWORD_LIFE_TIME 90;
      • alter profile DEFAULT limit FAILED_LOGIN_ATTEMPTS 6;
      • alter profile DEFAULT limit PASSWORD_REUSE_MAX 5;
      • alter profile DEFAULT limit PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION_11G;
    • 针对特定用户:
      • CREATE PROFILE zhangsan_lock LIMIT FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 2;
      • ALTER USER zhangsan PROFILE zhangsan_lock;
      • 解锁:ALTER USER zhangsan ACCOUNT UNLOCK;
  • 远程 SYSDBA 鉴别
    • 如非必要,可将 REMOTE_LOGIN_PASSWORDFILE=NONE 并重启实例,禁用远程 SYSDBA 口令文件登录(需评估维护影响)

三 等保 2.0 对照要点

  • 身份鉴别:口令复杂度与 90 天更换、登录失败锁定、会话超时、远程管理仅 SSH、双因素鉴别(如堡垒机 + 短信/令牌)
  • 访问控制:三权分立、最小权限、账户与权限定期审计、默认账户禁用/重命名
  • 安全审计:开启数据库审计(登录/关键操作)、集中日志采集与留存
  • 入侵防范:端口与服务最小化、补丁更新、边界与主机防火墙联动
  • 可信验证与资源控制:内核与资源限制、重要客体标记与访问控制粒度到用户/进程、文件/表级控制

四 快速实施命令示例

  • 防火墙仅放行数据库端口(示例为 1521
    • firewall-cmd --permanent --add-port=1521/tcp
    • firewall-cmd --reload
  • sqlnet.ora 白名单与空闲探测
    • 编辑 $ORACLE_HOME/network/admin/sqlnet.ora
      • tcp.validnode_checking=yes
      • tcp.invited_nodes=(192.168.31.0/24)
      • SQLNET.EXPIRE_TIME=15
    • 使生效:lsnrctl stoplsnrctl start
  • 监听器密码与本地 OS 认证关闭
    • lsnrctl
      • change_password
      • set password
      • save_config
    • listener.ora 增加:LOCAL_OS_AUTHENTICATION_LISTENER=OFF
  • 口令复杂度与账户锁定
    • SYS 登录:@?/rdbms/admin/utlpwdmg.sql
    • alter profile DEFAULT limit PASSWORD_LIFE_TIME 90;
    • alter profile DEFAULT limit FAILED_LOGIN_ATTEMPTS 6;
    • alter profile DEFAULT limit PASSWORD_REUSE_MAX 5;
    • alter profile DEFAULT limit PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION_11G;
  • 登录审计触发器
    • CREATE TABLE LOGON_TABLE(SESSION_USER VARCHAR2(256), CREATE_TIME DATE);
    • CREATE OR REPLACE TRIGGER TRI_LOGON AFTER LOGON ON DATABASE BEGIN INSERT INTO LOGON_TABLE VALUES (SYS_CONTEXT(‘USERENV’,‘SESSION_USER’), SYSDATE); END; /;

0