linux用户权限管理(2)—-如何限制用户访问终端?

  • Post author:
  • Post category:linux




PAM可插拔身份额认证模块

简介:

Linux-PAM(Pluggable Authentication Modules for Linux.基于Linux的插入式验证模块)是一组共享库,使用这些模块,系统管理者可以自由选择应用程序使用的验证机制。也就是说,勿需重新编译应用程序就可以切换应用程序使用的验证机制。甚至,不必触动应用程序就可以完全升级系统使用的验证机制。

主要作用于管理工具和相关命令



配置文件

PAM包含了一组动态可加载库模块,这些模块控制单个应用程序如何验证用户

通过修改PAM配置文件,为不同管理使用工具自定义安全要求。


配置文件都在/etc/pam.d中

[root@xiaoagiao pam.d]# ls
chfn              fingerprint-auth-ac  password-auth-ac  runuser            smtp.postfix  su-l            vmtoolsd
chsh              login                polkit-1          runuser-l          sshd          system-auth
config-util       other                postlogin         smartcard-auth     su            system-auth-ac
crond             passwd               postlogin-ac      smartcard-auth-ac  sudo          systemd-user
fingerprint-auth  password-auth        remote            smtp               sudo-i        vlock

每个配置文件都有一些模块,大多数模块在/usr/lib64/security下

在/usr/share/doc/pam-1.1.8/txts/以及html子目录下是每个模块的详细描述

  • 以login文件为例
[root@xiaoagiao pam.d]# cat login 
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       substack     system-auth
auth       include      postlogin
account    required     pam_nologin.so
account    include      system-auth
password   include      system-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
session    optional     pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      system-auth
session    include      postlogin
-session   optional     pam_ck_connector.so
#服务类型    控制标记      模块名        参数
  • /usr/lib64/security/
[root@xiaoagiao security]# ls
pam_access.so    pam_faildelay.so  pam_listfile.so    pam_pwhistory.so       pam_succeed_if.so   pam_unix_session.so
pam_cap.so       pam_faillock.so   pam_localuser.so   pam_pwquality.so       pam_systemd.so      pam_unix.so
pam_chroot.so    pam_filter        pam_loginuid.so    pam_rhosts.so          pam_tally2.so       pam_userdb.so
pam_console.so   pam_filter.so     pam_mail.so        pam_rootok.so          pam_time.so         pam_warn.so
pam_cracklib.so  pam_ftp.so        pam_mkhomedir.so   pam_securetty.so       pam_timestamp.so    pam_wheel.so
pam_debug.so     pam_group.so      pam_motd.so        pam_selinux_permit.so  pam_tty_audit.so    pam_xauth.so
pam_deny.so      pam_issue.so      pam_namespace.so   pam_selinux.so         pam_umask.so
pam_echo.so      pam_keyinit.so    pam_nologin.so     pam_sepermit.so        pam_unix_acct.so
pam_env.so       pam_lastlog.so    pam_permit.so      pam_shells.so          pam_unix_auth.so
pam_exec.so      pam_limits.so     pam_postgresok.so  pam_stress.so          pam_unix_passwd.so


配置文件内容解析


服务类型

  1. auth:身份验证管理(是否提供了有效的用户名和密码)
  2. account:账户管理,依据账户策略允许或拒绝访问。例如,可依据时间,口令有效 期限或者受限用户的列表来拒绝访问。
  3. psaawd:密码管理管理口令变更策略。
  4. session:会话管理,将设置应用于程序会话


控制标记

require 如果模块运行成功,继续执行下一个类型的规则,如果失败,执行文件中下一个规则
requisite 如果模块失败,pam不会检查任何其他规则并停止执行
sufficient 如果模块正常运行,PAM就不再继续执行这种类型的其他规则且结果会成功。如果检查失败,PAM会继续检查剩下的规则
optional PAM忽略该规则的成功或失败
include 包括所注明的配置文件中相同type的所有指令;例如指令是password include system-auth,它将包括PAM system-auth文件中的所有口令指令



