nsswitch:name service switch
通用框架,与各种类型存储进行交互的公共实现;
实现:/usr/lib64/libnss*,/lib64/libnss*
框架:libnss
驱动:libnss_files-
为每一种用到解析库的应用通过配置定义其位置:
/etc/nsswitch.conf
db: store1 store2 …
例如:
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
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
配置文件:每行的定义:
<domain> <type> <item> <value>
<domain>:应用于哪些对象
username
@group
*:所有用户
<type>:限制的类型
soft:软限制,普通用户自己可以修改;
hard:硬限制,由root用户设定,且通过kernel强制生效;
-:软硬使用相同限制;
<item>:限制的资源类型
nofile:所能够同时打开的最大文件数量,默认为1024;
nproc:所能够同时运行的进程的最大数量;默认为1024;
ulimit命令;用于调整软限制:
-n 最多的打开的文件描述符个数;
-u 最大的用户进程数
-S 使用‘soft’(软)资源限制
-H 使用‘hard’(硬)资源限制