CentOS 上 SQL*Plus 安全设置指南
一 操作系统层安全
- 密码复杂度与有效期
- 编辑文件:/etc/login.defs,建议设置:PASS_MAX_DAYS 90、PASS_MIN_DAYS 2、PASS_MIN_LEN 8、PASS_WARN_AGE 7。
- 编辑文件:/etc/pam.d/system-auth,使用 pam_pwquality.so(或兼容的 pam_cracklib)启用复杂度,例如:
password requisite pam_pwquality.so minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 difok=5 enforce_for_root
说明:负数表示“至少出现次数”,如 ucredit=-1 表示至少包含 1 个大写字母。上述复杂度对 root 同样生效。
- 登录失败锁定
- 在 /etc/pam.d/system-auth 与 /etc/pam.d/sshd 增加:
auth required pam_tally2.so onerr=fail deny=5 unlock_time=1800 root_unlock_time=1800
说明:连续失败 5 次锁定 1800 秒,root 同样受限;查看与解锁:pam_tally2、pam_tally2 -r -u 用户名。
- 会话超时
- 在 /etc/profile 设置:TMOUT=600(单位秒),并执行 source /etc/profile 使生效,避免无人值守会话长期暴露。
- 远程登录加固
- 禁止 root 远程 SSH:编辑 /etc/ssh/sshd_config,设置 PermitRootLogin no,重启 sshd。
- 精细 IP 白名单:在 /etc/hosts.allow 配置允许的网段(如 sshd:192.168.1.0/24:allow),在 /etc/hosts.deny 设置 sshd:ALL。
二 Oracle 层安全
- 登录认证与本地 OS 认证
- 避免使用包含密码的命令行(如 sqlplus user/pass),防止密码出现在 ps 或 history 中;推荐:
sqlplus /nolog
conn username/password
或本地管理登录使用:sqlplus / as sysdba(属于操作系统认证,仅限本机高权限账户)。
- 远程登录与来源限制
- 在 $ORACLE_HOME/network/admin/sqlnet.ora 启用白名单:
tcp.validnode_checking = yes
tcp.invited_nodes = (192.168.14.158,192.168.14.159)
执行 lsnrctl reload 使生效。
- 空闲连接保活
- 在 sqlnet.ora 设置:SQLNET.EXPIRE_TIME=15(单位分钟),定期探测死连接,便于及时清理。
- 密码复杂度与账户锁定
- 以 SYS 登录执行 Oracle 口令校验脚本:@?/rdbms/admin/utlpwdmg.sql,为 DEFAULT profile 启用复杂度与锁定策略(如 FAILED_LOGIN_ATTEMPTS、PASSWORD_LIFE_TIME 等)。
- 超级管理员远程登录
- 如业务允许,关闭 REMOTE_LOGIN_PASSWORDFILE(需要重启实例):
show parameter REMOTE_LOGIN_PASSWORDFILE
alter system set remote_login_passwordfile=none scope=spfile;
shutdown immediate; startup;
说明:关闭后,远程无法通过口令文件以 SYSDBA/SYSOPER 登录,仅能本地 OS 认证。
- 登录审计
- 简单登录审计示例:
CREATE TABLE LOGON_TABLE(SESSION_USER varchar2(256), CREATE_TIME date);
CREATE OR REPLACE TRIGGER TRI_LOGON AFTER LOGON ON DATABASE
BEGIN INSERT INTO LOGON_TABLE VALUES(SYS_CONTEXT(‘USERENV’,‘SESSION_USER’), SYSDATE); END; /
可按需扩展为写入专用审计表或结合统一审计。
三 网络与防火墙
- 仅开放必要端口
- 数据库默认监听 1521/TCP;如需远程访问,建议仅对可信网段放行:
firewall-cmd --permanent --add-port=1521/tcp
firewall-cmd --reload
如需限制来源,可结合 firewalld 的 rich rules 或上层 ACL/安全组策略。
- 监听与地址绑定
- 如需远程访问,可在 listener.ora 将 HOST=0.0.0.0 并重启监听;仅在内网环境使用,生产环境建议绑定到内网接口或配合防火墙做来源限制。
四 最小权限与账户管理
- 创建业务用户与最小权限
- 示例:
CREATE USER appuser IDENTIFIED BY StrongPass!23;
ALTER USER appuser DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;
GRANT CREATE SESSION, CREATE TABLE TO appuser;
按需授予对象权限,避免使用 DBA 角色进行日常操作。
- 角色与默认角色
- 通过角色封装权限并设置为默认角色,减少直接授予系统权限:
ALTER USER appuser DEFAULT ROLE CONNECT, RESOURCE;
定期审计用户权限与角色分配,遵循最小权限原则。
五 快速检查清单
| 检查项 |
期望状态 |
验证命令或位置 |
| OS 密码复杂度 |
minlen≥12,含大小写数字特殊字符 |
grep pam_pwquality /etc/pam.d/system-auth |
| OS 登录失败锁定 |
deny=5,unlock_time=1800 |
grep pam_tally2 /etc/pam.d/{system-auth,sshd} |
| OS 会话超时 |
TMOUT=600 |
echo $TMOUT 或 grep TMOUT /etc/profile |
| root 远程 SSH |
禁止 |
grep PermitRootLogin /etc/ssh/sshd_config |
| 数据库来源白名单 |
仅可信 IP |
$ORACLE_HOME/network/admin/sqlnet.ora 的 tcp.invited_nodes |
| 空闲连接保活 |
每 15 分钟探测 |
sqlnet.ora 的 SQLNET.EXPIRE_TIME |
| 监听端口 |
仅 1521/TCP 且来源受限 |
firewall-cmd --list-ports;必要时配合 firewalld rich rules |
| SYS 远程口令文件 |
关闭(如业务允许) |
show parameter REMOTE_LOGIN_PASSWORDFILE |
| 登录审计 |
有登录记录 |
查询自建 LOGON_TABLE 或统一审计视图 |
以上配置可按业务与合规要求微调,变更前请在测试环境验证,并做好备份与回退方案。