温馨提示×

Debian上Oracle数据库安全设置

小樊
50
2025-10-08 17:21:05
栏目: 云计算

1. 系统准备与更新
在Debian上部署Oracle数据库前,需确保系统处于最新状态,以修复已知安全漏洞。执行以下命令更新系统:

sudo apt update && sudo apt upgrade -y

安装Oracle所需的依赖包(如bcbinutilslibaio1等),避免因依赖缺失导致安装或运行异常。

2. 用户与权限管理

  • 创建专用Oracle用户组与用户:避免使用root用户运行Oracle,创建oinstall(安装组)、dba(数据库管理员组)和oracle(运行用户):
    sudo groupadd oinstall
    sudo groupadd dba
    sudo useradd -g oinstall -G dba -m -s /bin/bash oracle
    sudo passwd oracle  # 设置强密码
    
  • 限制用户权限:通过/etc/security/limits.d/30-oracle.conf文件设置Oracle用户的资源限制,防止资源耗尽攻击。示例配置:
    oracle soft nproc 2047
    oracle hard nproc 16384
    oracle soft nofile 1024
    oracle hard nofile 65536
    oracle soft stack 10240
    
  • 环境变量配置:编辑/home/oracle/.bash_profile,设置Oracle必要的环境变量:
    export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1  # 根据实际安装路径调整
    export PATH=$ORACLE_HOME/bin:$PATH
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
    export ORACLE_SID=orcl  # 根据实际SID调整
    
    执行source /home/oracle/.bash_profile使配置生效。

3. 网络与防火墙配置

  • 配置Oracle监听器:编辑$ORACLE_HOME/network/admin/listener.ora文件,设置监听器地址和端口(默认1521):
    LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = your_hostname)(PORT = 1521))))
    SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = orcl)(ORACLE_HOME = $ORACLE_HOME)))
    
    启动监听器并设置为开机自启:
    lsnrctl start
    lsnrctl add  # 添加监听器到开机自启
    
  • 防火墙规则设置:使用ufw(推荐)或iptables限制对Oracle端口的访问。以ufw为例:
    sudo ufw allow 1521/tcp  # 允许1521端口TCP流量
    sudo ufw enable          # 启用ufw
    sudo ufw reload          # 重载规则
    
    若使用iptables,需添加规则并保存:
    sudo iptables -A INPUT -p tcp --dport 1521 -j ACCEPT
    sudo netfilter-persistent save  # 保存规则(需安装iptables-persistent)
    
    建议仅允许可信IP地址访问Oracle端口,进一步提升安全性。

4. Oracle特定安全配置

  • 启用审计功能:通过审计跟踪数据库操作,识别异常行为。以sysdba身份登录SQL*Plus,执行:
    SQL> audit_trail = ON;  -- 开启审计
    SQL> audit create session by access;  -- 审计用户连接
    SQL> audit select table, insert table, update table, delete table by access;  # 审计表操作
    
    审计日志默认存储在$ORACLE_BASE/diag/rdbms/<SID>/<SID>/trace/alert_<SID>.log中,需定期检查。
  • 数据加密
    • 传输层加密:配置Oracle使用SSL/TLS加密客户端与服务器之间的数据传输,编辑$ORACLE_HOME/network/admin/sqlnet.ora文件,添加:
      SQLNET.AUTHENTICATION_SERVICES = (TCPS)
      SSL_CLIENT_AUTHENTICATION = TRUE
      SSL_VERSION = 1.2
      
    • 存储加密:对敏感表或表空间进行加密,使用Oracle Transparent Data Encryption(TDE)功能,参考Oracle官方文档配置。
  • 密码策略强化:通过Oracle的PROFILE功能设置密码复杂度,如最小长度、有效期、历史密码检查。创建profile并分配给用户:
    SQL> CREATE PROFILE strong_pwd LIMIT
      PASSWORD_LENGTH 8
      PASSWORD_VERIFY_FUNCTION verify_function_11G
      PASSWORD_REUSE_MAX 5
      PASSWORD_REUSE_TIME 30
      PASSWORD_LIFE_TIME 90;
    SQL> ALTER USER myuser PROFILE strong_pwd;
    
    需先创建verify_function_11G函数(Oracle自带,位于$ORACLE_HOME/rdbms/admin目录)。

5. 日志与监控

  • 系统日志:使用LogwatchFail2ban监控系统日志,及时发现暴力破解、未授权访问等异常。安装Fail2ban
    sudo apt install fail2ban
    
    配置/etc/fail2ban/jail.local,添加Oracle监听器端口监控:
    [oracle]
    enabled = true
    port = 1521
    filter = oracle
    logpath = /var/log/syslog
    maxretry = 3
    bantime = 3600
    
  • Oracle日志:定期检查Oracle的alert_<SID>.log(警报日志)和trace目录下的跟踪文件,分析数据库错误、连接异常等信息。

6. 补丁与备份管理

  • 系统补丁更新:定期执行sudo apt update && sudo apt upgrade -y,安装Debian系统和依赖包的安全补丁。
  • Oracle补丁更新:关注Oracle官方安全公告,及时下载并安装数据库补丁集(PSU、CPU),修复已知漏洞。可通过Oracle Support网站获取补丁,使用OPatch工具安装。
  • 数据备份:制定定期备份策略,使用RMAN(Recovery Manager)工具备份数据库。示例全量备份命令:
    RMAN> BACKUP DATABASE TO DEVICE TYPE DISK FORMAT '/backup/orcl_%U.bak';
    RMAN> BACKUP ARCHIVELOG ALL DELETE INPUT;  # 备份归档日志
    
    将备份文件存储在异地或安全存储介质中,确保数据可恢复。

7. 其他安全加固

  • 禁用不必要的服务:关闭Debian系统中未使用的服务(如FTP、Telnet),减少攻击面。使用systemctl命令禁用服务:
    sudo systemctl stop ftp
    sudo systemctl disable ftp
    
  • 关闭透明大页(THP)与NUMA:Oracle官方建议关闭THP和NUMA,以提升数据库性能和稳定性。编辑/etc/default/grub文件,添加内核参数:
    GRUB_CMDLINE_LINUX="transparent_hugepage=never numa=off"
    
    更新GRUB并重启系统:
    sudo update-grub
    sudo reboot
    
  • ZeroConf配置:关闭ZeroConf服务(自动IP分配),防止网络配置被篡改。编辑/etc/avahi/avahi-daemon.conf文件,设置:
    disable-user-service-publishing=yes
    
    重启Avahi服务:
    sudo systemctl restart avahi-daemon
    ```。

0