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_password → save_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 策略并定期测试恢复流程,确保被攻击或故障时可快速恢复业务。
五 关键配置示例
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;
/
@$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;
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> change_password
Old password: <当前>
New password: <新>
Reenter new password: <新>
LSNRCTL> save_config
sudo ufw allow 22/tcp
sudo ufw allow 1521/tcp
sudo ufw enable