linux ssh只允许指定的用户登录

2013年3月16日 发表评论 阅读评论

linux ssh只允许指定的用户登录的方法按大类分有两种,一种是通过pam模块配置,一种是通过sshd配置文件配置,这里对这两大类做下说明。

一、pam模块控制法

1、pam_access.so模块法

在/etc/pam.d/sshd文件中增加如下两行内容

account    required     pam_access.so
account    include      system-auth

上面的配置表示在ssh认证中启用该模板,pam_access.so模块的具体工作行为根据配置文件/etc/security/access.conf来决定。该配置文件涉及到的几个字段意义如下:

第一个字段:权限(permission),使用“+”表示授予权限,用“-”表示禁止权限。
第二个字段:用户(user),定义了用户、组以及用“@”表示的在不同主机上的同名用户和同一主机上不同名用户。
第三个字段:访问发起方(origins),定义了发起访问的主机名称、域名称、终端名称。

具体示例为:

#禁止非root用户通过tty1访问相关服务
#-:ALL EXCEPT root:tty1
#禁止除了wheel、shutdown以及sync之外的所有用户访问相关服务
#-:ALL EXCEPT wheel shutdown sync:LOCAL
#禁止wheel用户通过.win.tue.nl之外的其它它终端访问相关服务
#-:wheel:ALL EXCEPT LOCAL .win.tue.nl
# 禁止下面的用户从任何主机登录。其它用户可以从任意地方访问相关服务
#-:wsbscaro wsbsecr wsbspac wsbsym wscosor wstaiwde:ALL
# root用户允许通过cron来使用tty1到tty6终端访问相关服务
#+ : root : cron crond :0 tty1 tty2 tty3 tty4 tty5 tty6
# 用户root允许从下面的地址访问相关服务
#+ : root : 192.168.200.1 192.168.200.4 192.168.200.9
#+ : root : 127.0.0.1
# 用户root可以从192.168.201.网段访问相关服务
#+ : root : 192.168.201.
# 用户root可以从.foo.bar.org中任何主机访问相关服务
#+ : root : .foo.bar.org
# 用户root不允许从任何主机访问相关服务
#- : root : ALL
# 用户@nis_group和foo可以从任何主机访问相关服务
#+ : @nis_group foo : ALL
# 用户john只能从127.0.0.0/24来对本机相关服务进行访问
#+ : john : 127.0.0.0/24
# 用户john可以通过ipv4和ipv6的地址对本机相关服务进行访问
#+ : john : ::ffff:127.0.0.0/127
# 用户john可以通过ipv6的地址访问本机相关服务
#+ : john : 2001:4ca0:0:101::1
# 用户john可以通过ipv6的主机IP地址来访问本机
#+ : john : 2001:4ca0:0:101:0:0:0:1
# 用户john可以通过ipv6的IP地址和掩码来访问相关服务
#+ : john : 2001:4ca0:0:101::/64
# 开放所有用户对本机所有相关服务的访问
#- : ALL : ALL

2、pam_listfile.so模块

pam_listfile.so模块的功能和pam_access.so模块类似,目标也是实现基于用户/组,主机名/IP,终端的访问控制。不过它实现的方式和pam_access.so会稍微有些不同,因为它没有专门的默认配置文件。访问控制是靠pam配置文件中的控制选项和一个自定义的配置文件来实现的。而且除了针对上述访问源的控制之外,还能够控制到ruser,rhost,所属用户组和登录shell。所以有些用户认为它的功能似乎比pam_access.so更加灵活和强大一些。

使用pam_listfile.so模块配置的格式分为五个部分:分别是item、sense、file、onerr以及apply。 其中:

  • item=[tty|user|rhost|ruser|group|shell]:定义了对哪些列出的目标或者条件采用规则,显然,这里可以指定多种不同的条件。
  • onerr=succeed|fail:定义了当出现错误(比如无法打开配置文件)时的缺省返回值。
  • sense=allow|deny:定义了当在配置文件中找到符合条件的项目时的控制方式。如果没有找到符合条件的项目,则一般验证都会通过。
  • file=filename:用于指定配置文件的全路径名称。
  • apply=user|@group:定义规则适用的用户类型(用户或者组)。

而至于file文件的写法就简单了,每行一个用户或者组名称即可。

例如,ssh的拒绝和允许就有两种书写方式:

/etc/pam.d/sshd文件中增加如下内容:

auth       required     pam_listfile.so item=user sense=allow file=/etc/sshusers onerr=fail

在/etc/sshusers文件中增加如下内容:

zhangsan
lisi    

这就表示,只允许zhangsan、lisi两个人通过ssh登陆。当然也可以反其道而行之,指定不允许登陆的用户,相应用sshd文件就改为

auth required pam_listfile.so item=user sense=deny file=/etc/sshusers onerr=succeed

也可以以组的方式进行控制

auth required pam_listfile.so item=group sense=allow file=/etc/security/allow_groups onerr=fail

这就要在/etc/security/allow_groups文件中增加内容,如

root
zhangsan
lisi

总结:上面提到的两个pam模块,不但但用于sshd服务,对于其他调用pam模块的应用同样适用,如ftp。

二、sshd_config配置方式

在sshd_config中设置AllowUsers,格式如

AllowUsers a b c

重启sshd服务,则只有a、b、c 3个用户可以登陆。这种方式相对简单,不过可配置项较少,而且只适用于ssh服务。




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

  1. rambo
    2014年8月25日14:55 | #1

    应该是这个文件吧
    /etc/security/access.conf

  2. rambo
    2014年8月25日15:01 | #2

    咨询一下楼主
    我打开/etc/security/access.conf
    -:ALL EXCEPT root :ALL
    修改成
    -:ALL EXCEPT root my_user:ALL

    这样跟使用AllowUsers 有什么不同

  3. admin
    2014年8月27日09:28 | #3

    问题一、是access.conf 配置文件,不过其底层依赖的还是pam_access.so模块来控制的,这个我确实没清楚;
    问题二、
    1、access.conf 不但可以对ssh服务有效,对ftp服务也可以有效,只要在相应的服务文件里配置调用pam_access.so模块;
    2、access.conf 可以指定终端IP或域名等,配置更为灵活和细度;
    3、sshd_config 里的AllowUsers配置,只针对ssh 服务本身,配置上相对简单和便于理解。

  1. 本文目前尚无任何 trackbacks 和 pingbacks.