公司使用的齐治堡垒机设备授权数量有限,眼看就要达到上限。于是想到可以把长时间无人使用的闲置设备禁用,以此来节省授权。为此,需要了解各个设备的最后访问时间。询问了售后工程师,得知齐治官方并没有提供此类功能。但是猜想后台肯定有相关信息;即使没有直接记录,也可以根据最后登陆日志查询出来。
自己动手丰衣足食,最后果然在后台数据库的server表中直接查到了最后访问时间信息。
简明教程
1.登陆堡垒机ssh后台,导出数据库备份文件,命令如下:
sudo -u postgres pg_dump shterm > dump.sql
2.在自己的服务器上安装PostgreSQL服务端
我用的kali自带了PostgreSQL,其他发行版直接apt-get或者yum即可安装
3.启动PostgreSQL服务,建立shterm数据库和qizhi角色。(我其实是用pgAdmin这个图形化工具来建库和建角色的,以下命令仅供参考)
service postgresql start #启动PostgreSQL服务
sudo -i -u postgres #切换到postgres用户
psql #打开psql客户端程序
CREATE DATABASE shterm; #建立shterm数据库
CREATE ROLE qizhi; #建立qizhi角色
\q #退出客户端
4.导入之前备份的文件
psql -d shterm -U postgres -f ./dump.sql
5.查询所有服务器设备的最后访问时间
sudo -i -u postgres #切换到postgres用户
psql #打开psql客户端程序
SELECT ipaddr,brief,attrs FROM public.server ORDER BY attrs ASC; #查询server表
\q #退出客户端
select s.ipaddr,s.brief,s.status,
CASE WHEN s.attrs='null' THEN '{"last_access": "0000-00-00 00:00:00"}'
WHEN s.attrs isnull THEN '{"last_access": "0000-00-00 00:00:00"}'
ELSE s.attrs
END,sz.name
from public.server_zone_member as szm
left join public.server as s on s.id = szm.server
left join public.server_zone as sz on sz.id = szm.server_zone
ORDER BY status asc,attrs asc
如上图所示,server表的attrs字段就包含了最后访问信息。
如果要远程访问的话,需要改一下配置:
cd /etc/postgresql/(版本号)/main/
修改postgresql.conf中listen_addresses='*'
修改pg_hba.conf中host all all 0.0.0.0/0 md5
另外也可以修改一下postgres用户的密码:
alter user postgres with password 'postgres';
进一步思考
细心的朋友可能已经发现,上述做法是先导出了数据库备份文件,再导入至自建的数据库中进行查询的。更简便的做法应当是直接在齐治的服务器上进行查询,但是Cocoa并未在服务器上找到开放的5432端口。
猜想齐治为了隐藏具体实现,应当是做了某些屏蔽工作。此处抛砖引玉,希望大家日后有时间可以慢慢发掘。