LINUX控制用户的登录地点以及PAM的用法

控制用户的登录地点

文件/etc/secruity/access.conf可控制用户登录地点,为了使用access.conf,必须在文件/etc/pam.d/login中加入下面行:

account required /lib/security/pam_access.so

access.conf文件的格式:

permission : users : origins

其中:

permission:可以是 “+”或“-”,表示允许或拒绝。
user:可以是用户名、用户组名,如果是all则表示所有用户。
origins:登录地点。local表示本地,all表示所有地点,console表示控制台。另外,origins也可以是某一网络。

后面两个域中加上 except是“除了”的意思。例如:除了用户wheel、shutdown、sync禁止所有的控制台登录:

-:ALL EXCEPT wheel shutdown sync:console

root账户的登录地点不在access.conf文件中控制,而是由/etc/securetty文件控制。

必须保证/etc/pam.d/login有下面这行:

auth       required     pam_securetty.so

etc/securetty文件指定了允许root登录的tty设备,由/bin/login程序读取,其格式是一个被允许的名字列表,你可以编辑/etc/securetty且注释掉如下的行。

   # tty2
  # tty3
  # tty4
  # tty5
  # tty6

这时,root仅可在tty1终端登录。

关于PAM的一些解释

热身:

何要授予用户特权的程序都要能够进行用户认证。当您登入系统时,您需要提供用户名和口令,而后登入进程据此以检验登入的合法性---确认您就是该用户。还有除口令认证之外的其他认证形式,而且口令的存储方式也是各不相同的。

1、说明

A、PAM可加载目标文件(模块)是在RedHat Linux系统中它们被放在了/lib/security目录下
B、PAM库本地系统配置文件/etc/pam.conf OR /etc/pam.d/目录下的一些配置文件来设置

2、# more login

#%PAM-1.0
auth       required     pam_securetty.so 
    用来控制root用户只可以从包含在/etc/securetty文件中的终端登录系统。
auth       required     pam_stack.so service=system-auth
auth       required     pam_nologin.so
    提供标准的UNIX nologin登录认证。如果/etc/nologin文件存在,则只有root用户可以登录,其他用户登录时只会得到/etc/nologin文件的内容。如果/etc/nologin不存在,则该模块没有作用。
account    required     pam_stack.so service=system-auth
password   required     pam_stack.so service=system-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_stack.so service=system-auth
session    optional     pam_console.so
# ls -l /dev/pts/1
crw--w----  1 root tty 136, 1 May 15 21:19 /dev/pts/1
# ls -l /dev/pts/2
crw--w----  1 test tty 136, 2 May 15 21:20 /dev/pts/2
  用户登陆时,它将TTY设备权限改成该用户所有,当用户退出时,将TTY设备权限改为root所有。
# pam_selinux.so open should be the last session rule
session    required     pam_selinux.so multiple open
login要做两件事,首先查询用户,然后为用户提供所需服务,例如提供一个shell程序。
通常,login会提示用户输入密码。然后对密码进行校验,这项任务就是Linux-PAM完成的。

上例中三个required连续使用, 即便第一个模块失败了,也要完成三个模块的校验。这是一种安全上的考虑 ---这种设计永远不要让用户知道他或她们为什么会被拒绝,否则会让其更容易突破认证。可以将“required”改成“requisite”来修改这种认证方式。如果有任何“requisite”模块以失败返回,整个PAM认证将终止再调用其它模块也以失败返回。

3、pam_unix认证模块

所属类型: account; auth; password; session

功能描述:该模块是标准UNIX认证模块pam_unix的替代模块。

在作为auth类型使用时,此时该模块可识别的参数有debug、audit、use_first_pass、try_first_pass、nullok、nodelay,主要功能是验证用户密码的有效性,在缺省情况下(即不带任何参数时),该模块的主要功能是禁止密码为空的用户提供服务;

auth        required      /lib/security/$ISA/pam_env.so
auth        sufficient    /lib/security/$ISA/pam_unix.so likeauth nullok
auth        required      /lib/security/$ISA/pam_deny.so

在作为account类型使用时,此时该模块可识别的参数有debug、audit,该模块主要执行建立用户帐号和密码状态的任务,然后执行提示用户修改密码,用户采用新密码后才提供服务之类的任务;

account     required      /lib/security/$ISA/pam_unix.so
account     sufficient    /lib/security/$ISA/pam_succeed_if.so uid < 100 quiet
account     required      /lib/security/$ISA/pam_permit.so

在作为password类型使用时,此时该模块可识别的参数有debug、 audit、 nullok;、not_set_pass、use_authtok、try_first_pass、use_first_pass、md5、bigcrypt、shadow、nis、

remember,该模块完成让用户更改密码的任务;

password    requisite     /lib/security/$ISA/pam_cracklib.so retry=3
password    sufficient    /lib/security/$ISA/pam_unix.so nullok use_authtok md5
shadow
password    required      /lib/security/$ISA/pam_deny.so

在作为session类型使用时,此时该模块没有可识别的参数,该模块仅仅完成记录用户名和服务名到日志文件的工作。

session     required      /lib/security/$ISA/pam_limits.so
session     required      /lib/security/$ISA/pam_unix.so

可带参数:

