Oracle Linux版安全加固指南
Oracle Linux作为Oracle数据库的常用操作系统,其安全加固需从系统层、数据库层、网络层及权限管理四大维度综合实施,以下是具体措施:
定期通过yum update命令更新Oracle Linux系统及内核,安装所有可用的安全补丁,修复已知漏洞,降低被攻击风险。更新前建议备份重要数据。
使用systemctl list-units --type=service --state=running列出当前运行的服务,禁用不需要的服务(如telnet、ftp、chronyd(若使用NTP替代)),减少攻击面。例如:systemctl disable telnet。
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。2222):编辑/etc/ssh/sshd_config,修改Port 2222,重启SSH服务;PermitRootLogin no;ssh-keygen -t rsa),将公钥添加至~/.ssh/authorized_keys,设置PasswordAuthentication no。若无需SELinux的强制访问控制,可临时禁用(setenforce 0)或永久禁用(编辑/etc/selinux/config,设置SELINUX=disabled)。但需注意,禁用SELinux可能降低系统安全性,建议仅在必要时使用。
确保Oracle Database运行在支持的版本(如19c及以上),并安装最新的安全补丁包(CPU、PSU),修复数据库漏洞。
设置O7_DICTIONARY_ACCESSIBILITY=FALSE(默认值),限制普通用户访问数据字典基础表(如SYS.USER$),仅允许SYSDBA用户访问敏感数据字典对象。
清理dba组中不必要的用户(如测试账号),仅保留需要数据库管理权限的运维人员。使用usermod -G dba username将用户添加至dba组,或gpasswd -d username dba移除用户。
修改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)。
开启审计功能,记录用户操作(如登录、数据修改):
ALTER SYSTEM SET audit_trail='DB' SCOPE=SPFILE; -- 审计信息存入数据库
-- 或 AUDIT_TRAIL='OS'(存入操作系统日志)
SHUTDOWN IMMEDIATE;
STARTUP;
审计记录可通过DBA_AUDIT_TRAIL视图查询。
为监听器(LISTENER)设置密码,防止未授权修改监听配置:
$ lsnrctl
LSNRCTL> SET CURRENT_LISTENER LISTENER
LSNRCTL> CHANGE_PASSWORD
Old password:
New password:
Reenter new password:
Password changed for LISTENER
LSNRCTL> SAVE_CONFIG
需重启监听器使密码生效。
设置REMOTE_OS_AUTHENT=FALSE(默认值),禁止通过操作系统用户直接登录数据库(无需密码),避免未经授权的用户通过本地操作系统账户访问数据库。
将监听器默认端口1521更改为其他端口(如3521),降低被端口扫描攻击的风险:
编辑$ORACLE_HOME/network/admin/listener.ora,修改PORT值:
LISTENER =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 3521))
重启监听器使更改生效。
在listener.ora中添加ADMIN_RESTRICTIONS_listener=ON,禁止远程用户通过lsnrctl管理监听器(如启动、停止),仅允许本地管理。
通过数据库sqlnet.ora文件限制可访问数据库的IP地址,避免非法IP连接:
tcp.validnode_checking = YES
tcp.invited_nodes = (192.168.1.100, 192.168.1.101) -- 只允许这两个IP访问
重启数据库使配置生效。
使用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)
客户端需配置相同的参数。
为用户分配完成任务所需的最小权限,避免过度授权。例如:
CONNECT、RESOURCE角色;CREATE TABLE、SELECT ANY TABLE权限,而非DBA角色;SYSDBA权限,但需通过GRANT SYSDBA TO username WITH ADMIN OPTION谨慎授权。使用以下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系统及数据库的安全性,降低被攻击的风险。需根据实际业务需求调整配置,定期进行安全审计与漏洞扫描。