我想根据每个组/每个用户禁用或更改 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 在未净化的环境下以 root 身份运行命令:这是一个安全漏洞,
update-motd
修补方法是:取消设置环境并手动设置PATH
变量。 - pam_motd update-motd 代码存在多个问题:此多个问题之一与 生成的文件上缺少锁定有关
update-motd
。在多用户系统中,多个并发访问可能导致 motd 损坏。
由于这些原因,我猜测它无法用于pam_motd
您的目标。
HUSHLOGIN_FILE
指令/etc/login.defs
应该抑制登录过程中的所有常见喋喋不休,因此任何输出甚至上次登录日期都会被抑制。
我猜测 motd 的设计目的是覆盖系统中的所有用户,因此可以ssh
为pam_motd
所有用户简单地启用或禁用它。