分类: 系统运维
2013-05-16 10:36:46
(二)pam控制#!/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;
}
有时候,为了防止一个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 ”