我有一个使用 ssh 进行身份验证的应用程序。由于各种规定(HIPAA 等),用户只能在一定时间内登录,并且只能登录一次。
如果尝试另一个连接,我希望 sshd 自动断开用户连接。这个想法是:用户 1 已连接。用户 2 使用用户 1 的凭据尝试登录。两者都被踢了(我们不确定用户 1 或用户 2 是否合法)。
如果这种情况在 Y 分钟内发生 X 次以上,则帐户将被冻结,直到管理员将其解冻(很可能是由于密码重置)。
现在,用户被沙盒化在他们自己的scponly目录中;我不确定这是否重要。
试图杀死单个 sshd 连接就像玩 whackamole,我更喜欢这是 sshd 自己做的事情,而不是根级脚本。
编辑:这是在
2.6.31-22-server #73-Ubuntu SMP
Run Code Online (Sandbox Code Playgroud)
我的limits.conf文件包含如下几行:
user1 hard maxlogins 1
user2 hard maxlogins 1
Run Code Online (Sandbox Code Playgroud)
我的 sshd_config 文件包含以下行:
UsePAM yes
Run Code Online (Sandbox Code Playgroud)
但是我仍然可以从多台不同的机器以 user1 身份登录。我在这里做错了什么,以便我至少可以阻止 user1 进行多次登录?
小智 5
在这里设置 maxlogins 限制实际上是有效的。只要确保您使用“-”限制类型,而不是“硬”。
user1 - maxlogins 1
Run Code Online (Sandbox Code Playgroud)
如果你想踢掉使用 scponly 进行双重登录的用户,这里有一个快速而肮脏的脚本,它可以做到这一点。将其放入 crontab,因此它每分钟执行一次。
#!/bin/sh
for user in `grep scponly /etc/passwd | gawk -F: '{print $1}'`; do
echo "Checking user: $user"
instances=`ps -u $user| grep scponly | wc -l`
echo "scponly instances $instances"
if [ $instances -gt 1 ] ; then
echo "Too many connections detected, slaying scponly for user $user"
if [ -e /tmp/$user ] ; then
attempts=`cat /tmp/$user`
echo "Detected $attempts attempts"
# increment attempts counter
echo $(($attempts+1)) > /tmp/$user
if [ $attempts -gt 3 ] ; then
echo "Blocking $user"
/usr/sbin/usermod -L $user
fi
else
echo "1" > /tmp/$user
fi
killall -u $user scponly
fi
done
Run Code Online (Sandbox Code Playgroud)
下载脚本:http : //dl.dropbox.com/u/17194482/kill-scponly.sh
| 归档时间: |
|
| 查看次数: |
9788 次 |
| 最近记录: |