Oracle在Ubuntu上的安全加固指南
Oracle数据库在Ubuntu上的安全加固需从操作系统层、数据库层、网络层、监控层四大维度综合施策,以下是具体实施步骤:
定期更新Ubuntu系统和Oracle数据库,修复已知安全漏洞。执行sudo apt update && sudo apt upgrade更新系统;安装unattended-upgrades包(sudo apt install unattended-upgrades),通过编辑/etc/apt/apt.conf.d/50unattended-upgrades文件开启自动安全更新(如设置Unattended-Upgrade::Allowed-Origins包含"${distro_id}:${distro_codename}-security")。
/etc/ssh/sshd_config文件,设置PermitRootLogin no,重启SSH服务(sudo systemctl restart sshd)。oracle用户(sudo useradd -m -s /bin/bash oracle),将其加入oinstall(软件安装)、dba(数据库管理)组(sudo usermod -aG oinstall,dba oracle),并设置强密码(包含大小写字母、数字、特殊字符,长度≥12位)。/etc/login.defs文件,设置密码有效期(PASS_MAX_DAYS 90)、密码失效前警告天数(PASS_WARN_AGE 7);使用chage命令强制用户定期修改密码(sudo chage -M 90 oracle)。Oracle安装目录(如/u01/app/oracle/product/19.0.0/dbhome_1)和数据目录(如/u01/oradata)需严格限制权限:
sudo chown -R oracle:oinstall /u01/app/oracle /u01/oradata
sudo chmod -R 750 /u01/app/oracle /u01/oradata
确保敏感文件(如listener.ora、sqlnet.ora)仅能被Oracle用户读取(sudo chmod 640 /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/*.ora)。
ALTER USER scott ACCOUNT LOCK。DBA角色,按需分配细粒度权限(如GRANT SELECT, INSERT ON emp TO emp_user);使用角色封装权限(如创建app_role角色,分配业务权限后授予用户)。PASSWORD_STRENGTH MEDIUM)、长度(PASSWORD_LENGTH 12)、有效期(PASSWORD_LIFE_TIME 90)、锁定时间(PASSWORD_LOCK_TIME 1):ALTER PROFILE DEFAULT LIMIT
PASSWORD_VERIFY_FUNCTION verify_function_11G
PASSWORD_LENGTH 12
PASSWORD_LIFE_TIME 90
PASSWORD_LOCK_TIME 1
PASSWORD_REUSE_MAX 5;
ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE_MAX 5; PASSWORD_REUSE_TIME 365)。sqlnet.ora(SQLNET.AUTHENTICATION_SERVICES=(TCPS))、listener.ora(LISTENER = (ADDRESS = (PROTOCOL = TCPS)(HOST = your_host)(PORT = 2484))),强制客户端使用SSL连接(ALTER SYSTEM SET sqlnet.authentication_services=(TCPS) SCOPE=SPFILE)。USERS),执行:ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/u01/app/oracle/keystore' IDENTIFIED BY "keystore_pwd";
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "keystore_pwd";
ADMINISTER KEY MANAGEMENT CREATE MASTER KEY;
ALTER TABLESPACE users ENCRYPTION USING 'AES256' ONLINE;
```。
#### 3. 审计与监控
- **启用审计功能**:设置审计策略,记录DDL操作(如`CREATE TABLE`)、数据修改(如`INSERT/UPDATE/DELETE`)和敏感操作(如`GRANT DBA`),执行:
```sql
AUDIT CREATE TABLE, INSERT TABLE, UPDATE TABLE, DELETE TABLE, GRANT DBA BY ACCESS;
AUDIT SYSOPER, SYSDBA BY ACCESS;
$ORACLE_BASE/admin/$ORACLE_SID/adump目录下,定期检查(SELECT * FROM DBA_AUDIT_TRAIL WHERE TIMESTAMP > SYSDATE-7;)。使用UFW(Uncomplicated Firewall)限制访问,仅开放必要端口:
sudo ufw allow ssh # 允许SSH(默认22端口)
sudo ufw allow 1521/tcp # 允许Oracle监听端口(默认1521)
sudo ufw allow 2484/tcp # 允许Oracle SSL监听端口(若启用SSL)
sudo ufw enable # 启用防火墙
通过sudo ufw status验证规则。
/etc/ssh/sshd_config,设置Port 2222(或其他非标准端口),重启SSH服务。PasswordAuthentication no,仅允许密钥认证(需提前将公钥添加至~/.ssh/authorized_keys)。ClientAliveInterval 300(5分钟无操作断开连接),防止会话劫持。listener.ora,绑定特定IP地址(而非0.0.0.0),限制访问源IP(如LISTENER = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521)))。/etc/sysctl.conf,禁用TCP SACK(防止DoS攻击)、限制本地端口范围、调整TCP超时:net.ipv4.tcp_sack = 0
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_fin_timeout = 30
执行sudo sysctl -p使配置生效。
sudo aa-status查看状态,编辑/etc/apparmor.d/usr.sbin.oracle限制Oracle进程权限(如禁止访问/tmp目录)。/var/log/syslog、/var/log/auth.log)和Oracle审计日志,使用fail2ban自动封禁频繁失败的登录尝试。expdp导出关键表)。systemctl disable命令关闭不需要的系统服务(如Apache、MySQL),减少攻击面。以上措施需根据Oracle版本(如19c、21c)和Ubuntu发行版(如22.04、24.04)调整,实施后需定期复查(如每季度)以应对新威胁。