Pma模块详解,对用户登陆linux等进行限制,密码修改限制等

PAM详细介绍
2014-04-02 09:26:41
标签: PAM
原创做品,容许转载,转载时请务必以超连接形式标明文章 原始出处 、做者信息和本声明。不然将追究法律责任。 http://lidefu.blog.51cto.com/3429777/1388751

1.PMA简介html

 PMA(Pluggable Authentication Module)是一个可插入式认证模块,在Linux系统中,各类不一样的应用程序都须要完成认证功能,为了实现统一调配,把全部须要认证的功能作成一个模 块(认证机制特别复杂的除外,如:https),当特定的程序须要完成认证功能的时候,就去调用PMA的认证模块,这些模块都位于系统中的/lib64 /security(/lib/security:32位操做系统)目录下,但并非全部的模块都是用来完成认证的,有些模块是为了实现PAM的某些高级 功能而存在的,其中PMA的认证库是由glibc提供的,应用程序最终使用哪一个PMA模块,取决于/etc/pma.d/*这个目录下的定义.shell

PMA完成认证的过程:下面用passwd这个应用程序举例吧!vim


一)首先用户执行/usr/bin/passwd这个程序,并输入密码安全

二)passwd这个程序会去调用PMA模块进行验证bash

三)PMA会到/etc/pam.d/*下去寻找与passwd同名的配置文件session

四)当找到配置文件后,PMA会根据/etc/pam.d/passwd内的配置,调用PMA的模块进行认证app

五)认证完成后,将验证的结果返回给passwd这支程序ssh

六)最终,passwd会根据PAM的返回结果决定下一个执行动做(从新输入密码或验证经过)ide

·在以上步骤中最重要的是第四步,咱们来详细分析一下分析下第四步,pam是如何完成认证功能的,一样,拿/etc/pam.d/passwd来举例,首先来 /etc/pam.d/passswd的配置信息.ui

1
2
3
4
5
6
7
[root@lidefu ~] # cat /etc/pam.d/passwd
#%PAM-1.0                 <==PAM的版本号
auth        include          system-auth    <==每一行都是一个验证过程
account     include          system-auth
password    substack         system-auth
-password   optional         pam_gnome_keyring.so
验证类别    验证控制标志     PAM的模块与该模块的参数

·第一个字段:验证类别(Type)

验证类别主要分为以下四种,而且按顺序依次向下验证

·auth

 auth是用来认证用户的身份信息的,若是auth认证的时候须要用到多个模块,就依次检查各个模块,这个模块一般最终都是是须要密码来检验的,因此这个模块以后的下一个模块是用来检验用户身份的.若是账号没问题,就受权

·account

 account大部分是用来检查权限的,好比检查帐户和密码是否过时等,若是你使用一个过时的帐户或密码就不容许验证经过.若是有多个模块,也依次检查各个模块.

·password

 修改密码须要用到的,若是用户不修改密码,几乎用不到这个模块.

·session

 限定会话限制的,好比:vsftpd下午6点不容许访问,那6点事后用户再去访问的话就会被限制,或内存  不足不容许访问等,session就是限定这种类型的

 


·第二个字段:验证控制标志(control flag)

 用于控制认证成功或失败时要采起的行动,其中又分为两种control,一种是简单control,一种是复杂  contorl

·简单的control

·required

 此验证若是成功则带有success的标志,若是失败则带有failure的标志,此验证若是失败了,就必定会 返回失败的标志,可是不会当即返回,而是等全部模块验证完成后才返回,因此它不论验证成功或失败   都会继续向后验证其余的流程.

·requisite

 若是验证失败则当即返回failure的标志,并终止后续的验证流程,若是验证带有success标志,则继续  后面的流程.

·sufficient

 与requisite正好相反,此验证若是成功则带有success的标志,并当即终止后续的流程,若是验证带有  failure的标志,则继续后面的流程.

·optional

 optional参考意见,这个只是打酱油的....

·以上流程以下图所示

wKiom1M7ZdriCI-nAAD7u-msaLY596.jpg

·include

 包含进来指定的其余配置文件中的同名栈中的规则,并以之进行检测.

·substack·

 有点麻烦.无论他了...你也用不着


·PAM模块路径

·/etc/pam.d/*:每一个程序个别的PAM的配置文件;

·/lib/security/*:PAM模块档案的实际放置目录;

·/etc/security/*:其余PAM环境的配置文件;

·/usr/share/doc/pam-*/:详细的PAM说明文件;


