Oracle Linux版安全加固指南
Oracle Linux作为Oracle数据库的常用操作系统,其安全加固需从系统层、数据库层、网络层及权限管理四大维度综合实施,以下是具体措施:
一、系统层安全加固
1. 系统更新与补丁管理
定期通过yum update命令更新Oracle Linux系统及内核,安装所有可用的安全补丁,修复已知漏洞,降低被攻击风险。更新前建议备份重要数据。
2. 禁用不必要的服务
使用systemctl list-units --type=service --state=running列出当前运行的服务,禁用不需要的服务(如telnet、ftp、chronyd(若使用NTP替代)),减少攻击面。例如:systemctl disable telnet。
3. 配置防火墙(firewalld)
Oracle Linux默认使用firewalld,需配置严格的访问规则:
- 设置默认策略:
firewall-cmd --set-default-zone=drop(拒绝所有未明确允许的流量); - 允许必要服务:
firewall-cmd --permanent --add-service=ssh(允许SSH远程管理)、firewall-cmd --permanent --add-port=1521/tcp(允许Oracle数据库默认端口); - 限制访问源:通过
--add-source或--add-interface指定可信IP或网段,例如firewall-cmd --permanent --zone=trusted --add-source=192.168.1.0/24; - 重载配置:
firewall-cmd --reload。
4. 强化SSH安全
- 更改SSH默认端口(如
2222):编辑/etc/ssh/sshd_config,修改Port 2222,重启SSH服务; - 禁用root远程登录:设置
PermitRootLogin no; - 使用SSH密钥对替代密码登录:生成密钥对(
ssh-keygen -t rsa),将公钥添加至~/.ssh/authorized_keys,设置PasswordAuthentication no。
5. 禁用SELinux(可选)
若无需SELinux的强制访问控制,可临时禁用(setenforce 0)或永久禁用(编辑/etc/selinux/config,设置SELINUX=disabled)。但需注意,禁用SELinux可能降低系统安全性,建议仅在必要时使用。
二、数据库层安全加固
1. 更新Oracle数据库版本与补丁
确保Oracle Database运行在支持的版本(如19c及以上),并安装最新的安全补丁包(CPU、PSU),修复数据库漏洞。
2. 数据字典保护
设置O7_DICTIONARY_ACCESSIBILITY=FALSE(默认值),限制普通用户访问数据字典基础表(如SYS.USER$),仅允许SYSDBA用户访问敏感数据字典对象。
3. 限制DBA组用户数量
清理dba组中不必要的用户(如测试账号),仅保留需要数据库管理权限的运维人员。使用usermod -G dba username将用户添加至dba组,或gpasswd -d username dba移除用户。
4. 设置数据库口令复杂度
修改PROFILE(如DEFAULT),强制用户设置复杂密码:
ALTER PROFILE DEFAULT LIMIT
PASSWORD_LIFE_TIME 90, -- 密码有效期90天
PASSWORD_REUSE_TIME UNLIMITED, -- 允许重复使用密码
PASSWORD_REUSE_MAX UNLIMITED, -- 无重复次数限制
FAILED_LOGIN_ATTEMPTS 5, -- 失败5次锁定账户
PASSWORD_LOCK_TIME 1/24, -- 锁定1小时
PASSWORD_VERIFY_FUNCTION verify_function; -- 使用Oracle内置的密码验证函数
需提前创建verify_function(Oracle自带,位于$ORACLE_HOME/rdbms/admin/utlpwdmg.sql)。
5. 启用数据库审计
开启审计功能,记录用户操作(如登录、数据修改):
ALTER SYSTEM SET audit_trail='DB' SCOPE=SPFILE; -- 审计信息存入数据库
-- 或 AUDIT_TRAIL='OS'(存入操作系统日志)
SHUTDOWN IMMEDIATE;
STARTUP;
审计记录可通过DBA_AUDIT_TRAIL视图查询。
6. 配置监听器密码
为监听器(LISTENER)设置密码,防止未授权修改监听配置:
$ lsnrctl
LSNRCTL> SET CURRENT_LISTENER LISTENER
LSNRCTL> CHANGE_PASSWORD
Old password:
New password:
Reenter new password:
Password changed for LISTENER
LSNRCTL> SAVE_CONFIG
需重启监听器使密码生效。
7. 限制远程操作系统认证
设置REMOTE_OS_AUTHENT=FALSE(默认值),禁止通过操作系统用户直接登录数据库(无需密码),避免未经授权的用户通过本地操作系统账户访问数据库。
8. 修改默认监听端口
将监听器默认端口1521更改为其他端口(如3521),降低被端口扫描攻击的风险:
编辑$ORACLE_HOME/network/admin/listener.ora,修改PORT值:
LISTENER =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 3521))
重启监听器使更改生效。
9. 关闭远程监听管理
在listener.ora中添加ADMIN_RESTRICTIONS_listener=ON,禁止远程用户通过lsnrctl管理监听器(如启动、停止),仅允许本地管理。
三、网络层安全加固
1. 配置可信IP访问控制
通过数据库sqlnet.ora文件限制可访问数据库的IP地址,避免非法IP连接:
tcp.validnode_checking = YES
tcp.invited_nodes = (192.168.1.100, 192.168.1.101) -- 只允许这两个IP访问
重启数据库使配置生效。
2. 网络传输数据加密
使用Oracle高级安全选件(Oracle Advanced Security, OAS)加密客户端与数据库之间的网络传输数据(如SSL/TLS),防止数据泄露:
编辑sqlnet.ora,设置:
SQLNET.ENCRYPTION_SERVER = REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256)
SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA256)
客户端需配置相同的参数。
四、权限与用户管理
1. 遵循最小权限原则
为用户分配完成任务所需的最小权限,避免过度授权。例如:
- 普通用户仅需
CONNECT、RESOURCE角色; - 开发人员需
CREATE TABLE、SELECT ANY TABLE权限,而非DBA角色; - 管理员需
SYSDBA权限,但需通过GRANT SYSDBA TO username WITH ADMIN OPTION谨慎授权。
2. 定期审查权限
使用以下SQL语句定期检查用户权限,删除不再需要的权限或用户:
-- 查看用户系统权限
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'USERNAME';
-- 查看用户角色权限
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE = 'USERNAME';
-- 查看用户对象权限
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'USERNAME';
-- 删除权限
REVOKE SELECT ON schema.table FROM username;
REVOKE CONNECT FROM username;
```。
通过以上措施,可全面提升Oracle Linux系统及数据库的安全性,降低被攻击的风险。需根据实际业务需求调整配置,定期进行安全审计与漏洞扫描。