Chinaunix首页 | 论坛 | 博客
  • 博客访问: 305128
  • 博文数量: 85
  • 博客积分: 1508
  • 博客等级: 上尉
  • 技术积分: 791
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-06 11:49
文章分类

全部博文(85)

文章存档

2013年(22)

2012年(63)

我的朋友

分类: 系统运维

2013-05-16 10:36:46

(一)脚本实现

功能: 实现root之外的用户只能登录一个
使用方法: 用root权限在后台(比如screen里)运行这个脚本

#!/usr/bin/perl -w
use strict;
sub main
{
    my @lines = `ps -eo user,pid,etime,cmd | grep sshd`;
    my $users;
    for my $line (@lines) {
        if(my ($user, $pid, $etime, $cmd) = $line =~ /^([^s]+)s+(d+)s+([^s]+)s+(sshd:.+)$/) {
            next if($user eq ‘root’);
            my $proc = {‘pid’, $pid, ‘etime’, $etime, ‘cmd’, $cmd};
            push @{$users->{$user}}, $proc;
        }
    }
    for my $key(keys(%$users)) {
         my @sshs = sort {
            my ($lb, $la) = (length($b->{‘etime’}), length($a->{‘etime’}));
            if($lb == $la) {
                $b->{‘etime’} cmp $a->{‘etime’};
            } else {
                $lb <=> $la;
            }
        } @{$users->{$key}};
        for (1 .. 1) { shift @sshs; };
        for my $ssh (@sshs) {
            kill 9, $ssh->{‘pid’};
        }
    }
}
while(1) {
    main;
    sleep 3;
}

(二)pam控制

 

有时候,为了防止一个SSH用户多次登录,即滥用资源,可以通过PAM来限制,达到单点登录。

1.确保/etc/pam.d/sshd里添加了"pam_limits.so",Debian和Ubuntu默认情况下已经添加了哦。


# Set up user limits from /etc/security/limits.conf.

session required pam_limits.so


2.在“/etc/security/limits.conf” 里添加“* - maxlogins 1”,意思是所有SSH用户的最大登录用户数都为1。

3.reboot

重启后,多次登录同一个用户就会提示“Too many logins for ”


阅读(3470) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~