登录 ssh 服务器时如何设置 PAM_RUSER?

登录 ssh 服务器时如何设置 PAM_RUSER?

我正在尝试使用记录器记录所有 ssh 连接并通过邮件通知。我遵循了以下方法:#179889

#!/bin/sh

sender="xxx"
recepient="xxx"

if [ "$PAM_TYPE" != "close_session" ]; then
    host="`hostname`"
    subject="SSH Login: $PAM_USER@$host from $PAM_RUSER@$PAM_RHOST"
    # Message to send, e.g. the current environment variables.
    message="`env`"
    echo "$message" | mail -r "$sender" -s "$subject" "$recepient"
    # Logger
    logger -t ssh-wrapper $PAM_RHOST@$host from $PAM_RUSER@$PAM_RHOST
fi

问题是 $PAM_RUSER 为空。

我如何设置这个环境变量?

答案1

您从哪里获得 PAM_RUSER?

PAM_RHOST 是远程主机(即连接的来源)。这相当简单:您需要一个 (L)HOST(本地)和一个 RHOST(远程)来进行连接(是的,两者都可以是 127.0.0.1 或 ::1,或其他任何值,但您需要两次,因为此处的连接是点对点的)。

但 PAM_RUSER 是一个不同的概念:如果 RHOST 提供了 USER,那就是当地的RHOST 希望以用户 (即,您的 LHOST 上的用户) 进行身份验证。

rlogin/rsh/rcp 和 co 等工具确实有 RUSER 的概念,因为 r*-tools 依赖于信任主机。

SSH 之类的东西则不然,因为它不信任远程主机,而是信任对给定帐户进行身份验证的能力。换句话说:使用 SSH,基本上没有 RUSER,因为 SSH 只关心授予 RHOST 以 LHOST 上的 LUSER 身份登录的能力。

换句话说:从客户端的角度来看,除非您告诉它另行操作,否则ssh HOST将使用您的本地用户名作为登录用户名 - 因此 RUSER == LUSER。如果您选择提供不同的名称,例如ssh USER@HOST,SSH 服务器只知道提供给它的任何 USER,没有人会谈论 USER 可能具有的其他值。

这是一般情况 - 例如使用 Kerberos 可能会改变这种情况,因为存在一个可靠验证的用户(主体)的概念,能够证明他们就是他们所声称的那个人。

tl;dr:您关心的是 USER/PAM_USER,因为如果错误地授予访问权限,该帐户将会受到损害。

编辑:说明更新的信息。

看看您的用例,可能有更好的方法来获取此类信息/属性 - 使用公钥认证。这样您就可以获得如下日志:

Mar 01 09:35:47 HOSTN sshd[60412]: Accepted publickey for USER from RHOST port 42088 ssh2: RSA xx:d6:09:xx:76:84:xx:7e:22:xx:af:a2:xx:b3:8b:xx

我不完全确定您如何发送电子邮件,但您可以考虑以下选项之一:

  • 使用 syslog 将此日志(以及其他日志)推送到某个中心位置
  • 使用某种日志解析器(例如 logstash/beats)来监控此类事件,并让该工具发送通知。不是为了鼓励 logstash,但除了电子邮件之外,它还可以接收各种其他类型的通知,例如 slack/webhooks/等。

我承认,它与您的原始解决方案并不完全相同(并且需要您有某种人机->键映射 - 但无论如何,这通常是一件好事)。

相关内容