nsswitch:name service switch

       通用框架,与各种类型存储进行交互的公共实现;

       实现:/usr/lib64/libnss*,/lib64/libnss*

              框架:libnss

              驱动:libnss_files-

              Linux自学笔记——nsswitch and pam_第1张图片

       为每一种用到解析库的应用通过配置定义其位置:

              /etc/nsswitch.conf

                     db: store1   store2  …

              Linux自学笔记——nsswitch and pam_第2张图片

                     例如:

                     passwd:files

                     hosts:files   dns

              解析库:

                     文件、关系型数据管理系统(mysql)、NIS、LDAP、DNS

              每种存储中的查找结果状态:

                     STATUS => success | not found | unavail | tryagain

              对应与每种状态结果的行为(action):

                     return | continue

              例子:

                     hosts: files nis  [NOTFOUND=return]  dns

              getent命令:

                     getent  DATABASE  [key]

pam:pluggable authentication module

       认证库:存储

              多种类型的存储:文件、关系型数据管理系统、LDAP、NIS

       pam:通用框架,提供了与各种类型存储进行交互的公共实现、以及多种辅助类的功能:

              /lib64/security/*

       配置文件:为各种调用了pam的应用提供其专用配置:

              通用配置文件:/etc/pam.conf,可为每一种调用pam完成认证功能的应用程序提供配置;

              专用配置文件:/etc/pam.d/*,通常专用于为某种特定的应用程序提供配置;

             

              通常每个应用会使用一个单独的配置文件;

       配置文件格式:

              通用配置文件:

                     application    type control          module-path module-arguments

              专用配置文件:

                     type      control         module-path   module-arguments

                     Linux自学笔记——nsswitch and pam_第3张图片

              type:检查的功能类别

                     auth:账号的认证和授权;

                     account:与账号管理相关的非认证类的功能;

                     password:用户修改密码时密码复杂度检查机制;

                     session:用户获取到服务之前或使用服务完成之后需要进行一些附加性操作;

              control:同一种功能的多个检查之间如何进行组合;

                     两种实现机制:

1)      简单实现:使用一个关键词来定义

2)      详细实现:使用一个或多个“status=action”

简单实现:

required:必须通过检查;否则,即为失败;无论成功还是失败,都需继续由后续同种功能的其它模块进行检查;

requisite:一票否决;检测失败就直接返回失败;检测成功,由后续同种功能的其它模块进行检查;

sufficient:一票通过,检测成功就直接返回成功;检测失败,则由后续同种功能的其它模块进行检查;

optional:可选的,参考性控制机制;

include;调用其他配置文件中的同种功能的检测机制;

                     详细实现:

                            [status1=action1,status2=action2,…]

                                   status:返回状态

                                   action:采取的行为,比如ok,done,die,bad,ignore,…

              module-path:模块文件路径;

                     相对路径:相对于/lib64/security/目录而言;

                     绝对路径:可位于任何可访问路径;

              Module-arguments:模块的专用参数;

模块示例:

       pam_limits.so:资源限制

              在用户级别实现对其可用的资源的限制,例如可打开的文件数量,可运行的进程数量,可用的内存空间;

             

              修改限制的实现方式:

1)      ulimits命令;

2)      配置文件:/etc/security/limits.conf,/etc/security/limits.d/*.conf

Linux自学笔记——nsswitch and pam_第4张图片

配置文件:每行的定义:

           

           :应用于哪些对象

                  username

                  @group

                  *:所有用户

           :限制的类型

                  soft:软限制,普通用户自己可以修改;

                  hard:硬限制,由root用户设定,且通过kernel强制生效;

                  -:软硬使用相同限制;

           :限制的资源类型

                  nofile:所能够同时打开的最大文件数量,默认为1024;

                  nproc:所能够同时运行的进程的最大数量;默认为1024;

ulimit命令;用于调整软限制:

    -n   最多的打开的文件描述符个数;

    -u    最大的用户进程数

    -S    使用‘soft’(软)资源限制

    -H   使用‘hard’(硬)资源限制