一個應用系統作等保,須要對數據庫進行安全加固,根據流程須要先在測試環境進行測試經過後應用於生產環境,這裏簡單記錄測試過程,審計內容是評測的重要點,可是生產環境也不便於開啓,這裏先簡單記錄之,後面再進行相關內容補充。node
SQL> select username,account_status from dba_users;sql
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.oracle
SQL> alter user abc account unlock;
User altered.app
SQL> select username,account_status from dba_users;tcp
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
MGMT_VIEW OPEN
SYS OPEN
SYSTEM OPEN
DBSNMP OPEN
SYSMAN OPEN
B OPEN
ABC LOCKED
OUTLN EXPIRED & LOCKED
FLOWS_FILES EXPIRED & LOCKEDide
其它狀態參數說明:
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 options
SQL>
說明: 遠程登陸訪問不登陸密碼文件進行驗證。
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=none
sqlplus 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 NO
SQL> 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數據庫表空間及權限調整示例
http://koumm.blog.51cto.com/703525/1314154
說明:一般對管理賬號與維護賬號時行密碼策略,業務賬號不作策略限制,例如應用賬號過時,會影響業務的正常使用等狀況,默認使用DEFAULT策略。
SQL> SELECT profile FROM dba_users WHERE username='ABC';
PROFILE
------------------------------
DEFAULT
SQL>
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 UNLIMITED
SQL>
說明:utlpwdmg.sql腳本中包括密碼策略及賬號策略, 該腳本後面是賬號策略的配置,能夠事先註釋掉,後面再一一啓用。
SQL> alter system set resource_limit = true;
SQL> @$ORACLE_HOME/rdbms/admin/utlpwdmg.sql
SQL> 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 10
7 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 ACCEPTiptables -A INPUT -i lo -j ACCEPTiptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPTiptables -A INPUT -p tcp -s 192.168.10.10/32 --dport 1521 -j ACCEPTiptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A INPUT -s 192.168.0.6/32 -i eth0 -j ACCEPTiptables -A INPUT -s 192.168.0.7/32 -i eth0 -j ACCEPTiptables -A INPUT -s 192.168.0.8/32 -i eth0 -j ACCEPTiptables -A INPUT -s 192.168.0.9/32 -i eth0 -j ACCEPTiptables -A INPUT -s 192.168.0.10/32 -i eth0 -j ACCEPTiptables -A INPUT -i eth1 -j ACCEPTiptables -A INPUT -i eth2 -j ACCEPTiptables -A INPUT -s 10.10.10.0/24 -d 230.0.1.0 -j ACCEPTiptables -A INPUT -s 10.10.10.0/24 -d 224.0.0.251 -j ACCEPTiptables -A INPUT -s 20.20.20.0/24 -d 230.0.1.0 -j ACCEPTiptables -A INPUT -s 20.20.20.0/24 -d 224.0.0.251 -j ACCEPTiptables -A INPUT -i eth0 -d 230.0.1.0 -j ACCEPTiptables -A INPUT -i eth0 -d 224.0.0.251 -j ACCEPTiptables -A INPUT -p all -m state --state INVALID,NEW -j DROPiptables -P INPUT DROP