首页 >
问答 >
云计算 >
centos上oracle如何进行安全管理
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/secure 、messages 、数据库告警日志设置轮转与长期留存策略。
二 数据库账户与权限
坚持最小权限 与职责分离 :仅为应用用户授予完成任务所需权限,避免将 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_ATTEMPTS 、PASSWORD_LOCK_TIME 、PASSWORD_REUSE_TIME/MAX 、PASSWORD_GRACE_TIME 等,强制复杂度与周期更换。
安全应用角色:通过 CREATE ROLE … IDENTIFIED USING 将角色启用与业务条件(如来源 IP、时间窗、应用上下文)绑定,避免在代码中硬编码口令或到处赋权。
权限分析与复核:利用 Privilege Analysis 发现过度授权,定期做账号与权限复核与回收。
三 监听与网络安全
监听安全:为 LISTENER 设置管理密码(在 lsnrctl 中执行 change_password 并 save_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 在维护窗口内执行,变更前务必在测试环境验证并做好回退方案与备份。