oracle listener监听设密码作用
oracle 的监听机制是外部应用程序连接oracle的入口。用oracle提供的lsnrctl 程序进行管理。一般很多人在管理oracle的时候,往往忽略对listener 的安全管理:监听在端口1521(默认端口)上的oracle tnslsnr未设置口令保护!
这会存在这个安全隐患:远程的Oracle tnslsnr服务器没有被设置密码,一个攻击者可以利用这个问题随意关闭oracle tnslsnr服务器或者设置新的口令,这将影响合法用户的正常使用。攻击者也可以获取数据库的一些细节信息以发动进一步攻击。结合其他漏洞,攻击者甚至可以在目标系统上创建或者修改文件,进而入侵系统。
这里对关于oracle监听模块密码安全设置的几个方法进行说明:
1. 如何进行远程操作:
在远程机器上修改listerner.ora 文件,增加对异地oracle服务器的配置,例如:
ls_oratest =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))
)
)
这里的HOST = 192.168.1.10 即是指明远程的oracle服务器。如果默认的,oracle服务器上没有设置
listener 的管理密码,则在远程机器上只要执行:
lsnrctl stop ls_oratest
即可停止192.168.1.10 服务器上的监听服务。
2.如何修改密码:
listener的密码策略对start无效,目的是防止恶意stop(start ,如果有在运行,则不成功,所以也就不需要保护了)
lsnrctl >
set current_listener listener_oratest <-- 设置当前监听器的配置名称
Old password: <原来的口令> <-- 如果原来没有设置口令就直接回车,否则输入原来的口令
New password: <新口令>
Reenter new password: <新口令>
Connecting to (ADDRESS=(PROTOCOL=ipc)(KEY=**))
Password changed for listener_oratest
The command completed successfully
<--这里设置或者修改了当前运行监听进程的密码,如果监听程序重启,则密码仍然为原来的密码。
<--所以需要执行保存密码的过程
set password
Password: <输入新口令>
save_config (此步重要,保存当前设置)
exit
说明:
a.执行save_config 需要再执行一次 set password 提供新密码,是因为在lsnrctl 管理工具中,是通过 set password 命令来设置当前环境的密码。设置了正确的密码后,就可以执行一些重要的操作,如save_config, stop 等。
b 设置密码后,密码记录在listerner.ora 文件 中,
比如:PASSWORDS_listener_oratest = AF15F0B512F2229A
形式为:PASSWORDS_监听名称 = 密码密文。如果忘记密码,可以去掉该行,则密码为空。
c.设置了密码后,远程机器如果需要stop监听的时候,则需要提供密码,否则操作失败。
3.如何管理设置密码后的监听进程:
a.如果是人工交互的操作,则只需在执行操作前面键入两个命令:
lsnrct<
set current_listener listener_oratest <-- 设置当前监听器的配置名称
set password
Password: <输入口令>
stop
b.如果是脚本自动执行,则需要提供密码的密文(由isterner.ora 文件获得)
#!/bin/sh
lsnrctl << eof
set current_listener listener_oratest
set password AF15F0B512F2229A
stop
eof
补充一下:以后如果进入的lsnrctl进行操作时,需要先set password 密码,以便连接到监听。
PS:各个参数的作用作个描述:
LISTENER 指出一个监听器定义的起始点。它实际上是正被定义的当前监听器的名称。默认的名称是LISTENER。
DESCRIPTION 描述每个监听位置
ADDRESS_LIST 含有与监听器正在监听的那些位置有关的地址信息
PROTOCOL 指定用于本监听位置的协议
HOST 保存监听器所驻留在的那台计算机的名称
PORT 含有监听器正在上面监听的地址
SID_LIST_LISTENER 定义配置监听器所针对的ORACLE服务的列表
SID_DESC 描述每个Oracel SID
GLOBAL_DBNAME 标识全局数据库名称。本项应该与当前Oracle服务的init.ora文件中的SERVICE_NAMES项一致
ORACLE_HOME 给出服务器上Oracle可执行程序的位置
SID_NAME 含有用于本Oracle实例的Oracle SID的名称
Lsnrctl命令综述
Lsnrctl命令用来管理Oracle监听器,是一个命令行界面。想调用这个命令行工具,在命令行键入lsnrctl即可。可以在LSNRCTL>提示符下键入help来显示这些命令的一份清单。
Services 列举出服务的一个汇总表及为每个协议服务处理程序所建立和拒绝的连接信息个数
Start listener 启动指定的监听器
Status listener 显示指定监听器的状态
Stop listener 关闭指定的监听器
Trace 打开监听器的跟踪特性
Version 显示Oracle Net软件与协议适配器的版本
Change_password 允许用户修改关闭监听器所需要的密码
Reload 重新读取listener.ora文件,但不关闭监听器。如果该文件发生了变化,重新刷新监听器。
Save_config 当从lsnrctl工具中对listener.ora文件进行了修改时,复制一个叫做listener.bak的listener.ora文件
Exit 退出lsnrctl实用工具
Quit 执行和exit相同的功能
以上出自http://home.oracle.com.cn/space.php?uid=2859&do=blog&id=1043
上面的操作是在oracle 9i及以前的版本,如果服务器端数据库版本在Oracle9i以后,设置监听密码的情况则有一些变化。
在Metalink Note 260986.1中,可以看到:
In Oracle 10, the TNSListener is secure out of the box and there should not be a need to set a listener password as in older versions of the Oracle listener.
Oracle10g以后,设置Listener密码已经不是安全检查的必要条件了,因为默认在10g里面除了启动监听的用户之外,其它用户都无法停止Listener(还有另外一些lsnrctl的命令也同样被禁止了,比如trace, reload等),即使Listener没有设置密码。
在默认情况下,启动Listener或者使用lsnrctl status命令查看监听状态,可以看到:
Security ON: Password OR Local OS Authentication
这表明Listener的安全机制使用了Password方式或者Local OS Authentication方式,在这种状态下,即使是设置了监听密码,对于启动监听的user来说,也仍然是不需要任何密码就可以停止监听的。
如果我们想去除自Oracle10g之后的这种新安全机制,那么需要在listener.ora文件中添加:
LOCAL_OS_AUTHENTICATION_[listener name]=OFF
重新启动Listener之后,将会只看到:
Security ON: Password
这就又回复到了Oracle9i时的状态,只要有密码存在,无论是谁尝试停止监听都会被要求set password。
如果监听已启动,密码忘记了,你就是修改listener.ora文件也是没用的,因为那个文件在监听启动后甚至可以删除,所以也只能到操作系统kill掉系统进程,注掉设置密码后所加的两行,再启动监听密码恢复为空。
上一篇: 网站空间被墙后,转移成功
下一篇: 又到一年春节时
目前这篇文章有1条评论(Rss)评论关闭。