如果有人通过 ssh 访问我的 Debian 服务器,我希望收到通知。
所以我想每当用户通过 ssh 登录我的服务器时发送一封电子邮件,所以我在末尾添加了这一行/etc/profile
:
/usr/local/bin/shell-login.sh | mailx -s "SSH Login User $(whoami) on YOUR-HOSTNAME" [email protected]
/usr/local/bin/shell-login.sh
包含:
#!/bin/bash
echo "Login on $(hostname) at $(date +%Y-%m-%d +%H:%M)"
echo "User: "$(whoami)
echo
id
echo
finger
这效果太好了:我现在每分钟都会收到一封电子邮件,告诉我root
正在登录,这似乎是由cron
(请参阅/var/log/auth.log
)引起的
我该如何更改此设置才能在自动内部 ssh 调用上不发送电子邮件?
答案1
对我来说这个问题仍然不清楚,所以我尝试回答第一段中包含的问题。如何记录 SSH 登录?
我还将把我的答案限制在所有支持 PAM 的 *nix 系统上。这是一个相关的观点,因为您不会通过提供特定操作系统来限制您的问题范围。
好的,这是我过去使用的:sshrc
。如果您添加一个名为该文件/etc/ssh
(位置可能有所不同!),它将由交互的(即使用 shell)SSH 连接。
这里的缺点是您不会了解相关的信息,例如 SFTP(sftp-internal
子系统)连接。
然而,我们这里有一条内线。
我们可以利用 PAM 来pam_exec.so
发挥我们的优势,并通过添加以下内容来限制其对 SSH 的影响/etc/pam.d/sshd
(对我来说,这是最后一个非注释行):
session optional pam_exec.so stdout /etc/your_email_script.sh
这将确保脚本以特权用户身份运行(如果您更喜欢调用 sendmail 二进制文件来发送邮件,则相关),并且用户几乎无法执行任何操作来避免运行此脚本。您可以有效地将对该脚本的访问限制为仅root
.
如果需要的话,与你相关的部分optional
应该进行调整。相关阅读:man pam_exec
, man pam.conf
, man pam.d
.
您可能还想考虑一下要多久执行脚本。
你所看到的错过的是。您还有很多其他方法可以锁定服务器。对于初学者:不允许密码。坚持仅使用密钥进行身份验证。确保仅具有 SFTP 访问权限的人员没有其他访问权限:
Match group sftponly
ChrootDirectory /home
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
PasswordAuthentication no
将允许组成员sftponly
仅使用 SFTP,不使用端口转发等,并将范围限制为/home
(文件/文件夹权限执行其余操作)。
AllowGroups ssh-users
将要仅有的甚至允许组成员ssh-users
通过 SSH 登录。也就是说,您可以将 SSH 登录限制为部分用户群。
PermitRootLogin no
应该设置相关用户并改为 sudoers。
PasswordAuthentication no
PubkeyAuthentication yes
应确保您具有有限控制权的密码无法用于登录。
AuthorizedKeysFile /some/protected/folder/.ssh/authorized_keys
可以确保不允许用户管理他们的authorized_keys
文件,但要求您代表他们执行此操作。
答案2
尝试这个:
#!/bin/bash
if [ ! $(whoami) == root ] ; then
echo "Login on $(hostname) at $(date +%Y-%m-%d +%H:%M)"
echo "User: "$(whoami)
echo
id
echo
finger
fi
答案3
您可以通过(仔细)编辑模块/etc/pam.d/sshd
并将其添加pam_exec
到堆栈中来完成此操作。当某人成功启动 ssh 会话时,此模块可用于调用外部程序(例如您的脚本)。
如果您需要“如何”说明,请告诉我,我将更新我的答案以将它们包含在基于 Debian 的系统中。 (其他发行版的 PAM 堆栈略有不同,因此您必须解释我的说明,而不是盲目遵循它们。)