游客发表
凌晨两点,控制测试环境要重启一个被锁死的台密WebLogic节点,我翻遍Confluence和本地txt,码忘密码记录全是控制“weblogic/Oracle@123”这种试了八百遍都不对的。控制台登录页面弹出来的台密时候,心里就一个念头:这玩意儿到底能不能绕过去。码忘
能。控制而且方法不止一种,台密关键看你手头有什么权限,码忘以及这个域是控制不是还在跑。
WebLogic的域配置目录里藏着一个叫boot.properties的文件,路径大概长这样:domains/你的码忘域名称/servers/AdminServer/security/boot.properties。如果当初启动脚本里配了自动登录,控制这个文件里会明文存着username=weblogic和password=xxxxx。台密直接cat一下,码忘密码就出来了。
但现实往往没那么美好。很多生产环境为了安全,早就把这个文件删了,或者改成了加密存储。我遇到过最绝的情况是运维把整个security目录权限设成700,连ls都看不到里面有什么。
另一个地方是config.xml。某些老版本WebLogic在创建域的时候,如果选了“开发模式”,可能会把管理密码以某种可逆的形式写进去。不过从10.3.6之后基本就别指望了,Oracle把这条路堵得挺死。
这是最暴力也最有效的方法,前提是你能停掉AdminServer。步骤不复杂,但每一步都得小心,改错一个字符整个域可能就起不来了。
先停服务。kill -9也行,反正都要重启。然后找到domains/你的域名称/security/DefaultAuthenticatorInit.ldift这个文件。这玩意儿是WebLogic内置的认证提供者数据库,所有控制台用户的密码哈希都存在里面。
把它备份一下,然后直接删掉。对,就是删掉。AdminServer下次启动的时候发现这个文件不存在,会自动重新生成一个默认的,默认用户名weblogic,密码weblogic。
但别急着重启。还得去servers/AdminServer/security/目录下把boot.properties也删了,不然它会拿着旧密码去连新生成的认证库,照样起不来。同时servers/AdminServer/data/ldap/目录下的内容也清空,那是嵌入式LDAP的缓存。
做完这些,启动AdminServer。用weblogic/weblogic登录,进去第一件事就是改密码。别偷懒,这组默认密码在扫描器眼里跟没设一样。
有个更取巧的办法:用WLST(WebLogic Scripting Tool)连上AdminServer,直接改用户密码。前提是你知道AdminServer的IIOP或者T3协议端口,而且没有防火墙拦着。
命令大概长这样:
connect('weblogic','旧密码','t3://localhost:7001') cd('SecurityConfiguration/你的域名称/Realms/myrealm/AuthenticationProviders/DefaultAuthenticator') cmo.resetUserPassword('weblogic','新密码') 问题来了——你得知道旧密码才能连上。死循环。所以这条路只适用于“我记得旧密码但就是想换一个”的场景,真忘了密码根本走不通。
除非……你手里有weblogic系统用户的私钥文件,或者能通过nmConnect连上NodeManager。NodeManager的密码如果没改过,默认是weblogic,但这也得看当初怎么配的。
删DefaultAuthenticatorInit.ldift这招,在WebLogic 12c上依然有效,但有个细节:如果域配置了多个认证提供者,比如还挂了LDAP或者AD,删掉默认的之后启动会报错。得先把其他提供者禁用掉,或者直接在config.xml里把DefaultAuthenticator的ControlFlag改成OPTIONAL。
还有一次,删完文件重启,控制台确实能进,但所有已部署的应用全挂了,因为应用连接数据库用的凭据也存在那个LDAP库里。当时没备份,只能从其他节点同步了一份ldap目录过来。所以动手之前,tar一下整个security目录,花不了几秒钟。
最后说个冷门的:如果域是受管服务器模式,AdminServer挂了但受管服务器还在跑,可以试试直接连受管服务器的控制台端口。有些配置下受管服务器也开放了控制台,虽然功能不全,但至少能进去看看JMS队列或者数据源状态。密码?还是得走上面那些路子。
密码这东西,忘了就是忘了,没什么捷径。与其每次靠重置,不如找个靠谱的密码管理器,把域名称、AdminServer端口、控制台账号密码存进去,再加个标签注明“WebLogic-生产-别乱动”。我现在的习惯是每建一个域,就在boot.properties旁边放一个README.txt,里面写清楚密码提示——不是明文,但足够让我想起来当初设的是什么。
友情链接