nsswitch & pam:
nsswitch: name service switch名称服务解析
名称解析:用户名、组名、主机名、服务名、...
解析:根据已知的信息(key)查找某存储库,获取其它信息的过程;
存储:文件、SQL、NoSQL、LDAP、dns...
文件系统接口:系统调用
SQL:
NoSQL:
通用框架,承上启下
启下:用于与各种存储进行交互;
承上:提供统一的配置和调用接口;
实现:库的形式存在
/usr/lib64/libnss*,/lib64/libnss*
框架:libnss3.so(通用层接口)
驱动:libnss_files, libnss_db, libnss_dns, ...
为每种用到解析库的应用程序通过一个配置文件定义其配置:
/etc/nsswitch.conf
文件格式:
db: store1 store2 ...
每种存储中的根据查找键进行查找的结果状态:
STATUS => success | notfound | unavail| tryagain
Success:链接成功
Notfound:没有找到
Unavail:未连接(找到服务,但是服务链接不上)
Tryagain:重试
对应于每种状态结果的行为(action)
return | continue(返回|继续)
例子:
hosts: files nis [NOTFOUND=return] dns
阐述:对于hosts而言,首先查找的是files,如果files查找到的状态是success,就直接return,后续的nis与dns就不会查找,如果files的状态不是success,查找nis,nis没有发现的话,就直接返回
getent命令:(man getent)
getent - get entries from Name ServiceSwitch libraries从名称服务交换库中获取项
getent database [key ...]
例如:
[root@bogon~]# getent passwd root root:x:0:0:root:/root:/bin/bash [root@bogon~]# getent hosts 127.0.0.1 localhost localhost.localdomainlocalhost4 localhost4.localdomain4 127.0.0.1 localhost localhost.localdomainlocalhost6 localhost6.localdomain6 [root@bogon~]# getent hosts 127.0.0.1或者主机名localhost都会解析出
如果在/etc/nsswitch.conf中的
Hosts filesdns改成hostsdns这样就不会再去hosts文件中查找
还可以改变其默认的行为:
Vim/etc/nsswitch.conf
Hosts files[SUCCESS=continue] dns找到也不显示,
Hosts files[NOTFOUND=return] dns 找不到就返回,除非把hosts文件删除才能进行dns查找
pam:pluggable authentication modules
认证功能的通用框架;
实现:提供了与各种类型的存储进行交互的通用实现,以及多种辅助类的功能模块;
/lib64/security/*
配置文件:每个基于pam做认证的应用程序都需要有其专用的配置;
提供方式:
使用单个文件为多种应用提供配置:/etc/pam.conf
为每种应用提供一个专用配置文件:/etc/pam.d/APP_NAME(建议使用)
配置文件语法格式:
/etc/pam.conf
程序名称 类型 控制机制 使用模块 模块参数
appliction type control module-path module-arguments
/etc/pam.d/APP_NAME
类型 控制机制 使用模块 模块参数
type control module-path module-arguments
语法:
type:
auth:账号的认证和授权;
account:与账号管理相关的非认证类的功能;
password:用户修改密码时密码复杂度检查机制等功能;
session:用户获取到服务之前或使用服务完成之后需要进行一些附加的操作;
control:同一种type的多个检查之间如何进行组合;
有两种实现方式:
(1) 简单实现:使用一个关键词来定义;
(2) 详细实现:使用一个或多个“status=action”进行组合定义;
简单实现:
required:必须成功通过,否则,即为失败;无论成功还是失败,都需要参考同种type下的其它定义;
requiste:必须成功通过,否则,立即返回失败;成功时,还需要参考同种type下的其它定义;
sufficient:成功立即返回成功,失败时由同种type下其它模块确定;
optional:可选的;
include:调用其它配置文件中的同种type的相关定义;
详细实现:
[status1=action1,status2=action, ...]
status:检查结果的返回状态;
action:采取的行为,比如ok, done, die, bad, ignore,...
module-path:模块文件路径;
相对路径:相对于/lib64/security/目录;
绝对路径:
module-arguments:模块的专用参数;
模块示例:
pam_shells.so:检查用户的shell程序;
配置文件:/etc/pam.d/sshd
在auth栈的第一行添加:
auth required pam_shells.so
注释/etc/pam.d/sshd下面的auth required pam_shells.so
useradd –s /bin/cshdocker(让用户使用csh登录系统)
echo docker | passwd--stdin docker
远程使用docker可以正常登录系统
取消注释/etc/pam.d/sshd下面的auth required pam_shells.so
远程使用docker登录系统,登录不上去(但是密码并没有出错,)此时可以修改配置文件,注销pam_shells.so的认证,便可以登录
pam_limits:系统资源分配及控制的模块;
在用户级别实现对其可使用的资源的限制,例如可打开的最大文件数、可同时运行的最大进程数等等;
定义或修改资源限制:
(1)ulimit命令;
(2)配置文件:
/etc/security/limits.conf
/etc/security/limits.d/*.conf
配置文件格式:
<domain> <type> <item> <value>
<domain>:应用于哪些对象;
username:一个用户名
@group:组内的所有用户(或者一个组名)
*:通配符,设定默认值;
<type>:限制的类型
soft
hard
-:即是soft亦是hard
<item>:限制的资源
nofile - max number of openfile descriptors
nproc - max number ofprocesses
ulimit命令:用于临时调整资源的软硬限制或查看,仅root用户能执行;
ulimit [options] [限制]
选项:
-S 使用 `soft‘(软)资源限制
-H 使用 `hard‘(硬)资源限制
-a 所有当前限制都被报告
-b 套接字缓存尺寸
-c 创建的核文件的最大尺寸
-d 一个进程的数据区的最大尺寸
-e 最高的调度优先级(`nice‘)
-f 有 shell 及其子进程可以写的最大文件尺寸
-i 最多的可以挂起的信号数
-l 一个进程可以锁定的最大内存尺寸
-m 最大的内存进驻尺寸
-n 最多的打开的文件描述符个数
-p 管道缓冲区尺寸
-q POSIX 信息队列的最大字节数
-r 实时调度的最大优先级
-s 最大栈尺寸
-t 最大的CPU时间,以秒为单位
-u 最大用户进程数
-v 虚拟内存尺寸
-x 最大的锁数量
本文出自 “Touch Dream” 博客,请务必保留此出处http://xuelong.blog.51cto.com/10573089/1768561
原文地址:http://xuelong.blog.51cto.com/10573089/1768561