系统账号:Account Information  账号信息

             Authentication      认证信息    

名称服务(Name Server) 认证方式 /etc/passwd  nis  ldap

libc (系统库):实现用户进行名称解析的时候根据其编译的功能到某一个数据库里实现名称解析,在软件编译的时候已经固化,不能改变。

NSS(Name Service  Switch):  在进行名称解析的时候可以方便的转换。

获取登录用户信息库:

[root@mail pam.d]# getent passwd

主配置文件:/etc/nsswitch.conf

passwd:     files nis

shadow:     files nis

group:      files nis    //** 验证次序很重要

查找的时候四个返回值:SUCCESS:service ok,find name 执行成功,找到对应名字;

                     NOTFOUND:service ok,name not found 文件存在,但找不到名字

                      UNAVAIL: service not available 服务不存在

                      TRYAGAIN:临时性错误

自定义返回值,以改变默认动作:

passwd:     files [NOTFOUND = return ] nis

认证:判定来访者确实为所声称的那个人的一种机制。kerberos ,window域等等。

PAM(Pluggable  Authentication Modules) 可插入式认证模块  提供集中的,共享模块代码的机制,动态可配置。但PAM仅仅是一个框架,提供能够认证的功能,并不提供怎样去认证。

可以调用用来进行身份验证的模块:

[root@mail pam.d]# cd /lib/security/

基于PAM认证方式详解_第1张图片

常见模块:

pam_unix.so :实现本地用户在登录的时候通过/etc/passwd来进行认证的一个文件。

选项:nullok  允许使用空密码

      try_first_pass 在提示用户输密码之前系统先尝试用第一次登录时输入的密码登录。

      shadow  要匹配的机制是基于shadow的一种机制。

      md5     用户的密码在保存的时候是基于MD5散列加密算法保存。

pam_permit    直接允许通过 ,不做额外动作

pam_deny      直接拒绝 OTHER的默认动作

pam_cracklib.so 根据词典来检查用户密码是否符合安全性要求

选项:minlen  最短长度

      difok  如果不一样时怎么处理

      dcredit=N 要有多少位数字

      ucredit=N 大写字母要多少位

      lcredit=N 小写字母要多少位

      ocredit=N 其他字符多少位

      retry=N  密码失败后尝试的次数

pam_passwdqc.so:类似于pam_cracklib.so,但不针对于字典来检查。

pam_tally.so  记录每个用户登录的时间和次数,启用此模块后系统会在/var/log下生成一个 

            faillog文件,可以用faillog -u lucy 来查看用户登录失败数

pam_shells  检查用户默认登录shell是否合法shell,即检查用户的shell是否在/etc/shells中。

pam_securetty 限制管理员只能从特定终端登录,在/etc/securetty登录。

pam_nologin.so 限定非管理员账号在/etc/nologin(存在即可)存在的情况下不允许登录

pam_listfile  定义某一个服务可以基于额外的配置文件来决定用户是否登录。

仅允许mygrp组中的用户才能登录:

编辑system-auth-rc文件,在第一行之后添加:

auth  required  pam.listfile.so item=group sense=allow file=/etc/security/allowgroup

建立/etc/security/allowgroup文件

mygrp

即可,保存退出。

pam_rootok.so  在su中比较常见,当管理员切换到其他普通用户时不用输密码。

pam_limits     资源限定,默认情况下接受/etc/security/limits.conf配置文件中的定义。

同时,在/etc/security/limits.d/目录下单个以*.conf结尾的文件也可作为其配置文件。

语法:

: 限定哪些用户,可以是用户名也可以是NIS组,也可以是所有用户。

:软限制(soft)或者硬限制(hard)

:限定的项目

can be one of the following:

#        - core - limits the core file size (KB)

#        - data - max data size (KB)

#        - fsize - maximum filesize (KB)

#        - memlock - max locked-in-memory address space (KB)

#        - nofile - max number of open files

#        - rss - max resident set size (KB)

#        - stack - max stack size (KB)

#        - cpu - max CPU time (MIN)

#        - nproc - max number of processes

#        - as - address space limit

#        - maxlogins - max number of logins for this user

#        - maxsyslogins - max number of logins on the system

#        - priority - the priority to run user process with

#        - locks - max number of file locks the user can hold

#        - sigpending - max number of pending signals

#        - msgqueue - max memory used by POSIX message queues (bytes)

#        - nice - max nice priority allowed to raise to

#        - rtprio - max realtime priority

基于PAM认证方式详解_第2张图片

基于PAM认证方式详解_第3张图片

: 值。

定义每个服务所调用的模块:

[root@mail security]# cd /etc/pam.d/

基于PAM认证方式详解_第4张图片

other  当做任何一个程序的默认规则

system-auth-ac  集中定义了最常见的认证机制

配置文件语法:

Service  type  control  module-path module-argument

Service   服务名称,当服务写在/etc/pam.conf 中的时候需要指明,很少使用了。

type      类型(管理组),几种场景 auth  accout  password  session 

         auth  认证用户的时候使用到的场景

         accout  实现用户授权

         password  控制密码改变

         session  打开 ,关闭和记录会话工程

每种场景可以出现多次。

control   当用户被规则匹配到的时候的处理机制,(直接返回/往后检查)(当同一种场景出

         现多次时所做出的决策),五种简单控制条件

         required   必须通过,即使失败后边检查继续进行

         requisite   必须通过,如果失败停止检查

         sufficient  如果某一个测试条件检查通过,那么后面将不再检查,直接通过;如

                  果失败,忽略这个测试条件,后面继续检查。

         optional   可选

         include    包含其他规则(服务),文件嵌套,可以互相调用,如:login

auth       include      system-auth

        高级控制条件: [value1=action1  value2=action2 ....]

        六种动作:ok ,done,bad,die,ignore,reset

            ok  模块通过,继续检查

            done  模块通过,向应用程序返回最终结果

            bad  测试失败,继续检查

            die   测试结果失败,向应用程序返回失败结果

            ignore   无论检查结果成功或者失败都忽略

            reset    重置所有值

基于PAM认证方式详解_第5张图片

Example:login

auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so

module-path        模块路径

module-argument    选择的模块所使用的参数

使用PAM认证过程:

基于PAM认证方式详解_第6张图片

基于PAM认证方式详解_第7张图片

system-auth-ac服务:

auth        required      pam_env.so

auth        sufficient    pam_unix.so nullok try_first_pass

auth        requisite     pam_succeed_if.so uid >= 500 quiet

auth        required      pam_deny.so

account     required      pam_unix.so

account     sufficient    pam_succeed_if.so uid < 500 quiet

account     required      pam_permit.so

password    requisite     pam_cracklib.so try_first_pass retry=3

password    sufficient    pam_unix.so md5 shadow nis nullok try_first_pass use_authtok

password    required      pam_deny.so

session     optional      pam_keyinit.so revoke

session     required      pam_limits.so

session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid

session     required      pam_unix.so