·PAM模块分类

·pam_unix.so

 传统意义上的账号和密码认证机制,这个机制实现了标准C库中基于让用户输入账号密码并完成检测 的认证过程

·pam_permit.so

 直接经过,容许访问,定义默认策略

·pam_deny.so

 拒绝访问,定义默认策略

·pam_cracklib.so

 用来检验密码的强度,包括设定的密码是否在字典中,修改的密码是否能和上次同样,密码至少包含多 少个数字字符,能够输入多少次错误密码等,都是由这个模块定义的

·pam_shells.so

 检查用户登陆的shell是不是安全shell,也就是写在 /etc/shells中的shell

·pam_securetty.so

 限定管理员只能经过安全的tty登陆,/etc/securetty,tty就是传统终端

·pam_listfile,这东西可牛逼了....

1
item=[tty|user|rhost|ruser|group|shell] sense=[allow|deny] file=/path/filename onerr=[succeed|fail] [apply=[user|@group]] [quiet]

·pam_rootok.so

 管理员su到其余用户不用输入密码就是靠这个定义的

·pam_succeed_if.so

 普通用户su的时候不须要密码

·pam_limits.so

 资源限定打开文件数,使用进程数等等,对任何人都生效,/etc/security/limits                    或/etc/security/limits.d/*

·pam_nologin.so

 能够限制通常用户是否可以登入主机,当/etc/nologin这个档案存在时,则全部通常使用者均没法    再登入系统

 


练习:

·限制root用户只能最多从tty2登陆,不能远程使用sshd登陆

1
2
3
4
5
6
[root@lidefu etc]# vim /etc/pam.d/sshd     #编辑这个文件
auth       required     pam_securetty.so   #添加这一行
[root@lidefu ~]# cat /etc/securetty        #编辑这个文件
console
tty1
tty2

·只有sshusers组的用户能使用ssh远程登陆

1
2
3
4
5
[root@lidefu etc]# groupadd sshusers              #添加一个组
[root@lidefu etc]# vim /etc/pam.d/sshd            #编辑远程登陆的pam
  auth       required     pam_listfile.so item=group sense=allow file=/etc/security/allow-groups                    #添加这一句
[root@lidefu etc]# vim /etc/security/allow-groups  #编辑组文件,就是上面那个
sshusers                                           #添加组

·管理员su的时候须要密码

1
2
3
4
5
6
[root@lidefu etc]# vim /etc/pam.d/su            #编辑这个文件
#auth           sufficient      pam_rootok.so   #注释这一项
[root@lidefu etc]# whoami
root
[root@lidefu etc]# su ldf
Password:

·普通用户ldf,su的时候不用输入密码

1
2
3
4
5
6
[root@lidefu etc]# vim /etc/pam.d/su        #编辑这个文件
3 auth            sufficient      pam_succeed_if.so uid = 500 use_uid quiet             #添加这一句
[root@lidefu etc]# id ldf
uid= 500 (ldf) gid= 500 (ldf) groups= 500 (ldf)
[ldf@lidefu ~]$ su root                      #尝试
[root@lidefu ldf]#

·限定组(用户)使用最大的资源数

1
2
3
4
5
6
[root@lidefu etc]# vim /etc/security/limits.conf  #这里看限制的东西不少
@sshusers        soft       nofile         10000  #软限制,打开文件数 10000
@sshusers        hard       nofile         10000  #硬限制,
@sshusers        -          data           10000  #软硬都限制,使用数据大小
sshusers        -            nproc         10000  #软硬都限制,进程数
上面带@的是组,不带的是用户,使用命令limits能够临时调整

 

本文出自 “烟不离手” 博客,请务必保留此出处http://lidefu.blog.51cto.com/3429777/1388751

相关文章
相关标签/搜索