设为首页 收藏本站
查看: 790|回复: 0

[经验分享] Pma模块详解,对用户登录linux等进行限制,密码修改限制等

[复制链接]

尚未签到

发表于 2017-11-18 12:38:24 | 显示全部楼层 |阅读模式
DSC0000.jpg PAM详细介绍2014-04-02 09:26:41
标签:PAM
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lidefu.blog.51cto.com/3429777/1388751
  1.PMA简介
  PMA(Pluggable Authentication Module)是一个可插入式认证模块,在Linux系统中,各种不同的应用程序都需要完成认证功能,为了实现统一调配,把所有需要认证的功能做成一个模 块(认证机制特别复杂的除外,如:https),当特定的程序需要完成认证功能的时候,就去调用PMA的认证模块,这些模块都位于系统中的/lib64 /security(/lib/security:32位操作系统)目录下,但并不是所有的模块都是用来完成认证的,有些模块是为了实现PAM的某些高级 功能而存在的,其中PMA的认证库是由glibc提供的,应用程序最终使用哪个PMA模块,取决于/etc/pma.d/*这个目录下的定义.
  PMA完成认证的过程:下面用passwd这个应用程序举例吧!
  一)首先用户执行/usr/bin/passwd这个程序,并输入密码
  二)passwd这个程序会去调用PMA模块进行验证
  三)PMA会到/etc/pam.d/*下去寻找与passwd同名的配置文件
  四)当找到配置文件后,PMA会根据/etc/pam.d/passwd内的配置,调用PMA的模块进行认证
  五)认证完成后,将验证的结果返回给passwd这支程序
  六)最终,passwd会根据PAM的返回结果决定下一个执行动作(重新输入密码或验证通过)
  ·在以上步骤中最重要的是第四步,我们来详细分析一下分析下第四步,pam是如何完成认证功能的,同样,拿/etc/pam.d/passwd来举例,首先来 /etc/pam.d/passswd的配置信息.




[iyunv@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参考意见,这个只是打酱油的....
  ·以上流程如下图所示
DSC0001.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,这东西可牛逼了....




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登录




[iyunv@lidefu etc]# vim /etc/pam.d/sshd     #编辑这个文件
auth       required     pam_securetty.so   #添加这一行
[iyunv@lidefu ~]# cat /etc/securetty        #编辑这个文件
console
tty1
tty2
  ·只有sshusers组的用户能使用ssh远程登录




[iyunv@lidefu etc]# groupadd sshusers              #添加一个组
[iyunv@lidefu etc]# vim /etc/pam.d/sshd            #编辑远程登录的pam
auth       required     pam_listfile.so item=group sense=allow file=/etc/security/allow-groups                    #添加这一句
[iyunv@lidefu etc]# vim /etc/security/allow-groups  #编辑组文件,就是上面那个
sshusers                                           #添加组
  ·管理员su的时候需要密码




[iyunv@lidefu etc]# vim /etc/pam.d/su            #编辑这个文件
#auth           sufficient      pam_rootok.so   #注释这一项
[iyunv@lidefu etc]# whoami
root
[iyunv@lidefu etc]# su ldf
Password:
  ·普通用户ldf,su的时候不用输入密码




[iyunv@lidefu etc]# vim /etc/pam.d/su        #编辑这个文件
3 auth            sufficient      pam_succeed_if.so uid = 500 use_uid quiet             #添加这一句
[iyunv@lidefu etc]# id ldf
uid=500(ldf) gid=500(ldf) groups=500(ldf)
[ldf@lidefu ~]$ su root                      #尝试
[iyunv@lidefu ldf]#
  ·限定组(用户)使用最大的资源数




[iyunv@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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-408210-1-1.html 上篇帖子: 深入探讨Linux静态库与动态库的详解(转) 下篇帖子: Cygwin
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表