zabbix忘记密码

娱乐 2026-10-17 04:03:38 17

登录页面上那个密码框,忘记我盯着看了五分钟,密码脑子里把能想到的忘记组合全过了一遍——admin/admin、root/root、密码甚至试了试公司门禁密码。忘记全都提示错误。密码

Zabbix的忘记默认管理员账号是Admin,密码是密码zabbix,这谁都知道。忘记问题在于,密码这套系统是忘记半年前部署的,当时接手的密码人早离职了,交接文档里只写了IP地址和数据库账号,忘记密码那栏是密码空的。我翻聊天记录,忘记翻邮件,翻服务器上的部署脚本,一无所获。

最后只能走暴力路线:直接改数据库里的密码哈希。Zabbix 5.0之后用的是BCrypt加密,不是MD5那种随手能拼出来的玩意儿。但好在官方文档留了后门——你可以用PHP的password_hash函数生成一个新哈希,然后UPDATE进数据库。

操作步骤其实不复杂。先登录Zabbix服务器所在的MySQL或PostgreSQL,找到users表。表结构很简单,关键字段就两个:username和passwd。执行一条UPDATE语句,把Admin用户的passwd替换成新生成的哈希就行。

但生成哈希这事儿有个坑。你直接在命令行跑php -r "echo password_hash('你的新密码', PASSWORD_BCRYPT);",出来的字符串是带引号的,直接复制进SQL语句里容易出问题。我建议先输出到文件,再读出来用。另一个坑是PHP版本——Zabbix前端用的PHP版本如果和命令行版本不一致,生成的哈希可能不兼容。稳妥起见,用Zabbix前端同目录下的php二进制来执行。

我当时用的命令是这样的:

php -r "echo password_hash('NewPass@2024', PASSWORD_BCRYPT);" > /tmp/hash.txt

然后登录数据库:

mysql -u zabbix -p zabbix UPDATE users SET passwd='$2y$10$...从文件里读到的内容...' WHERE username='Admin'; FLUSH PRIVILEGES;

注意那个哈希值里的美元符号,在SQL里直接粘贴没问题,但如果用shell变量传递就得转义。我那次就是没注意,把哈希存进变量后再拼接SQL,结果$2y被shell当成了变量引用,直接替换成空字符串。折腾了二十分钟才反应过来。

更新完数据库,刷新登录页,用新密码登进去,一切正常。但这事儿没完——你得想清楚密码为什么会丢。Zabbix默认密码策略其实挺宽松,很多人部署完就扔在那儿不管,等真正需要登录配置告警时才发现密码早忘了。

我的建议是,部署当天就把密码写进公司的密码管理工具,别图省事记在本地txt里。另外,Zabbix 6.0之后支持了SAML和LDAP集成,如果公司有统一认证系统,直接对接上,省得以后还得改数据库。毕竟改数据库这事儿,操作不当可能把其他用户的权限也搞乱——我见过有人误更新了users表里所有用户的passwd字段,结果全员登录失败,只能从备份恢复。

最后提一句,改完密码后记得清一下浏览器缓存和session。Zabbix的session存在数据库里,旧session不会因为你改了密码就失效,万一之前有人登录着没退出,他那边还能继续操作。稳妥做法是执行DELETE FROM sessions;,强制所有人重新登录。别问我怎么知道的——那次我改完密码,发现监控大屏上还挂着前同事的登录状态,他人都离职三个月了。

本文地址:http://www.79wt.cn/news/530c1299457.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

友情链接