1.oracle数据库自身安全... PAGEREF _Toc454521268 \h 1
1.1灾备环境加固... PAGEREF _Toc454521269 \h 1
1.1.1 DataGuard灾备环境部署... PAGEREF _Toc454521270 \h 1
1.1.2 RMAN物理备份... PAGEREF _Toc454521271 \h 1
1.1.3 DataPump Impdp/Expdb逻辑备份... PAGEREF _Toc454521272 \h 1
1.2帐号权限加固... PAGEREF _Toc454521273 \h 2
1.2.1 最小权限使用规则... PAGEREF _Toc454521274 \h 2
1.2.2 用户帐号管理... PAGEREF _Toc454521275 \h 2
1.2.3 DBSNMP用户的保护... PAGEREF _Toc454521276 \h 2
1.2.4 SYS用户... PAGEREF _Toc454521277 \h 3
1.2.5 Oracle 数据字典的保护... PAGEREF _Toc454521278 \h 3
1.3数据访问控制加固... PAGEREF _Toc454521279 \h 3
1.3.1 $ORACLE_HOME/bin目录权限保护... PAGEREF _Toc454521280 \h 3
1.3.2 关闭远程操作系统认证... PAGEREF _Toc454521281 \h 3
1.3.3 加强服务管理... PAGEREF _Toc454521282 \h 3
1.3.4 加强对业务数据管理... PAGEREF _Toc454521283 \h 4
1.4 网络访问控制加固... PAGEREF _Toc454521284 \h 4
1.4.1 设置TNS登录的ip访问限制... PAGEREF _Toc454521285 \h 4
1.4.2 修改默认监听端口... PAGEREF _Toc454521286 \h 4
1.4.3 防止远程监听程序的管理... PAGEREF _Toc454521287 \h 4
1.4.4 关闭Extproc功能... PAGEREF _Toc454521288 \h 4
1.4.5 关闭XDB服务... PAGEREF _Toc454521289 \h 5
1.5 口令策略加固... PAGEREF _Toc454521290 \h 6
1.5.1 密码文件管理... PAGEREF _Toc454521291 \h 6
1.5.2 启用资源限制... PAGEREF _Toc454521292 \h 6
1.5.3 密码策略... PAGEREF _Toc454521293 \h 6
1.6 审计策略加固... PAGEREF _Toc454521294 \h 7
1.6.1 数据库操作审计... PAGEREF _Toc454521295 \h 7
1.6.2 日志目录管理... PAGEREF _Toc454521296 \h 8
1.7 漏洞加固... PAGEREF _Toc454521297 \h 8
1.7.1 安全补丁更新... PAGEREF _Toc454521298 \h 8
1.7.2 安装防病毒软件... PAGEREF _Toc454521299 \h 8
2. linux系统安全... PAGEREF _Toc454521300 \h 8
2.1 用户帐号安全... PAGEREF _Toc454521301 \h 8
2.1.1口令密码管理... PAGEREF _Toc454521302 \h 8
2.1.2 用户账号安全等级管理... PAGEREF _Toc454521303 \h 9
2.1.3 系统登录用户管理... PAGEREF _Toc454521304 \h 9
2.2网络服务安全... PAGEREF _Toc454521305 \h 9
2.2.1 关闭不必要的服务... PAGEREF _Toc454521306 \h 9
2.2.2 谨慎其他服务中允许本地用户登录... PAGEREF _Toc454521307 \h 9
2.2.3 更改默认服务端口... PAGEREF _Toc454521308 \h 10
2.3 系统安全设置... PAGEREF _Toc454521309 \h 10
2.3.1 系统关闭PING.. PAGEREF _Toc454521310 \h 10
2.3.2 禁止IP源路径路由... PAGEREF _Toc454521311 \h 10
2.3.3 修正脚本文件在“/etc/rc.d/init.d”目录下的权限... PAGEREF _Toc454521312 \h 10
2.3.4 日志安全管理... PAGEREF _Toc454521313 \h 10
2.4综合防御管理... PAGEREF _Toc454521314 \h 11
2.4.1 启用自身防火墙iptables. PAGEREF _Toc454521315 \h 11
2.4.2 漏洞追踪及管理... PAGEREF _Toc454521316 \h 11
2.4.3 保持更新,补丁管理... PAGEREF _Toc454521317 \h 11
3. 硬件防火墙... PAGEREF _Toc454521318 \h 12
4. 总结... PAGEREF _Toc454521319 \h 12
关于数据库系统安全防护,以下主要从三个方面来阐述一些安全措施。
oracle自身安全---->
linux系统安全 ---->硬件防火墙
oracle安全加固配置策略:
灾备环境加固------>帐号权限加固------>数据访问控制加固------>网络访问控制加固------>口令策略加固------>审计策略加固------>漏洞加固
DataGuard分为"物理standby"和"逻辑standby",我司环境主要考虑用物理standby方式,采用一主多备方案部署。该方式下,主备库之间物理结构、逻辑结构一致,物理备库等同于生产库。
在主备库之间的同步方式上,主要考虑两种模式,一种为最大性能,一种为最大可用性。
(一)最大性能方式:主备库同步数据采用异步传输,该方式下的数据同步对主库几乎没有任何影响,但是当主库宕机后,主备切换可能会出现部分数据丢失;
(二)最大可用方式,该方式介于最大保护和最大性能之间,正常情况下主备之间的是同步的,当网络或者备库出现问题时,主备库同步时等待超时就会自动转为最大性能方式进行异步传输。该方式下对主库性能会有一定的影响,但是当主库宕机时,如果主备库之间是同步方式传输,主备切换几乎不会出现数据丢失,如果主备之间是异步方式传输,主备切换可能会出现部分数据的丢失。
RMAN(Recovery
Manager)是一种用于备份(backup)、还原(restore)和恢复(recover)数据库的 Oracle 工具。它可以备份整个数据库或数据库部件,如表空间、数据文件、控制文件、归档文件以及Spfile参数文件。RMAN可以进行增量数据块级别的备份,增量RMAN备份是时间和空间有效的,因为他们只备份自上次备份以来有变化的那些数据块。增量备份虽然只备份变化的那些数据块,但是也会遍历整个数据库,因此花费的时间也是比较长,并且在备份期间对整个数据库的性能影响较大。
在备份的策略上oracle的备份方法主要有全备份、增量备份和差异备份。全备份(Full Backup)是每次转储数据库全部数据,生成所有数据的备份,这种备份比较占用时间和存储空间。增量备份(Incremental Backup)只转储上次转储后更新过的数据。全转储与增量转储相比,从恢复角度看,使用海量转储全备份得到的后备副本进行恢复往往更方便,但对于大型数据库,事务处理又十分频繁,所以增量转储方式更实用更有效。差异备份(Differential Backup)融合以上两种备份的优点,首先进行完全备份,其次在以后的每次备份中只备份每个数据文件较上次完全备份所更新的部分(差异数据),所以,数据文件损坏后,利用该时间点之前最近一次的完全备份进行恢复,然后再使用时间点A的差异数据即可完成所有数据的恢复。 在oracle备份策略中,可以考虑多极备份或者采用物理备份和逻辑备份结合。
在oracle10g之前,数据库逻辑备份工具主要是exp/imp,10g之后引入了DataPump,提供的是一种基于服务器的数据提取和恢复的实用工具。DataPump在体系结构和功能上与传统的exp/imp工具相比,有了显著的提升。
使用impdp/expdb工具进行逻辑备份,备份方式比较灵活,可以只针对某个用户或者某个用户下的对象(表、索引、存储过程、触发器等等)或者针对整个数据库进行逻辑备份。采用逻辑备份方式虽然灵活,但是只能保证数据的备份,无法对数据库底层(表空间、数据文件、控制文件、参数文件等等)进行备份。并且应用逻辑备份进行恢复时,需要完成数据库底层的构建。
因为物理备份方式的不灵活,所以在数据库比较庞大的时候,可以采用物理备份和逻辑备份相结合的方式进行备份,针对某些重要的用户或表每天进行逻辑备份。
应该只提供最小权限给用户(包括SYSTEM和OBJECT权限)。从PUBLIC组中撤回不必要的权限或角色。(如:UTL_SMTP、UTL_TCP、UTL_HTTP、UTL_FILE、DBMS_RANDON、DBMS_SQL、DBMS_SYS_SQL、DBMS_BACKUP_RESTORE)
撤销不需要的权限和角色,使用SQL语句,如下
REVOKE EXECUTE ON
SYS.UTL_HTTP FROM PUBLIC;
REVOKE EXECUTE ON
SYS.UTL_FILE FROM PUBLIC;
REVOKE EXECUTE ON
SYS.UTL_SMTP FROM PUBLIC;
REVOKE SELECT ON
ALL_USERS FROM PUBLIC;
撤销之后可以验证public是否还具备这些权限:
OEM管理器中,安全性->用户->PUBLIC->已授予的对象权限
col pp format a35
SELECT s.privilege||' ON
'||s.owner||'.'||NVL(l.longname, s.table_name) pp, s.grantable FROM sys.dba_tab_privs
s, javasnm l WHERE s.table_name = l.short(+) AND s.grantee='PUBLIC' and
s.privilege = 'EXECUTE' and s.table_name like 'UTL%';
查看用户user拥有的系统权限:
SQL> select *
from dba_sys_privs where grantee='USER';
查看用户user拥有的角色:
SQL> select *
from dba_role_privs where grantee='USER';
查看用户user拥有的对象权限:
SQL> select *
from dba_tab_privs where grantee='USER';
查看DBA角色拥有权限:
SQL> select *
from role_role_privs where role='DBA';
为了安全考虑,应该锁定Oracle当中不需要的用户;或改变缺省用户的密码。
锁定不需要的用户,使用SQL语句:ALTER USER
user PASSWORD EXPIRE; ALTER USER user ACCOUNT UNLOCK; 注意锁定MGMT_VIEW、DBSNMP、SYSMAN帐号或修改密码。(如果要使用DBConsole ,DBSNMP 、SYSMAN不能锁定,那么就需要修改密码)DIP、EXFSYS、OUTLN、TSMSYS、WMSYS默认已锁定,确定是否解锁。
Oracle数据库系统如果采用典型安装后,自动创建一个DBSNMP的用户,该用户允许Oracle系统的智能代理(intelligent
Agent),该用户的缺省密码也是“DBSNMP”。如果忘记修改该用户的口令,任何人都可以通过该用户存取数据库系统。其他有威胁的帐号还有:CTXSYS,MDSYS,ORDPLUGINS,ORDSYS,OUTLN等。处理的方法是锁定该账号,或者更换密码。
Oracle数据库系统安装后,自动创建一个叫做SYS的数据库管理员用户,当该用户sysdba方式连接数据库时,便具有全部系统权限,因而对它的保护尤为重要。因此需要更换SYS用户密码,使其符合密码复杂度要求;新建一个DBA用户,作为日常管理使用。
设置保护后,可防止其他用户(具有‘ANY’ system privileges)使用数据字典时,具有相同的‘ANY’权限。更改参数O7_DICTIONARY_ACCESSIBILITY=False 如果用户必须需要该权限,赋予其权限SELECT ANY DICTIONARY。
验证:
sys@ORCL>show parameter
O7_DICTIONARY_ACCESSIBILITY
NAME TYPE
VALUE
----------- ----------------- ------------------------------
O7_DICTIONARY_ACCESSIBILITY boolean FALSE
确保对$ORACLE_HOME/bin目录的访问权限尽可能少。运行命令:chown –R oracle:dba $ORACLE_HOME/bin。可以使用命令验证:ls –l $ORACLE_HOME/bin 确保该目录下的文件属主为oracle用户,且其他用户没有写权限。
设置正确识别客户端用户,并限制操作系统用户数量(包括管理员权限、root权限、普通用户权限等)。在数据库的账户管理中删除不必要的操作系统账号。
设置参数REMOTE_OS_AUTHENT值为FALSE (SAP 系统不可设置为False)。Oracle允许用户通过采用外部验证的方式登录数据库。默认情况下,只允许本机的用户采用外部验证登录到数据库中。当将remote_os_authent这个参数设置为true时,则允许远端用户采用外部验证的方式登录到数据库中。设置(需重启数据库):
alter system set
remote_os_authent=false scope=spfile;
验证:
SQL> show
parameter remote_os_authent
NAME TYPE VALUE
------------------------------------
---------- ------------------------------
remote_os_authent boolean FALSE
在不影响业务系统正常运行的情况下,停止或禁用与承载业务无关的服务或组件。用操作系统命令查看有无与业务无关的服务或组件,然后使用系统命令停止或禁用该服务与组件。
定时检查数据库系统中无效或失效对象,删除数据库中存在无用的、测试的、废弃的表、视图、存储过程等等。
仅允许最少的必要的IP地址可连接TNS监听器。在目录$ORACLE_HOME/network/admin/下修改sqlnet.ora文件,实现TNS登录IP限制,设置下列配置信息:
tcp.validnode_checking=yes
#允许访问的IP
tcp.invited_nodes=(localhost, 本机ip, 应用服务器ip,管理机ip等)
#不允许访问的IP
tcp.excluded_nodes=(ip1,ip2,......)
修改sqlnet.ora后,需要重启listener服务才能生效。
oracle的监听端口默认为1521,可以修改为其他端口,修改后需重启监听才能生效。在目录$ORACLE_HOME/network/admin/下修改listener.ora文件,将默认端口号1521改为3521,如下配置:
(ADDRESS = (PROTOCOL =
TCP)(HOST = 127.0.0.1)(PORT = 1521))
修改PORT的值为新的监听端口->
(ADDRESS = (PROTOCOL =
TCP)(HOST = 127.0.0.1)(PORT = 3521))
修改之后,重启监听后进行确认:lsnrctl
status
通过设置listener.ora文件中的参数ADMIN_RESTRICTIONS_listener_name来防止远程对监听程序的非授权管理。
在listener.ora文件中,设置ADMIN_RESTRICTIONS_(listener_name)=ON。
设置LISTENER加访问密码:(only
9i) 修改$ORACLE_HOME/network/admin/listener.ora文件PASSWORDS_LISTENER
=
10g之后 : (监听默认为本地操作系统帐号认证,即禁止远程管理)
验证:
Lsnrctl status,查看输出
Security ON: Local OS Authentication
默认安装时,会安装一个PL/SQL外部程序(ExtProc)条目在listener.ora中,是oracle为调用外部程序默认配置的监听,它的名字通常是ExtProc或PLSExtProc,但一般不会使用它,可以直接从listener.ora中将这项移除,因为对ExtProc已经有多种攻击手段了,在不使用外部程序时,oracle也是建议删除的。PLSExtPro 是pl/sql external procdure 的意思,就是在pl/sql中调用外部语句,如c,java写的过程。现在,Oracle已经全面支持JAVA,这东西早已过时,之所以继续保留是考虑到兼容以前老版本的数据库实例。
所以考虑到extproc存在安全问题允许用户不进行身份认证就可以调用系统函数,因此,如果不需要该功能必须关闭。
修改目录$ORACLE_HOME/network/admin/下的TNSNAMES.ORA和LISTENER.ORA文件,删除或注释以下条目:
icache_extproc
PLSExtproc
Extproc
tnsnames.ora :
#EXTPROC_CONNECTION_DATA
=
# (DESCRIPTION =
# (ADDRESS_LIST =
# (ADDRESS = (PROTOCOL = IPC)(KEY =
EXTPROC0))
# )
# (CONNECT_DATA =
# (SID = PLSExtProc)
# (PRESENTATION = RO)
# )
# )
listener.ora :
orclps2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
# (ADDRESS = (PROTOCOL = IPC)(KEY =
EXTPROC1523))
(ADDRESS = (PROTOCOL = TCP)(HOST =
192.168.5.232)(PORT = 1523))
)
)
ADR_BASE_LISTENER
= /u01/app/oracle
Oracle XDB组件是oracle上提供XML服务能力的组件,从Oracle9i之后,会作为缺省安装项。安装完XDB后,在启动Oracle时,有两个服务:HTTP(默认端口为8080)和FTP(默认端口2100)会缺省启动。这里的FTP服务是Oracle自身的FTP服务,不是标准的FTP服务,在这个FTP服务中进行的身份验证,将会使用Oracle数据库的用户名/密码。
XDB 的 HTTP 和 FTP 服务存在多个缓冲区溢出问题,远程攻击者可以利用这些漏洞对服务进行拒绝服务攻击,精心提交字符串数据可能以服务进程权限在系统上执行任意指令。当然,在9i时该漏洞只能通过下面的方式进行关闭XDB服务,现在11g后,虽然oracle官方已经提供了相关补丁审计,但是并不能确保不会被溢出的风险。
因此,如果不需要oracle的XML数据库功能,可以关闭XDB,关闭方法如下:
编辑$ORACLE??_HOME/dbs??/initSID.ora文件,去除如下行: dispatchers='(PROTOCOL=TCP) (SERVICE=XDB);然后重启数据库??。也??可以在Oracle下,以system身份登录,运行:dro??p user xdb
cascade;
show parameter
dispatchers 如为空,表示无该服务。
去掉相应的数据库的初始化参数中的如下行:
dispatchers='(PROTOCOL=TCP) (SERVICE={sid}XDB)'
配置密码文件的使用方式,配置参数REMOTE_LOGIN_PASSWORD_FILE=
None: 使得oracle不使用密码文件,只能使用OS认证,不允许通过不安全网络进行远程管理。(安全高,但是如果数据库采用DataGuard等其他特殊设置,会导致无法和数据库通讯)
Exclusive: 可以使用唯一的密码文件,但只限一个数据库。密码文件中可以包括除了sys用户的其他用户。
Shared: 可以在多个数据库上使用共享的密码文件。但是密码文件中只能包含sys用户。
设置:(需重启数据库)
alter system set remote_login_passwordfile=
Exclusive scope=spfile;
验证:
SQL> show parameter
remote_login_passwordfile
NAME TYPE VALUE
---------------- ----------
------------------------------
remote_login_passwordfile string Exclusive
Profile分两部分(资源参数和密码参数),resource_limit为TRUE限定资源参数(resource
parameters)设置有效;不管resource_limit的值为TRUE或FALSE密码参数(password parameters)设置始终有效。
alter system set
resource_limit=true scope=both;
常用资源参数(除非应用程序有明确的资源规划,一般不需修改):CPU_PER_SESSION、CPU_PER_CALL、LOGICAL_READS_PER_SESSION、LOGICAL_READS_PER_CALL、IDLE_TIME、CONNECT_TIME、PRIVATE_SGA
在Oracle中,我们可以通过修改用户概要文件来设置密码的安全策略,可以自定义密码的复杂度。在概要文件中有以下参数是和密码安全有关心的:
FAILED_LOGIN_ATTEMPTS:最大错误登录次数
PASSWORD_GRACE_TIME:口令失效后锁定时间
PASSWORD_LIFE_TIME:口令有效时间
PASSWORD_LOCK_TIME:登录超过有效次数锁定时间
PASSWORD_REUSE_MAX:口令历史记录保留次数
PASSWORD_REUSE_TIME:口令历史记录保留时间
PASSWORD_VERIFY_FUNCTION:口令复杂度审计函数
解释:
PASSWORD_LIFE_TIME:口令有效时间,口令使用期限(应用系统帐号暂不修改)。
PASSWORD_GRACE_TIME:指的是如果密码已经过期以后, 第一次登录时间开始往后统计, 使系统可以使用的日期限度。
PASSWORD_REUSE_TIME:是重用密码的最小时间间隔,单位是天。可以给出整数或分数,如1/1440表示1分钟(出于效率的考虑,oracle不会每分钟都去进行检查,一般来说,有5分钟左右的误差,因此如果这个数小于1/1440则没有多大的意义)。
PASSWORD_REUSE_MAX:是重用密码前更换密码的最小次数。
FAILED_LOGIN_ATTEMPTS和 PASSWORD_LOCK_TIME通常在一起使用,如下:
ALTER PROFILE default LIMIT
FAILED_LOGIN_ATTEMPTS 60;
ALTER PROFILE default LIMIT PASSWORD_LOCK_TIME
0.5;
Oracle本身提供一个密码复杂性函数脚本,可以根据需要修改或者直接执行Oracle提供的验证函数脚本$ORACLE_HOME/rdbms/admin/utlpwdmg.sql
执行start utlpwdmg.sql
设置后,密码复杂度必须包含字母、数字、标点(密码不区分大小写),最小长度为4。
最大错误登录次数为10次,账号锁定时间为1天
验证:OEM-》安全性-》概要文件
select * from
dba_profiles;
和用户关联:
SQL> select * from dba_profiles where
profile='DEFAULT';
SQL> select username, profile from
dba_users;
SQL> show parameter resource_limit 资源管理的开关参数
SQL> ALTER USER HR PROFILE limit_verify_function_11G;
Oracle数据库具有对其内部所有发生的活动的审计能力,审计日志一般放在sys.aud$表中,也可以写入操作系统的审计跟踪文件中。可审计的活动有三种类型:登录尝试、数据库活动和对象存取,缺省情况下,数据库不启动审计,要求管理员配置数据库后才能启动审计。
如果需要开启审计,可以使用下面命令更改参数配置AUDIT_TRAIL=True
alter system set
audit_trail='OS' scope=spfile;
alter system set Audit_sys_operations=true
scope=spfile;
默认为false,当设置为true时,所有sys用户(包括以sysdba,sysoper身份登录的用户)的操作都会被记录。
开启审计跟踪后,可以设置AUDIT_FILE_DEST指定审记文件目标存储路径,其缺省值是$ORACLE_HOME/rdbms/audit
SQL> show parameter
audit_file_dest
NAME TYPE VALUE
------------------
------------- ------------------------------
audit_file_dest string
/u01/app/oracle/admin/orcl/
监听器日志,查看错误登录记录:
[oracle@dg2 ~]$
find $ORACLE_BASE -name listener.log
/u01/app/oracle/diag/tnslsnr/dg2/listener/trace/listener.log
SQL> show
parameter dump
NAME TYPE
VALUE
------------------------------------
----------- ------------------------------
background_core_dump string partial
background_dump_dest
string /u01/app/oracle/diag/rdbms/orcl/orcl/trace
core_dump_dest string
/u01/app/oracle/diag/rdbms/orcl/orcl/cdump
max_dump_file_size string
unlimited
shadow_core_dump string
partial
user_dump_dest string
/u01/app/oracle/diag/rdbms/orcl/orcl/trace
SQL> show
parameter audit_file_dest
NAME TYPE VALUE
------------------
------------- ------------------------------
audit_file_dest string
/u01/app/oracle/admin/orcl/
SQL> select
name from v$archived_log;
SQL> select member from v$logfile;
启用数据字典保护,只有sysdba用户才能访问数据字典基础表。
sys@ORCL>show
parameter O7
NAME TYPE VALUE
------------------------------------
----------- ------------------------------
O7_DICTIONARY_ACCESSIBILITY boolean FALSE
现在默认参数为FALSE,已经设置保护咯。此时以普通用户登录数据库不能查看X$开头的表,比如:
select * from
sys.x$ksppi;
及时更新数据库的安全补丁,减少数据库系统可能受到的攻击。查看MOS https://support.oracle.com/ 下载并安装相关的安全补丁。参考Oracle官方建议,仅对已发现的特定漏洞或缺陷安装相应补丁。这个需要oracle相关支持帐号才能获得支持。
在运行oracle数据库的主机上安装操作系统防病毒软件,实时关注并更新安全补丁。
因为linux属于开源系统,随着很多企业的业务发展及linux自身娱乐的完善,越来越多的企业或个人选择linux系统平台,linux系统也五花八门,常见的系统有redhat、centOS、debian、freeBSD、ubuntu等等。因此linux的安全也面临重大的威胁,现在也陆续出现linux平台上杀毒防病毒软件,但是也不能完全依赖防病毒软件,也应该从linux系统本身下手,加固linux系统。
目前密码破解程序大多采用字典攻击以及暴力攻击手段,如果用户密码设定不当,则极易受到字典攻击的威胁。很多用户喜欢用自己的英文名、生日或者账户等信息来设定密码,这样,黑客可能通过字典攻击或者是社会工程的手段来破解密码。所以在用户设定密码应遵循:
a> 尽量使用非字典中出现的组合字符。
b> 采用数字与字符相结合、大小写相结合的密码设置方式。
c> 口令长度不要过短,并且应包括特殊字符,减少被暴力破解的成功几率。
d> 使用定期修改密码、使密码定期作废的方式,来保护自己的登录密码。
除密码之外,用户账号也有安全等级,这是因为在Linux上每个账号可以被赋予不同的权限,因此在建立一个新用户ID时,系统管理员应该根据需要赋予该账号不同的权限,并且归并到不同的用户组中。
在Linux系统中的部分文件中,可以设定允许上机和不允许上机人员的名单。其中,允许上机人员名单在/etc/hosts.allow中设置,不允许上机人员名单在/etc/hosts.deny中设置。此外,Linux将自动把允许进入或不允许进入的结果记录到/var/log/secure文件中,因此可以定时检查该文件,据此查出可疑的进入记录。
另外,在Linux系统中,/etc/securetty文件包含了一组能够以root账号登录的终端机名称。文件中列出的是允许tty设备,将不允许的tty设备进行注释。如果用户需要从远程登录为root权限,最好是先以普通账号登录,然后利用su命令升级为超级用户。
在进入Linux系统之前,所有用户都需要登录,也就是说,用户需要输入用户账号和密码,只有它们通过系统验证之后,用户才能进入系统。
linux中/etc/passwd文件中存储有本地所有用户的信息,用户密码备加密保存在/etc/shadow文件中,因此应该对该文件设置特殊权限,只允许有特殊权限的用户阅读该文件。除了对该文件设定权限进行保护,我们也应该时时刻刻检查/etc/passwd中的UID和GID,避免普通用户升级为超级用户
网络服务中例如http、smtp、telnet和ftp等等,诸如简单文件传输协议tftp、网络邮件存储及接收所用的imap/ipop传输协议、寻找和搜索资料用的gopher以及用于时间同步的daytime和time等,如果不需要都不要安装或启动这些服务。
利用/etc/services文件查找各项服务所使用的端口,必须仔细检查该文件中各端口的设定,以免有安全上的漏洞。
当然,具体取消哪些服务不能一概而论,需要根据实际的应用情况来定,但是需要做到心中有数,因为一旦系统出现安全问题,才能做到有步骤、有条不紊地进行查漏和补救工作,这点比较重要。
在Linux系统中,例如nfs、samba、ftp、http等服务,都可以允许采用本地身份验证的方式去登录,采用本地身份认证方式登录,可能带来的一个危险就是登录后可以访问根目录下其他的目录,因此应该在相应的配置文件(*.conf)中限制登录用户访问目录,或者不允许登录用户访问自己的HOME目录,这样可以防止登录用户窥探到系统中的其他文件信息。
默认服务端口,参考/etc/services,FTP的端口是20、21,SSH的服务端口是22,NELNET的端口是23,DNS端口号53,HTTP端口好80,mysql端口3306,oracle监听端口1521等等。这些端口都是公认的端口,虽然方便统一管理及理解,但是增加了被黑客入侵的风险。如果修改默认端口号,入侵者就无法判断该端口是什么服务,给攻击增加了难度。
频繁地使用Ping命令会导致网络堵塞、降低传输效率,甚至可能会被黑客检测端口然后进行DDOS攻击。因此可以关闭ping,为实现这一目的,可以在防火墙中进行设置,也可以在路由器上进行设置,并且还可以利用系统自身的功能实现。无论采用哪种方式,都是通过禁止使用ICMP协议来实现拒绝Ping动作。
如果采用linux自身关闭ping,如下:
[root@dg2 ~]#
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
可以将这一行加到/etc/rc.d/rc.local文件中去,这样系统重启动后会自动执行。
恢复系统的Ping响应:
[root@dg2 ~]#
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
允许IP源路径路由(IP
source routing)会使得黑客能够欺骗你的计算机,截取信息包。因此建议使用下面命令禁止:
for i in
/proc/sys/net/ipv4/conf/*/accept_source_route; do echo 0 > $i done
将accept_source_route设置为0,并将上述命令加到/etc/rc.d/rc.local中去,每次重启动将自动执行。现在linux版本几乎都已经默认禁止了IP源路径路由。
对TCP SYN Cookie的保护:(防止SYN
Flood攻击)
SYN
Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的方式之一,它是利用TCP(三次握手)协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式,最终导致系统或服务器宕机
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
对脚本文件的权限进行修正,脚本文件用以决定启动时需要运行的所有正常过程的开启和停止。设置如下权限:
chmod -R 700
/etc/rc.d/init.d/*
设置权限后,系统的所有服务启动和停止只有root用户才能操作,其他用户无权启停。
当用户仔细设定了各种与Linux相关的配置,并且安装了必要的安全防护工具之后,Linux操作系统的安全性的确大为提高,但是却并不能保证防止那些比较熟练的网络黑客的入侵。
在平时,我们要经常提高警惕,随时注意各种可疑状况,并且按时检查各种系统日志文件,包括一般信息日志、网络连接日志、文件传输日志以及用户登录日志等。在检查这些日志时,要注意是否有不合常理的时间记载。例如:
1> 正常用户在半夜三更登录;
2> 不正常的日志记录,比如日志只记录了一半就切断了,或者整个日志文件被删除了;
3> 用户从陌生的网址进入系统;
4> 因密码错误或用户账号错误被摈弃在外的日志记录,尤其是那些一再连续尝试进入失败,但却有一定模式的试错法;
5> 非法使用或不正当使用超级用户权限su的指令;
6> 重新开机或重新启动各项服务的记录。
这些日志文件主要存放在/var/log目录下,比如:/var/log/messages、/var/log/maillog、/var/log/secure、/var/mail/root等等
防火墙、IDS(入侵检测系统)等防护技术已经成功地应用到网络安全的各个领域,而且都有非常成熟的产品。
在Linux系统来说,有一个自带的Netfilter/Iptables防火墙框架,通过合理地配置可以起到主机防火墙的功效。在Linux系统中也有相应的轻量级的网络入侵检测系统Snort以及主机入侵检测系统LIDS(Linux Intrusion Detection System),使用它们可以快速、高效地进行防护。
需要提醒注意的是:在大多数的应用情境下,我们需要综合使用这两项技术,因为防火墙相当于安全防护的第一层,它仅仅通过简单地比较IP地址/端口对来过滤网络流量,而IDS更加具体,它需要通过具体的数据包(部分或者全部)来过滤网络流量,是安全防护的第二层。综合使用它们,能够做到互补,并且发挥各自的优势,最终实现综合防御。
Linux作为一种优秀的开源软件,其自身的发展也日新月异,同时,其存在的问题也会在日后的应用中慢慢暴露出来。黑客对新技术的关注从一定程度上来说要高于我们防护人员,所以要想在网络攻防的战争中处于有利地位,保护Linux系统的安全,就要求我们要保持高度的警惕性和对新技术的高度关注。需要通过Linux的一些权威网站和论坛上尽快地获取有关该系统的一些新技术以及一些新的系统漏洞的信息,进行漏洞扫描、渗透测试等系统化的相关配套工作,做到防范于未然,提早行动,在漏洞出现后甚至是出现前的最短时间内封堵系统的漏洞,并且在实践中不断地提高安全防护的技能,这样才是一个比较的解决办法和出路。
Linux作为一种优秀的开源软件,其稳定性、安全性和可用性有极为可靠的保证,世界上的Linux高手共同维护着个优秀的产品,因而起流通渠道很多,而且经常有更新的程序和系统补丁出现,因此,为了加强系统安全,一定要经常更新系统内核。
Kernel是Linux操作系统的核心,它常驻内存,用于加载操作系统的其他部分,并实现操作系统的基本功能。由于Kernel控制计算机和网络的各种功能,因此,它的安全性对整个系统安全至关重要。早期的Kernel版本存在许多众所周知的安全漏洞,而且也不太稳定,只有2.0.x以上的版本才比较稳定和安全(一般说来,内核版本号为偶数的相对稳定,而为奇数的则一般为测试版本,使用时要多加留意),新版本的运行效率也有很大改观。在设定Kernel的功能时,只选择必要的功能,不要启用所有功能,否则会使Kernel变得很大,既占用系统资源,也给黑客留下可乘之机。
硬件防火墙是网络的第一道防线,使用硬件防火墙可以很好的保护企业内部网络受外部攻击的成功几率。现在的硬件防火墙功能越来越完善,不仅仅是防火墙自身功能不断完善,并且新增很多例如上网行为管理的功能。功能的多样化,使得管理配置起来增加了一点的难度,但是所能做的工作更多也更有效率。
防火墙的设计策略遵循的安全防范基本原则是"除非明确允许,否则都禁止",因此运用防火墙之前还更应该先熟悉公司内部局域网络及业务的整个系统,确定哪些程序、端口可以允许对外,哪些程序、端口可以对内,只开放有必要的程序、端口。如有必要,必须对内网访问做NAT转换,对外转发端口尽量避免使用默认端口。
关于数据库系统安全防护,以上从数据库自身及数据库所使用的操作系统及硬件防火墙方面做了一系列的安全的措施。随着数据库业务系统的发展,需要实现的功能越多、开放的端口越多,数据库业务系统所面临的安全问题就越复杂、安全度越低。除了这些方面的安全隐患,还有开发方面也存在着重大的安全隐患。一个好的开发除了要求在开发上的严谨还应该要求理解并掌握业务的体系结构。
如果开发上的不严谨,很容易带来安全上的隐患。比如sql注入攻击,开发的程序可能是为了实现某些功能,比如查询某些表的数据,黑客可以利用这样的查询去查询其他表的数据,甚至去更改表,更有甚者,可能会利用这样的查询去寻找你存放用户及密码的表,然后进行密码解密及一系列的手段获得admin用户密码,这样你的整个业务系统对于黑客而言就没有什么安全了。
如果开发不理解业务的体系结构,随意的按照自己的想法去实现某一些功能,也许这样的想法是对的,也能够达到预定的要求,但是可能对于数据库系统来说是一种特别大的负担。任何的数据创建或着说开发,都是为了更好的更方便的用来查询。如果开发前期的设计不合理,会导致后期的业务系统臃肿,对于系统性能会有特别大的影响。有时候不仅仅是需要考虑数据的安全,还应该更关注数据系统的性能,数据系统安全再好,性能特别差也不会有人愿意去使用。
最后,随着信息网络的发展,公司网络的安全面临着越来越大的挑战,以前黑客要入侵业务系统,可能只能通过业务系统去下手,现在黑客要入侵,不仅可以利用公司的内部员工电脑作为跳板,还可以利用员工的手机、平板电脑。构建安全的公司局域网不仅仅需要靠系统安全工程师,也需要公司所有员工的共同努力。因此,还想要强调一点的就是除了规章制度去制约公司内部员工,还更应该从思想上去引领,加强员工对公司的依赖和凝聚力,加强员工的自豪感,使其员工自觉的去维护公司的信息安全。
reference http://wenku.baidu.com/view/7f3b297116fc700abb68fc70.html?re=view
1.oracle数据库自身安全
1.1灾备环境加固
1.1.1 DataGuard灾备环境部署
1.1.2 RMAN物理备份
1.1.3 DataPump Impdp/Expdb逻辑备份
1.2帐号权限加固
1.2.1 最小权限使用规则
1.2.2 用户帐号管理
1.2.3 DBSNMP用户的保护
1.2.4 SYS用户
1.2.5 Oracle 数据字典的保护
1.3数据访问控制加固
1.3.1 $ORACLE_HOME/bin目录权限保护
1.3.2 关闭远程操作系统认证
1.3.3 加强服务管理
1.3.4 加强对业务数据管理
1.4 网络访问控制加固
1.4.1 设置TNS登录的ip访问限制
1.4.2 修改默认监听端口
1.4.3 防止远程监听程序的管理
1.4.4 关闭Extproc功能
1.4.5 关闭XDB服务
1.5 口令策略加固
1.5.1 密码文件管理
1.5.2 启用资源限制
1.5.3 密码策略
1.6 审计策略加固
1.6.1 数据库操作审计
1.6.2 日志目录管理
1.6.3 数据字典保护
1.7 漏洞加固
1.7.1 安全补丁更新
1.7.2 安装防病毒软件
2. linux系统安全
2.1 用户帐号安全
2.1.1 口令密码管理
2.1.2 用户账号安全等级管理
2.1.3 系统登录用户管理
2.2网络服务安全
2.2.1 关闭不必要的服务
2.2.2 谨慎其他服务中允许本地用户登录
2.2.3 更改默认服务端口
2.3 系统安全设置
2.3.1 系统关闭PING
2.3.2 禁止IP源路径路由
2.3.3 修正脚本文件在“/etc/rc.d/init.d”目录下的权限
2.3.4 日志安全管理
2.4综合防御管理
2.4.1 启用自身防火墙iptables
2.4.2 漏洞追踪及管理
2.4.3 保持更新,补丁管理
3. 硬件防火墙
4. 总结