1.基于pam_securetty.so模块限制root用户登录虚拟终端

/etc/securetty文件下包含了11个虚拟控制台访问指令,指定了允许root用户登录的tty设备,由/bin/login读取

[root@xiaoagiao pam.d]# cat /etc/securetty 
console
vc/1
vc/2
vc/3
vc/4
vc/5
vc/6
vc/7
vc/8
vc/9
vc/10
vc/11
tty1
tty2
tty3
tty4
tty5
tty6
tty7
tty8
tty9
tty10
tty11
ttyS0
ttysclp0
sclp_line0
3270/tty1
hvc0
hvc1
hvc2
hvc3
hvc4
hvc5
hvc6
hvc7
hvsi0
hvsi1
hvsi2
  1. 本文件只对root用户做出限制,若全部注释,root用户不可登录,普通用户不受影响,可以在普通用户下切换到root下。
  2. 若删除该文件,则root,普通用户都可登录所有终端



2. 基于pam_listefilte.os模块指定用户可以登录


实现只能root用户登录

  1. 在/etc/pam.d/login文件中添加 :
account required pam_nologin.so
  1. 创建文件 /etc/noligin:这个文件下的内容将在普通用户登录失败后显示。

结果:只有root用户可以的登录终端。


实现指定用户可以登录终端:

  1. 在/etc/pam.d/login文件中添加 :
account required pam_nologin.so
  1. 创建文件 /etc/noligin:这个文件下写入 pam_listfile.so模块
auth required pam_listfile.so item=user sense=deny file=/etc/myuser/user onerr=secceed
  • 其中file文件指定了可以登录的用户名单
  1. 在/etc/myuser/user下写入可以登录的用户名单

结果:只有名单中的用户可以登录终端,其余用户拒绝

注:也可以通过pam_wheel.so模块实现对用户访问限制(在上一篇文章)



3. 基于pam_access.so模块实现限制用户登录,限制用户登录位置

一般的,/etc/securetty文件控制的是root的登录终端。比此文件更强大的是/etc/security/access.conf 文件,他控制所有用户的访问以及访问位置


  • 要想使用access.config,需要在/etc/pam.d/login中添加pam_access.so模块.
account required pam_access.so


access.conf文件

………………
# User "foo" and members of netgroup "nis_group" should be
# allowed to get access from all sources.
# This will only work if netgroup service is available.
#+:@nis_group foo:ALL
#
# User "john" should get access from ipv4 net/mask
#+:john:127.0.0.0/24
#
# User "john" should get access from ipv4 as ipv6 net/mask
#+:john:::ffff:127.0.0.0/127
#
# User "john" should get access from ipv6 host address
#+:john:2001:4ca0:0:101::1
#
# User "john" should get access from ipv6 host address (same as above)
#+:john:2001:4ca0:0:101:0:0:0:1
#
# User "john" should get access from ipv6 net/mask
#+:john:2001:4ca0:0:101::/64
#
# All other users should be denied to get access from all sources.
#-:ALL:ALL


文件内容


permission : users : origins

permission +或-,表示允许或访问
users 用户或组,all代表所有用户
origins 登录地点,(local:本地,all:所有地点,console:控制台)


实现过程

  1. /etc/pam.d/login中加入
account required pam_access.so
  1. /etc/pam.d/sshd中加入同样模块
account required pam_access.so
  1. 修改/etc/security/asscss.conf文件
添加
+:root:ALL  #root可从任意位置进入
+:user1,user2:192.168.126 #允许user1,user2从192.168.126网段访问
-:ALL:ALL  #其余全部拒绝

结果:

  • root可从任何虚拟终端,伪终端登录系统
  • user1,user2只能存在于192.168.42.1上的ssh客户端登录系统。
  • user3不能登录



版权声明:本文为wdwangye原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。