记录或限制ssh登录的源用户

记录或限制ssh登录的源用户

是否可以记录和/或限制 ssh 登录的源用户?

例如:

user1@server1登录server2user2.

另外,user3@server1登录server2user2.

我所说的“源用户”是指user1user3以上。

我希望能够跟踪哪个会话是由 发起的user1@server1以及哪个会话是由 发起的user3@server1

这样做的目的是多个用户可以使用该user2帐户来管理服务器 2 上的进程等。 (我意识到这存在安全隐患,但这个问题的一部分是评估这些隐患的程度)。

正如 的手册页中提到的sshd_config(5)sshd能够使用AllowUsers中的配置选项限制对特定用户的访问sshd_config

允许用户

该关键字后面可以跟一个用户名模式列表,以空格分隔。如果指定,则仅允许与其中一种模式匹配的用户名登录。仅用户名有效;无法识别数字用户 ID。默认情况下,允许所有用户登录。如果模式采用 USER@HOST 形式,则分别检查 USER 和 HOST,从而限制来自特定主机的特定用户的登录。允许/拒绝指令按以下顺序处理:DenyUsers、AllowUsers、DenyGroup,最后是AllowGroups。

USER上面的手册页中指定的似乎是描述目标计算机上的用户名(server2在示例中)。

我通过将 AllowUsers 选项设置为 来测试这一点user2@server1,发现我仍然能够从user1@server1->登录user2@server2

此外,日志似乎没有显示任何源用户。

这是 RHEL6 上的日志/var/log/secure,登录后从user1@server1->user2@server2

11 月 17 日 16:14:59 server2 sshd[28349]:将 /proc/self/oom_score_adj 设置为 0

11 月 17 日 16:14:59 server2 sshd[28349]:来自 10.1.2.3 端口 36508 的连接

11 月 17 日 16:14:59 server2 sshd[28349]:找到匹配的 RSA 密钥:aa:bb:cc:dd:ee:ff:gg:..

11 月 17 日 16:14:59 server2 sshd[28350]:从 10.1.2.3 端口 36508 ssh2 推迟了 user2 的公钥

11 月 17 日 16:14:59 server2 sshd[28349]:找到匹配的 RSA 密钥:aa:bb:cc:dd:ee:ff:gg:..

11 月 17 日 16:14:59 server2 sshd[28349]:从 10.1.2.3 端口 36508 ssh2 接受 user2 的公钥

11 月 17 日 16:14:59 server2 sshd[28349]: pam_unix(sshd:session): 由 (uid=0) 为用户 user2 打开会话

11 月 17 日 16:14:59 server2 sshd[28349]:用户子进程的 pid 为 28351

那么,有什么办法可以

(a) 更改 的日志记录或行为,sshd以便跟踪进行 ssh 连接的源用户?

(b) 限制 sshd 根据源用户限制连接?

答案1

简短的回答是否定的,服务器将接受从服务器端角度来看的任何有效登录。

然而,有一些可能的解决方法可以实现您想要的。测试并查看以下内容是否满足您的需求。

笔记这对于“普通”用户来说可能就足够了,并且要求您还控制客户端。有经验的用户会找到一种方法来伪造CLIENTUSER下面使用的变量。

通过使用AcceptEnvin 中的指令,/etc/ssh/sshd_config您可以接受一个名为 CLIENTUSER 的变量:

AcceptEnv CLIENTUSER

下一步是强制用户登录命令到登录 shell,例如:

ForceCommand /bin/bash -l

重新启动 sshd 服务并将以下内容添加到 /etc/profile

if [ -z "$CLIENTUSER" ] || [ "$CLIENTUSER" != "user3" ] && [ ! -z "$SSH_CLIENT" ]
then
       echo 'Client logon not allowed'
       logout
fi

以上将注销每个不发送变量CLIENTUSER或发送CLIENTUSER具有不同于 的值的变量的客户端user3

您可以使用以下客户端命令行对此进行测试:

$ ssh user2@host
Client logon not allowed

$ CLIENTUSER=user3 ssh -o "SendEnv CLIENTUSER" user2@host
user2@host $

正如您所看到的,CLIENTUSER可以通过命令行轻松伪造。为了防止这种情况,您可以将以下内容添加到客户`/etc/配置文件:

declare -r CLIENTUSER="$USER"

当用户尝试更改CLIENTUSER变量的值时,他/她将收到以下错误:

bash: CLIENTUSER: readonly variable

相关内容