本文共 8242 字,大约阅读时间需要 27 分钟。
一个应用系统做等保,需要对数据库进行安全加固,根据流程需要先在测试环境进行测试通过后应用于生产环境,这里简单记录测试过程,审计内容是评测的重要点,但是生产环境也不便于开启,这里先简单记录之,后面再进行相关内容补充。
SQL> select username,account_status from dba_users;
USERNAME ACCOUNT_STATUS
------------------------------ -------------------------------- MGMT_VIEW OPEN SYS OPEN SYSTEM OPEN DBSNMP OPEN SYSMAN OPEN ABC OPEN B OPEN KOU OPEN OUTLN EXPIRED & LOCKED FLOWS_FILES EXPIRED & LOCKED MDSYS EXPIRED & LOCKED ORDSYS EXPIRED & LOCKED SQL>说明: 如果不使用EM,可以停用MGMT_VIEW,DBSNMP,SYSMAN帐号.
SQL> drop user kou cascade;
User dropped. SQL>
SQL> alter user abc account lock;
User altered.SQL> alter user abc account unlock;
User altered.SQL> select username,account_status from dba_users;
USERNAME ACCOUNT_STATUS
------------------------------ -------------------------------- MGMT_VIEW OPEN SYS OPEN SYSTEM OPEN DBSNMP OPEN SYSMAN OPEN B OPEN ABC LOCKED OUTLN EXPIRED & LOCKED FLOWS_FILES EXPIRED & LOCKED其它状态参数说明:
OPEN: 正常的帐户 LOCKED: 表示这个帐户被锁定; EXPIRED: 表示该帐户口令到期,要求用户在下次logon的时候修改口令(系统会在该account被设置为expire后的第一次登陆是提示你修改密码) EXPIRED(GRACE): 当设置了grace以后(第一次成功登录后到口令到期后有多少天时间可改变口令,在这段时间内,帐户被提醒修改口令并可以正常登陆,account_status显示为EXPIRED(GRACE). LOCKED(TIMED): 这种状态表示失败的login次数超过了FAILED_LOGIN_ATTEMPTS,被系统自动锁定,需要注意的是,在Oracle 10g中,默认的DEFAULT值是10次. EXPIRED & LOCKED:表示此账户被设置为口令到期且被锁定。 EXPIRED(GRACE) & LOCKED(TIMED): 当account_stutus为EXPIRED(GRACE)的时候,用户又尝试失败的login次数超过了FAILED_LOGIN_ATTEMPTS,被系统自动锁定 EXPIRED & LOCKED(TIMED): 当设置了account expire后,用户又失败的login次数超过了FAILED_LOGIN_ATTEMPTS,被系统自动锁定 EXPIRED(GRACE) & LOCKED: 用户account_status为EXPIRED(GRACE)后,又被DBA 手工锁定帐户后的状态
C:\>sqlplus sys/oracle@orcl181 as sysdba;
SQL*Plus: Release 11.2.0.1.0 Production on 星期一 12月 8 14:51:18 2014
Copyright (c) 1982, 2010, Oracle. All rights reserved.连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL>
说明: 远程登录访问不登录密码文件进行验证。
SQL> alter system set remote_login_passwordfile=none scope=spfile;
SQL> shutdown immediate;
SQL> startup;有些安全配置要求,限制本地操作系统认证登录,配置如下。
$ vi /u01/app/oracle/product/10.2.0/db_1/network/admin/sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES=nonesqlplus system/oracle@orcl as sysdba
sqlplus / as sysdba说明: 以上两条如果都启的话,SYSDBA用户将无法登录,数据库也无法启动,如果要进行管理操作,需要变通操作。
Oracle提供三种标准的角色: connect,resource和DBA,限制DBA权限的用户使用.
SQL> select * from dba_sys_privs where grantee='ABC';
GRANTEE PRIVILEGE ADM
------------------------------ ---------------------------------------- --- ABC UNLIMITED TABLESPACE NOSQL> select * from dba_role_privs where grantee='ABC';
GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- --- ABC CONNECT NO YES ABC RESOURCE NO YES SQL>SQL> select * from dba_tab_privs where grantee='ABC';
no rows selected示例:oracle数据库表空间及权限调整示例
说明:通常对管理帐号与维护帐号时行密码策略,业务帐号不做策略限制,例如应用帐号过期,会影响业务的正常使用等情况,默认使用DEFAULT策略。
SQL> SELECT profile FROM dba_users WHERE username='ABC';
PROFILE
------------------------------ DEFAULTSQL>
SQL> SELECT profile,resource_type,resource_name,limit FROM dba_profiles WHERE resource_type='PASSWORD' AND profile='DEFAULT';
PROFILE RESOURCE RESOURCE_NAME LIMIT
------------------------------ -------- -------------------------------- ---------------------------------------- DEFAULT PASSWORD FAILED_LOGIN_ATTEMPTS 10 DEFAULT PASSWORD PASSWORD_LIFE_TIME UNLIMITED DEFAULT PASSWORD PASSWORD_REUSE_TIME UNLIMITED DEFAULT PASSWORD PASSWORD_REUSE_MAX UNLIMITED DEFAULT PASSWORD PASSWORD_VERIFY_FUNCTION NULL DEFAULT PASSWORD PASSWORD_LOCK_TIME UNLIMITED DEFAULT PASSWORD PASSWORD_GRACE_TIME UNLIMITEDSQL>
说明:utlpwdmg.sql脚本中包括密码策略及帐号策略, 该脚本后面是帐号策略的配置,可以事先注释掉,后面再一一启用。
SQL> alter system set resource_limit = true;
SQL> @$ORACLE_HOME/rdbms/admin/utlpwdmg.sqlSQL> ALTER PROFILE DEFAULT LIMIT
PASSWORD_LIFE_TIME 60 PASSWORD_GRACE_TIME 10 PASSWORD_REUSE_TIME 1800 PASSWORD_REUSE_MAX UNLIMITED FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1/1440; PASSWORD_VERIFY_FUNCTION verify_function相关参数说明:
FAILED_LOGIN_ATTEMPTS: 允许登录失败的次数 PASSWORD_LOCK_TIME: 达到登录失败次数后,帐户锁定的天数,过了这个天数之后帐户会自动解锁 PASSWORD_LIFE_TIME: 口令的生存期(天) PASSWORD_GRACE_TIME: 口令失效后从第一次成功登录算起的更改口令的宽限期(天) PASSWORD_REUSE_TIME: 可以重新使用口令前的天数 PASSWORD_REUSE_MAX: 可以重新使用口令的最多次数 PASSWORD_VERIFY_FUNCTION: 检验口令设置的PL/SQL 函数查看结果:
SQL> set linesize 200;
SQL> SELECT profile,resource_type,resource_name,limit FROM dba_profiles WHERE resource_type='PASSWORD' AND profile='DEFAULT';PROFILE RESOURCE RESOURCE_NAME LIMIT
------------------------------ -------- -------------------------------- ---------------------------------------- DEFAULT PASSWORD FAILED_LOGIN_ATTEMPTS 3 DEFAULT PASSWORD PASSWORD_LIFE_TIME 60 DEFAULT PASSWORD PASSWORD_REUSE_TIME 1800 DEFAULT PASSWORD PASSWORD_REUSE_MAX UNLIMITED DEFAULT PASSWORD PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION DEFAULT PASSWORD PASSWORD_LOCK_TIME .0006 DEFAULT PASSWORD PASSWORD_GRACE_TIME 107 rows selected.
SQL>
# 取消Oracle密码复杂度检查:
SQL> alter profile default limit password_verify_function null; SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
SQL> CREATE PROFILE ABC_PROFILE LIMIT
PASSWORD_LIFE_TIME UNLIMITED PASSWORD_GRACE_TIME 10 PASSWORD_REUSE_TIME 1800 PASSWORD_REUSE_MAX UNLIMITED FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1/1440;SQL> alter user abc profile ABC_PROFILE;
User altered.SQL>
SQL> SELECT profile,resource_type,resource_name,limit FROM dba_profiles WHERE resource_type='PASSWORD' AND profile='ABC_PROFILE';PROFILE RESOURCE RESOURCE_NAME LIMIT
------------------------------ -------- -------------------------------- ---------------------------------------- ABC_PROFILE PASSWORD FAILED_LOGIN_ATTEMPTS 3 ABC_PROFILE PASSWORD PASSWORD_LIFE_TIME UNLIMITED ABC_PROFILE PASSWORD PASSWORD_REUSE_TIME 1800 ABC_PROFILE PASSWORD PASSWORD_REUSE_MAX UNLIMITED ABC_PROFILE PASSWORD PASSWORD_VERIFY_FUNCTION NULL ABC_PROFILE PASSWORD PASSWORD_LOCK_TIME .0006 ABC_PROFILE PASSWORD PASSWORD_GRACE_TIME 10
只有SYSDBA才能访问数据字典基础表,普通用户不能查看X$开头的表。
SQL> show parameter O7_DICTIONARY_ACCESSIBILITY
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------ O7_DICTIONARY_ACCESSIBILITY boolean FALSE SQL>SQL> alter system set O7_DICTIONARY_ACCESSIBILITY= TRUE scope = spfile;
SQL> shutdown immediate; SQL> startup;
只有信任的IP地址才能通过监听器访问数据库,非信任的客户端会被拒绝, 本机IP地址一定要在信任之列。
通常对应用服务与数据库服务器加入信任列表。$ vi $ORACLE_HOME/network/admin/sqlnet.ora
tcp.validnode_checking = yes tcp.invited_nodes = (192.168.233.150,192.168.233.151)#除以下IP地址之外都允许访问。
tcp.excluded_nodes = (IP1,IP2,...)重启监听即可。
$ vi $ORACLE_HOME/network/admin/sqlnet.ora
SQLNET.EXPIRE_TIME = 60说明:客户端连接后在设置的时间内没有任何操作,客户端会自动断开。
下面是oracle rac 11g集群iptables防火墙示例, 一些数据库安全扫描工具扫不出打了补丁的数据库,只能采取防火墙来禁。
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp -s 192.168.10.10/32 --dport 1521 -j ACCEPT iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -s 192.168.0.6/32 -i eth0 -j ACCEPT iptables -A INPUT -s 192.168.0.7/32 -i eth0 -j ACCEPT iptables -A INPUT -s 192.168.0.8/32 -i eth0 -j ACCEPT iptables -A INPUT -s 192.168.0.9/32 -i eth0 -j ACCEPT iptables -A INPUT -s 192.168.0.10/32 -i eth0 -j ACCEPT iptables -A INPUT -i eth1 -j ACCEPT iptables -A INPUT -i eth2 -j ACCEPT iptables -A INPUT -s 10.10.10.0/24 -d 230.0.1.0 -j ACCEPT iptables -A INPUT -s 10.10.10.0/24 -d 224.0.0.251 -j ACCEPT iptables -A INPUT -s 20.20.20.0/24 -d 230.0.1.0 -j ACCEPT iptables -A INPUT -s 20.20.20.0/24 -d 224.0.0.251 -j ACCEPT iptables -A INPUT -i eth0 -d 230.0.1.0 -j ACCEPT iptables -A INPUT -i eth0 -d 224.0.0.251 -j ACCEPT iptables -A INPUT -p all -m state --state INVALID,NEW -j DROP iptables -P INPUT DROP