env - centos/rhel
我有两个系统。堡垒和DEV。
堡垒 -
- Bastion 有许多个人用户。 (
apple
,orange
... ETC) - 用户可以直接 ssh 到 Bastion。
开发-
- DEV 只有一个用户。 (
fruit
) - 只有 Bastion 用户可以从 Bastion ssh 到 DEV。
最终,我想追踪“谁在何时做了什么”
在 DEV 方面,我可以看到有人在 /var/etc/secure 和 /var/etc/audit/audit.log 中登录fruit
,但看不到“由谁”登录。
apple
我的问题:我如何收集连接到 DEV 的时间fruit
以及他做了什么?
答案1
一个非常简单的方法是禁用密码登录并仅使用基于密钥的登录。
这样,您就有了命名的密钥auth.log
,并且可以简单地将其与用户匹配(例如,在文件的“注释”字段中添加用户名authorized_keys
)。登录后,您将获得一个进程 ID,该 ID 也会在注销事件中显示。
$cat /var/log/auth.log
Jun 21 14:42:11 DEV sshd[26510]: Accepted publickey for apple from 1234:5678:90ab:cdef:1234:5678:90ab:cdef port 58888 ssh2: RSA SHA256:abcdefghIJKLMNOPQ/1234567890
Jun 21 14:47:57 DEV sshd[26510]: pam_unix(sshd:session): session closed for user apple
$cat /home/fruit/.ssh/authorized_keys
ssh-rsa abcdefghIJKLMNOPQ/1234567890 apple@bastion
剩下的监控就是设置的问题了audit
。
答案2
这是一个糟糕的答案(因为identd
不可靠且容易伪造,并且当用户连接到其他系统时可能会暴露有关用户的信息),但在过去,人们使用identd
这样的东西。
你可以跑identd
在“堡垒”上(使用配置和防火墙规则来防止从“DEV”或内部网络之外的任何地方访问端口 113)。
sshd
通常用libwrap
, 和编译/etc/hosts.allow
在开发上可以配置为记录堡垒的 identd 报告的用户名,规则如下:
sshd : ALL : spawn = /usr/bin/logger -i --tag "sshd+identd" -p auth.notice "attempted login by %u@%h" &
这将导致记录如下行:
Jun 21 14:13:33 DEV sshd+identd[2128678]: attempted login by apple@bastion
紧接着是通常的 sshd 日志。
请注意,这可能会导致identd
用户从未运行的其他主机identd
(例如 LAN 上的客户端计算机)直接登录到 DEV 时出现延迟(在进行查询时和超时)。
另请注意,在记录远程用户名时,它仍然只是一个尝试登录因为在建立连接后,在 sshd 使用密码或公钥对登录进行身份验证之前,就会发生这种情况。
我不确定identd
Centos 上仍在维护哪些版本,但 AFAIK Debian 上仍然可用的唯一版本是奥伊登德。这是一种几乎被遗忘、过时的技术,几乎没有人再使用它(一些 IRC 网络仍在使用它,一些 IRC 客户端可以选择侦听端口 113 并响应identd
请求)。