在 SSH 中设置特定于用户或组的 MOTD

在 SSH 中设置特定于用户或组的 MOTD

我想根据每个组/每个用户禁用或更改 SSH 登录上显示的 MOTD。SuperUser 上的这个问题有一个答案指出我可以Match在 中使用块sshd_config。但是,man sshd_config指出:

Match
         ...
         Only a subset of keywords may be used on the lines following a
         Match keyword.  Available keywords are AcceptEnv,
         AllowAgentForwarding, AllowGroups, AllowTcpForwarding,
         AllowUsers, AuthenticationMethods, AuthorizedKeysCommand,
         AuthorizedKeysCommandUser, AuthorizedKeysFile,
         AuthorizedPrincipalsFile, Banner, ChrootDirectory, DenyGroups,
         DenyUsers, ForceCommand, GatewayPorts, GSSAPIAuthentication,
         HostbasedAuthentication, HostbasedUsesNameFromPacketOnly,
         KbdInteractiveAuthentication, KerberosAuthentication,
         MaxAuthTries, MaxSessions, PasswordAuthentication,
         PermitEmptyPasswords, PermitOpen, PermitRootLogin, PermitTTY,
         PermitTunnel, PubkeyAuthentication, RekeyLimit,
         RhostsRSAAuthentication, RSAAuthentication, X11DisplayOffset,
         X11Forwarding and X11UseLocalHost.

但我在该列表中看不到任何与 MOTD 相关的内容。事实上,尝试使用该建议会导致sshd启动失败,因为配置不正确。

那么,我可以这样做吗?如果可以,怎么做?从 SSH 配置还是通过更改生成/打印 MOTD 的内容?


修改文件/etc/update-motd.d是没有用的,因为根据man update-motd

   Executable  scripts in /etc/update-motd.d/* are executed by pam_motd(8)
   as the root user at each login, and this information is concatenated in
   /var/run/motd. 

(我用一个脚本测试了这一点。我在 MOTD 中echo $USER得到了。)root

剩下的就是 PAM 配置。我想也许可以pam_motd按组/用户禁用,但我不确定该怎么做。最后一个选项是pam_motd完全禁用,然后使用pam_exec,但我真的希望不要发生这种情况。

答案1

以下是受以下启发的按用户/组 mod 实现每个用户的 mod 或登录横幅

第一个注释掉:

session    optional   pam_motd.so  motd=/run/motd.dynamic
session    optional   pam_motd.so

/etc/pam.d/login并设置PrintMotd no/etc/ssh/sshd_config

然后,您可以定义每个用户/组消息脚本并将其放在文件夹中,例如:

sudo mkdir -p /etc/mymotd/groups
sudo mkdir -p /etc/mymotd/users

在这些文件夹中,您可以为每个组或用户创建可执行脚本,在标准输出上打印当天的消息。

您可以/etc/profile.d/perUserGroupMotd.sh使用以下几行来创建:

gidName=`id -gn`
if [ -e /etc/mymotd/groups/$gidName ]; then
   /etc/mymotd/groups/$gidName
else 
   if [ -e /etc/mymotd/users/$USER ]; then
      /etc/mymotd/users/$USER
   fi
fi

或者您可以使用文件来启用/禁用消息然后运行/path/to/script -g $gidName/path/to/script -u $USER,显然有许多不同的可能实现。

关于pam_motd,最后我发现了这两个bug:

由于这些原因,我猜测它无法用于pam_motd您的目标。

HUSHLOGIN_FILE指令/etc/login.defs应该抑制登录过程中的所有常见喋喋不休,因此任何输出甚至上次登录日期都会被抑制。

我猜测 motd 的设计目的是覆盖系统中的所有用户,因此可以sshpam_motd所有用户简单地启用或禁用它。

相关内容