温馨提示×

怎样确保Ubuntu Oracle安全运行

小樊
36
2025-12-28 12:24:13
栏目: 云计算

Ubuntu 上 Oracle 安全运行清单

一 系统与服务加固

  • 保持系统与数据库持续更新:执行sudo apt update && sudo apt upgrade -y;安装并启用自动安全更新(编辑**/etc/apt/apt.conf.d/50unattended-upgrades**,确保包含**“${distro_id}:${distro_codename}-security”**),同时按计划应用 Oracle 的 CPU/PSU 补丁。
  • 专用账户与权限:创建oracle用户并加入oinstall、dba组;设置强口令(长度≥12位,含大小写字母、数字、特殊字符);禁用root远程登录(/etc/ssh/sshd_config:PermitRootLogin no)。
  • 资源与登录限制:在**/etc/security/limits.conf为 oracle 设置资源上限(如nproc、nofile**),并在**/etc/pam.d/login加载 PAM limits;为 SSH 启用密钥登录、禁用密码登录、修改默认端口、设置空闲超时(如ClientAliveInterval 300**)。
  • 文件与目录权限:将**$ORACLE_BASE、$ORACLE_HOME、数据目录归属为oracle:oinstall**,权限750;敏感网络配置(如listener.ora、sqlnet.ora)设为640仅 oracle 可读。
  • 服务最小化:仅开放必要端口(如22/SSH、1521/TCP);禁用未使用的监听器与数据库服务;监听仅绑定内网地址;使用**/etc/oratab**与 systemd 管理实例启停。

二 网络与传输安全

  • 防火墙与网络隔离:用 UFW 仅放行受信任来源到1521/TCP(必要时放通2484/TCP用于 SSL),数据库置于私有子网/VPC,禁止公网直连。
  • 监听器加固:为 LISTENER 设置强口令并保存配置(lsnrctl:change_passwordsave_config),防止未授权启停与篡改。
  • 源地址白名单:在 sqlnet.ora 启用白名单校验(如tcp.validnode_checking=yes;tcp.invited_nodes=(10.0.1.10,10.0.1.20,127.0.0.1))。
  • 传输加密:优先启用 SSL/TLS(配置 listener.ora/sqlnet.ora,如将监听端口设为2484/TCP并启用 TCPS);若暂未启用 SSL,可先强制网络层加密与校验(如SQLNET.ENCRYPTION=REQUIRED;SQLNET.CRYPTO_CHECKSUM=REQUIRED)。
  • 会话保活:设置 SQLNET.EXPIRE_TIME=10(单位:分钟),及时清理僵死会话,降低会话劫持风险。

三 数据库账户与权限控制

  • 默认账户治理:修改 SYS/SYSTEM 口令;锁定或删除示例/演示/无用账户;如不使用可禁用 DBSNMP/SYSMAN/MGMT_VIEW 等 OEM 账户。
  • 最小权限与角色:应用账户仅授予所需对象/系统权限,避免直接授予 DBA;通过自定义角色封装权限并定期复核。
  • 强密码与锁定策略:修改默认 PROFILE,设置口令长度≥12、有效期90天、失败锁定1天、重用限制(如PASSWORD_REUSE_MAX 5),并启用复杂度校验(如 verify_function_11G)。
  • 撤销 PUBLIC 危险包执行:对 UTL_FILE、UTL_TCP、UTL_SMTP、UTL_HTTP、DBMS_RANDOM 等撤销 PUBLIC 的 EXECUTE,降低代码执行与外泄风险。
  • 数据字典保护:设置 O7_DICTIONARY_ACCESSIBILITY=FALSE,禁止非 SYSDBA 直接访问敏感元数据。

四 审计与监控

  • 启用数据库审计:将 AUDIT_TRAIL 设为 DB/EXTENDED,审计关键操作(登录/登出、DDL、权限变更、敏感表访问等);审计记录位于 $ORACLE_BASE/admin/$ORACLE_SID/adump,定期查询与分析(如 DBA_AUDIT_TRAIL)。
  • 登录审计与告警:创建 AFTER LOGON 触发器,记录用户名、IP、时间等关键要素,结合日志平台进行异常登录检测与告警。
  • 主机与访问监控:启用 AppArmor 限制 oracle 进程访问范围(如 sudo aa-status 查看、按需配置并重新加载);用 fail2ban 封禁频繁失败登录;定期审查 /var/log/syslog、/var/log/auth.log 与 Oracle 告警日志。
  • 备份与演练:制定 RMAN(全备+增量)与 Data Pump 策略并定期测试恢复流程,确保被攻击或故障时可快速恢复业务。

五 关键配置示例

  • 白名单与空闲保活(sqlnet.ora)
tcp.validnode_checking=yes
tcp.invited_nodes=(10.0.1.10,10.0.1.20,127.0.0.1)
SQLNET.EXPIRE_TIME=10
  • 传输加密(sqlnet.ora,未启用 SSL/TLS 前可作为过渡)
SQLNET.ENCRYPTION=REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER=(AES256)
SQLNET.CRYPTO_CHECKSUM=REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER=(SHA1)
  • 登录审计触发器(登录即写库表)
CREATE TABLE LOGON_TABLE(
  logon_user  VARCHAR2(255),
  logon_ip    VARCHAR2(255),
  logon_time  DATE
);
CREATE OR REPLACE TRIGGER TRI_LOGON
AFTER LOGON ON DATABASE
BEGIN
  INSERT INTO LOGON_TABLE VALUES(
    SYS_CONTEXT('USERENV','SESSION_USER'),
    SYS_CONTEXT('USERENV','IP_ADDRESS'),
    SYSDATE
  );
END;
/
  • 密码与锁定策略(Profile)
@$ORACLE_HOME/RDBMS/ADMIN/utlpwdmg.sql
ALTER PROFILE DEFAULT LIMIT
  PASSWORD_VERIFY_FUNCTION verify_function_11G
  FAILED_LOGIN_ATTEMPTS 6
  PASSWORD_LOCK_TIME 1
  PASSWORD_GRACE_TIME 90
  PASSWORD_REUSE_MAX 5
  PASSWORD_LIFE_TIME 90;
  • 撤销 PUBLIC 危险包
REVOKE EXECUTE ON UTL_FILE  FROM PUBLIC;
REVOKE EXECUTE ON UTL_TCP  FROM PUBLIC;
REVOKE EXECUTE ON UTL_SMTP FROM PUBLIC;
REVOKE EXECUTE ON UTL_HTTP FROM PUBLIC;
REVOKE EXECUTE ON DBMS_RANDOM FROM PUBLIC;
  • 监听器口令(lsnrctl)
lsnrctl
LSNRCTL> change_password
Old password: <当前>
New password: <新>
Reenter new password: <新>
LSNRCTL> save_config
  • 防火墙放行示例(UFW)
sudo ufw allow 22/tcp
sudo ufw allow 1521/tcp
sudo ufw enable

0