最小化SSH账号权限&限制SSH账号同一时间只能登陆一次

2012年10月26日 | 分类: 翻墙相关 | 标签: , , ,

最小化SSH账号权限

时下 SSH 销售很火爆,专营 SSH 的服务商犹如雨后春笋般出现,原因是门槛低。基本上只要有一台 VPS ,就可以创建 SSH 账号,但安全问题却很重要。在生产环境中,一个不作限制的 SSH 账号,将允许你登陆到服务器,并且进行许许多多的操作。因此无论是销售,还是给朋友创建 SSH 账号,将其权限最小化,是必须的。

似乎在圈内已有一些比较完善的 SSH 配置以及销售系统,估计已经有相关的一些防范措施。因此本教程是针对个人用户的:当你购买了一个 VPS ,希望创建一些 SSH 账号送给朋友或者会员,又不希望他们能登陆到 VPS 上的话,就需要用到本文所提及的这个方法。

至于为什么不希望他们通过 SSH 登陆,一是因为能够登陆的账号可能会造成安全隐患,二是因为现在大多用来作 TCP 转发,因而只用于 TCP 转发的根本没有登陆的必要。

创建只能作 TCP 转发的 SSH 账号

通过下面这个命令,就可以创建一个只允许 TCP 转发而不允许登陆(交互)的 SSH 账号。

  1. useradd -s /bin/false username

*通过下面命令来给 username 这个账号设置密码

  1. passwd username

创建允许更改密码以及 TCP 转发但不能登陆的 SSH 账号

更人性化一些,你可能需要允许你的朋友们自己去更改一个便于他们自己记忆的密码。这个时候我们可以让 /usr/bin/passwd 作为他们的 Shell ,这样他们就可以自己修改密码了。

1.编辑/etc/shells,并加入:

  1. /usr/bin/passwd

2.通过以下命令创建 SSH 账号:

  1. useradd -s /usr/bin/passwd username

来源http://www.vpseek.com/newbies-guides/minimized-privileges-for-ssh-account.html

==========

限制SSH账号同一时间只能登陆一次

我们在之前的一篇文章《最小化SSH账号权限》 中提到,将 SSH 账号的权限最小化,以禁止不信任用户的交互操作,而仅允许他们使用 TCP 转发功能。限制用户进行交互是从安全角度考虑的,然而由于账号可能被盗或者被公布和传播,特别是商用的SSH(出售)如果账号被公布,可能会有许多人同时 在使用,这样一来流量上可能就吃不消了。

我们可以通过本文所介绍的这一个脚本,来实现一个 SSH 账号只能在同一时间被一个人所使用。如果已经有人登陆了这个 SSH 账号,那么其他人用这个账号登陆,就会造成上一个登陆的人掉线。这在一定程度上,避免了拥有该 SSH 账号的人将账号与别人分享。

将以下脚本保存在服务器上,同时给予执行权限,最后后台运行,就可以实现限制 SSH 账号同一时间只能登陆一次的功能。该脚本由 Perl 编写,需要 Perl 解析器才能够正常运行。

  1. #!/usr/bin/perl -w
  2. use strict;
  3. sub main
  4. {
  5.     my @lines = `ps -eo user,pid,etime,cmd | grep sshd`;
  6.     my $users;
  7.     for my $line (@lines) {
  8.         if(my ($user, $pid, $etime, $cmd) = $line =~ /^([^\s]+)\s+(\d+)\s+([^\s]+)\s+(sshd:.+)$/) {
  9.             next if($user eq ‘root’);
  10.             my $proc = {‘pid’, $pid, ‘etime’, $etime, ‘cmd’, $cmd};
  11.             push @{$users->{$user}}, $proc;
  12.         }
  13.     }
  14.     for my $key(keys(%$users)) {
  15.          my @sshs = sort {
  16.             my ($lb, $la) = (length($b->{‘etime’}), length($a->{‘etime’}));
  17.             if($lb == $la) {
  18.                 $b->{‘etime’} cmp $a->{‘etime’};
  19.             } else {
  20.                 $lb  $la;
  21.             }
  22.         } @{$users->{$key}};
  23.         for (1 .. 1) { shift @sshs; };
  24.         for my $ssh (@sshs) {
  25.             kill 9, $ssh->{‘pid’};
  26.         }
  27.     }
  28. }
  29. while(1) {
  30.     main;
  31.     sleep 3;
  32. }

比方说我们把这个脚本保存为 limit.sh ,然后我们需要:

1.给予执行权限

  1. chmod +x limit.sh

2.后台运行

  1. ./limit.sh &

3.如果没有 Perl ,可以 Yum 安装:

  1. yum -y install perl

来源http://www.vpseek.com/newbies-guides/permit-only-one-login-session-per-ssh-account.html

  1. 福音乐章
    2012年10月26日21:30

    曾经我把你博客从opera的快速拨号删了,因为你那时除了介绍vpn服务商就是介绍vpn服务商,前一阵我闲得没事又看了看你的博客,技术教程越来越多了,你又荣登我opera快速拨号第四位了,前三位是谷歌,维基,dropbox。