2.编辑/etc/security ,设置 SU_ROOT_GROUP,这样只有某个组的用户可以su到root,如果不希望任何用户su到root,可以不在该组里添加用户
3.禁止sendmail:/sbin/init.d/sedmail stop
然后编辑/etc/rc.config.d/mailservs 令export SENDMAIL_SERVER=0
禁止telnet:编辑/etc/inetd.conf,找到telnet那一行(telnet stream tcp6 nowait root /usr/lbin/telnetd telnetd -n15)然后再最前面加#
然后重启inetd /sbin/init.d/inetd stop
/sbin/init.d/inetd start
4./etc/hosts.allow控制可以访问本机的IP地址,/etc/hosts.deny控制禁止访问本机的IP。如果两个文件的配置有冲突,以/etc/hosts.deny为准
例如ALL:127.0.0.1 #允许本机访问本机所有服务进程
smbd:192.168.0.0/255.255.255.0 #允许192.168.0.网段的IP访问smbd服务
5.编辑/opt/ssh/etc/sshd_config 找如下的一句
#PermitRootLogin yes
改为如下的;
PermitRootLogin no
注意,要把前面的#号去掉。
/sbin/init.d/secsh start
7.编辑/etc/security,比如
MIN_PASSWORD_LENGTH
PASSWORD_MIN_UPPER_CASE_CHARS=0
PASSWORD_MIN_LOWER_CASE_CHARS=0
PASSWORD_MIN_DIGIT_CHARS=1
PASSWORD_MIN_SPECIAL_CHARS=2
这些参数可以限制密码复杂度
在 $ORACLE_HOME/network/admin 目录下修改 SQLNET.ORA 文件, |
增加如下内容: |
tcp.validnode_checking = YES |
tcp.excluded_nodes = {IP 地址列表 } |
tcp.invited_nodes = { IP 地址列表 } |
sysdba(sysoper和normal)是登录数据库的身份,与角色(dba、resource)、对象权限及系统权限有所区别,登录身份表明了可对数据库的整体进行哪些操作,sysdba有些类似unix下的root帐户。
sysdba的权限或可对数据库进行的操作:
startup,shutdown
alter database open|mount
alter database backup controlfile
alter tablespace begin/end backup
recover database
alter database archivelog,restricted session
create database
recover database until
二、os认证和口令文件认证
1、os认证和口令文件认证其实质是对oracle数据库采取何种管理方式,是本地管理还是通过一台管理服务器统一管理。
本地管理采用的就是os认证方式,统一管理采用的就是口令文件认证方式
2、两种认证的实现
oracle 数据库通过sqlnet.ora文件中的参数SQLNET.AUTHENTICATION_SERVICES,PFILE(或SPFILE)文件中的参数 REMOTE_LOGIN_PASSWORDFILE和口令文件PWDsid.ora三者协同作用实现身份认证。
SQLNET.AUTHENTICATION_SERVICES=(NTS)|(NONE)
SQLNET.AUTHENTICATION_SERVICES=(NTS): 操作系统认证方式,不使用口令文件
SQLNET.AUTHENTICATION_SERVICES=(NONE):口令文件认证方式
REMOTE_LOGIN_PASSWORDFILE=(NONE)|(EXCLUSIVE)|(SHARED)
REMOTE_LOGIN_PASSWORDFILE=(NONE):不使用口令文件,操作系统认证
REMOTE_LOGIN_PASSWORDFILE=(EXCLUSIVE):口令文件认证方式,但只有一个数据库实例可以使用此文件,
系统允许将SYSOPER/SYSDBA授予除INTERNAL/SYS以外的其他用户,且以具有这类身份的其他用户登录是有效的
REMOTE_LOGIN_PASSWORDFILE=(SHARED):口令文件认证方式,可有多个数据库实例使用此文件,但是此设置下
只有INTERNAL/SYS帐号能被识别,即使文件中存有其他用户的信息,也不允许他们以SYSOPER/SYSDBA登录
1)SQLNET.AUTHENTICATION_SERVICES=(NTS)同时REMOTE_LOGIN_PASSWORDFILE=(NONE),此时为操作系统认证方式。
当以oracle_dba组下的用户登录进入本地windows2000后进行下边的操作:
sqlplus /nolog
sql>conn /as sysdba
或
sqlplus /nolog
sql>conn 任意用户名/密码 as sysdba
均可以sysdba身份登录成功,进行数据库方面的操作
当以远程进行登录时,执行
sqlplus /nolog
sql>conn /as sysdba
或
sqlplus /nolog
sql>conn sys/密码 as sysdba
均显示
“ERROR:
ORA-01031: insufficient privileges
”
也就是不允许以sysdba身份远程登录系统,这也是os认证之所以也称为本地认证方式的原因
2)SQLNET.AUTHENTICATION_SERVICES=(NONE)同时REMOTE_LOGIN_PASSWORDFILE=(EXCLUSIVE)或(SHARED),配合口令文件
PWDsid.ora,此时为口令文件认证方式
当在本地以oracle_dba组下的用户登录进入windows2000后进行下边的操作:
sqlplus /nolog
sql>conn /as sysdba
显示
“ERROR:
ORA-01031: insufficient privileges
”
实质上是要求提供拥有sysdba身份的用户名和密码
在本地或远程进行下边的操作
sqlplus "sys/密码@服务名 as sysdba"
可进入系统
也就是说口令文件认证方式允许用户从本地或远程以sysdba身份登录,但必须提供口令字
3)SQLNET.AUTHENTICATION_SERVICES=(NTS)同时REMOTE_LOGIN_PASSWORDFILE=(EXCLUSIVE)或(SHARED),配合口令文件PWDsid.ora,此时操作系统认证和口令文件认证同时起作用
当在本地以oracle_dba组下的用户登录进入windows2000后进行下边的操作:
sqlplus /nolog
sql>conn /as sysdba
可进入系统
当在远程执行
sqlplus "sys/密码@服务名 as sysdba"
同样可正常登录到数据库系统上
上边的参数配置容易令人迷惑、混淆,造成假象。我推测网上有些朋友所以对身份认证产生费解可能就是因为这么
配置参数的!
三、其他
从前边的讨论可以知道,我们能够对sys以外的用户赋予sysdba身份,具体方法就是
SQLNET.AUTHENTICATION_SERVICES=(NONE)
REMOTE_LOGIN_PASSWORDFILE=(EXCLUSIVE)
口令文件PWDsid.ora
SQL>grant sysdba to 用户名
这样,其他具有sysdba身份的用户就加入到PWDsid.ora中,并可以被PWDsid.ora识别,我们可以用这个被赋予sysdba身份的用户登录并进行类似sys用户下所能执行的操作。
多数 Oracle 数据库用户都使用默认设置文件创建用户帐户。自从 Oracle 8 开始,就能通过创建一个设置文件,然后使用以下两个语句之一分配给他一个用户来锁定一个帐户。
CREATE USER myuser . . . PROFILE myprofile; ALTER USER myuser [被屏蔽广告]PROFILE myprofile; |
入侵数据库帐户的一个典型尝试是试用几个常用的口令,比如“welcome”或用户名之类的。能使用设置文件标记FAILED_LOGIN_ATTEMPTS 阻止多次失败的登录尝试。
CREATE PROFILE myprofile LIMIT FAILED_LOGIN_ATTEMPTS 5 PASSWORD_LOCK_TIME 1; |
分配给这个设置文件的用户将会在五次以不正确的口令尝试登录之后被拒之于门外。帐户将会在一天之内不可访问,直至 DBA 发出了一个ALTER USER ACCOUNT UNLOCK 命令。
即使在几年之后,我还发目前以前的项目中我的老口令依然能够使用。这是个非常好的反面例子,说明我们要对口令的生存时间设置一个期限,使其在特定的一段时间(也就是合同的结束之日)之后过期。另外更有一种选择,即允许一个特定的宽限期,这对不经常使用的项目非常有用。如果用户在口令过期之前不登录,用户依然能连接,不过会显示一个警告,直到宽限期过期。在设置文件中使用PASSWORD_LIFE_TIME 和PASSWORD_GRACE_TIME 标记能够启用这些特性。
ALTER PROFILE myprofile LIMIT PASSWORD_LIFE_TIME 30 PASSWORD_GRACE_TIME 3; |
分配给那个设置文件的用户将会在口令修改的30之后不能使用他们的帐户。30天之后,尝试登录将会出现一个警告消息,提示更有三天帐户就会被锁。
非常多用户会看到这些限制并且简单地尝试将他们的口令重设为他们以前使用的口令,而不是每次都使用一个新口令。能使用PASSWORD_REUSE_TIME 和PASSWORD_REUSE_MAX 标记阻止用户重用一个口令。
ALTER PROFILE myprofile LIMIT PASSWORD_REUSE_TIME 30 PASSWORD_REUSE_MAX 100; |
这个设置文件的用户将不能重用一个口令超过30天,或使用同一口令不能超过100次。
最后,一些用户使用容易猜出的口令。通过创建一个 PL/SQL 过程来检验口令就能限制一个口令的格式(比如检查最小长度、字母、数字或大小写混合,或确认口令不是用户名的变种)。必须以如下格式创建存储过程:
CREATE OR REPLACE FUNCTION verify_password ( userid varchar(30), password varchar(30), old_password varchar(30) ) RETURN BOOLEAN . . . |
能以如下方式分配这个函数(能是所有名称,不过必须属于 SYS 帐户):
ALTER PROFILE myprofile LIMIT PASSWORD_VERIFY_FUNCTION verify_password; |
- 透明数据加密
- 网络加密和数据完整性
- 强身份验证
查看是否审计功能是否启动 |
SQL> show parameter audit |
开启审计 |
SQL> alter system set audit_sys_operations=TRUE scope=spfile; |
开启审计 |
SQL> alter system set audit_sys_operations=TRUE scope=spfile; |
-- 审计管理用户 ( 以 sysdba/sysoper 角色登陆 ) |
SQL> alter system set audit_trail =DB scope=spfile; |
|