debug:将调试信息写入日志
audit:记录更为信息的信息
nullok:缺省情况下,如果用户输入的密码为空,则系统能够不对其提供任何服务。但是如果使用参数,用户不输入密码就可以获得系统提供的服务。同时,也允许用户密码为空时更改用户密码。 ?
nodelay:当用户认证失败,系统在给出错误信息时会有一个延迟,这个延迟是为了防止。黑客猜测密码,使用该参数时,系统将取消这个延迟。通常这是一个1秒钟的延迟。
try_first_pass:在用作auth模块时,该参数将尝试在提示用户输入密码前,使用前面一个堆叠的auth模块提供的密码认证用户;在作为password模块使用时,该参数是为了防止用户将密码更新成使用以前的老密码。
use_first_pass:在用作auth模块时,该参数将在提示用户输入密码前,直接使用前面一个堆叠的auth模块提供的密码认证用户;在作为password模块使用时,该参数用来防止用户将密码设置成为前面一个堆叠的password模块所提供的密码。
no_set_pass:使密码对前后堆叠的password模块无效。
use_authok:强制使用前面堆叠的password模块提供的密码,比如由pam_cracklib模块提供的新密码。
md5:采用md5对用户密码进行加密。
shadow:采用影子密码。
unix:当用户更改密码时,密码被放置在/etc/passwd中。
bigcrype:采用DEC C2算法加密用户密码。
nis:使用NIS远处过程调用来设置新密码。
remember=x:记录x个使用过的旧密码,这些旧密码以MD5方式加密后被保存在/etc/security/opasswd文件中。
broken_shadow:在作为account使用时,该参数用来忽略对影子密码的读错误。
likeauth:未知。

配置实例:

参考/etc/pam.d/system-auth

设置密码中的常见错误信息?
         ⑴当用户输入的密码字符数太少时:
BAD PASSWORD: it's WAY too short
    ⑵当用户输入的密码相同字符太多时:
BAD PASSWORD: it does not contain enough DIFFERENT characters
    ⑶当用户输入的密码为某英文单词时:
BAD PASSWORD: it is based on a dictionary word
    ⑷当用户在“(current) UNIX password:”提示后输入的现有密码错误时:passwd: Authentication token manipulation error
    ⑸当用户两次输入的密码不相同时:Sorry, passwords do not match passwd: Authentication information cannot be recovered
    ⑹当用户输入的密码未被系统接受时:
passwd: Authentication token manipulation error

example 1

auth       required     pam_securetty.so
    只用来控制root用户只可以从包含在/etc/securetty文件中的终端登录系统。
telnet 服务使用PAM的login进行用户身份验证,#more /etc/pam.d/login便能看到此行,要让root不受限制远程login,第一种方法注销此处这一行,另一种在 /etc/securetty文件中加入诸如pts/n(1-n);

同理如果想限制root使用ssh远程进入系统,只需在/etc/pam.d/sshd文件中加入这行;auth       required     pam_securetty.so即可。

example 2

account    required     pam_access.so
    pam_access是pam中处理用户访问控制的模块,没有使用pam前,linux对用户的所有访问控制都是借助hosts.allow, hosts.deny文件,实现所有服务的访问控制,再加上usertty就是对用户登陆控制(专门是针对login)。
    一种是直接修改/etc/security/access.conf
另一种是使用参数accessfile=/path/to/file.conf
例如修改access.conf文件:
+:root:ALL //root从任意位置连入系统
+:redhat:164.70.12.//redhat只能从这个网段连入
-:ALL:ALL 其余DENY
然后 # vi /etc/pam.d/sshd
加入这一行 account    required     pam_access.so

example 3

限制用户LOGIN次数
在/etc/security/limits.conf :
加入redhat           -       maxlogins       3
然后 # vi /etc/pam.d/sshd
加入这一行session    required     pam_limits.so
则同一用户至多3-1次login入系统

example 4

限制用户LOGIN时间
# vi /etc/security/time.conf加入以下一行
sshd;*;redhat;!Tu2200-2230
# vi /etc/pam.d/sshd 加入以下一行
account    required     pam_time.so
则redhat每星期二晚上22:00-22:30不能使用SSH来login系统。

example 5

用户访问控制
# vi /etc/pam.d/vsftpd 加入以下一行

auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
# vi /etc/ftpusers .......

 


本博原创,如转载请注明出处: http://blog.vfocus.net,谢谢。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PAM (Pluggable Authentication Modules) 是一种用于 Linux 和其他类 Unix 操作系统的身份验证的模块化体系结构。它允许管理员为各种应用程序和服务配置身份验证方法,包括本地系统身份验证、LDAP、Kerberos 等等。PAM 是一个可插拔的模块化架构,因此管理员可以选择使用现有的模块或编写自己的模块来满足他们的需求。 PAM 的工作原理是通过在用户登录时向操作系统提供一个身份验证的钩子,该钩子在用户登录之前和之后运行。这个钩子可以是一个共享库或者一个可执行文件,它会根据用户的身份验证请求调用相应的 PAM 模块来完成身份验证过程。每个 PAM 模块都是独立的,可以自定义配置,也可以通过配置文件进行全局配置PAM 的身份验证过程包括以下步骤: 1. 读取用户的身份验证请求。 2. 调用 PAM 库中的相应函数,运行 PAM 模块。 3. PAM 模块根据用户身份验证请求的类型进行身份验证。 4. PAM 模块返回身份验证结果,PAM 库根据结果进行操作。 5. 如果身份验证成功,PAM 库会创建用户的会话并将其绑定到用户的 shell。如果身份验证失败,PAM 库会拒绝用户的请求并返回错误信息。 总的来说,PAM 是一个灵活的、可扩展的身份验证框架,可以实现各种各样的身份验证方法。它可以使管理员更容易地管理和配置身份验证,同时保证系统的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值