齐治堡垒机shterm后台数据库查询服务器设备最后访问时间

公司使用的齐治堡垒机设备授权数量有限,眼看就要达到上限。于是想到可以把长时间无人使用的闲置设备禁用,以此来节省授权。为此,需要了解各个设备的最后访问时间。询问了售后工程师,得知齐治官方并没有提供此类功能。但是猜想后台肯定有相关信息;即使没有直接记录,也可以根据最后登陆日志查询出来。

自己动手丰衣足食,最后果然在后台数据库的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端口。

猜想齐治为了隐藏具体实现,应当是做了某些屏蔽工作。此处抛砖引玉,希望大家日后有时间可以慢慢发掘。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注