PAM
程序员文章站
2022-03-12 07:57:09
...
PAM
—-Pluggable Authentication Modules — 可插入认证模块
PAM是 Sun公司于1995 年开发的一种与认证相关的通用框架机制,关注如何为服务验证用户的API通过提供一些动太链接库和一套统一的API将系统提供的服务和该服务的认证方式分开
PAM认证原理PAM认证一般遵循这样的顺序: Service(服务)→PAM(配置文件)→pam_*.so
- PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认文件(位于/lib/security下)进行安全认证
PAM认证机制
当用户以某一账号进行/usr/bin/sudo 程序时,sudo 会联系PAM模块,PAM模块会搜寻sudo程序的PAM相关设定配置, 查看sudo的相关模块进行命令的验证,将验证结果回传给程序,而程序会根据PAM回传的结果执行下一个动作
相关文件:
模块文件目录 /lib64/security/*.so
环境相关设置目录:/etc/security
主配置文件 :/etc/pam.conf
应用专用配置目录:/etc/pam.d
/etc/pam.d/ 与 /etc/pam.conf的优先级为 /etc/pam.d内的文件高于pam.conf的配置文件
配置文件内的格式
/etc/pam.conf 格式
application type control module-path arguments
/etc/pam.d/* 格式
type control module-path arguments
配置文件pam.conf因为没有特别的标明使用到哪个程序,所以我标上程序名称,而pam.d是只针对某一程序软件的,文件名已经指明。
application:
应用软件名称,如 su sudo ssh 等等
type:
类型指的是模块类型如 (auth account session ...)
control:
PAM定义使用的模块成功与失败该如何执行下一部操作
module-path
用来指明模块对应的模块文件路径名
Arguments
用来传递给该模块的参数
类型:type
Auth:
账号的认证和授权
Account
与账号管理相关的非认证类的功能,对用户进行限制
Password
用户修改密码复杂度检查等功能
session
用户获取到服务之前或使用服务完成之后需要进行一些附加的操作
- 加 type
表示因为缺失而不能加载的模块将不记录到系统日志,对那些不总是安装在系统上的模块有用
控制:Control的几种格式
control有简单和复杂两种,
简单的:
required
表示本模块必须返回成功才能通过,如果不成功则继续动行接下来的规则,等全部运行完再返回执行失败的结果给应用程序
requisite:
表示模块必须返回成历才能通过,一旦返回失败,将不再执行同一个type的模块,直接将控制权返回给应用程序
sufficient
表明本模块返回成功则通过身份认证的要求,不必再执行同一type的模块,如果不成功可忽略,继续执行下一条
optional
表明模块是可选的,它的成功与否不对认证起关键作用,返回值一般是被忽略的
include
调用其它配置文件中定义的规则信息
复杂的,如: 【status1=action1 status=action2 ...】
* status: 检查结果的返回状态 action:采取的行为
action:
ok :模块通过,继续检查
done :模块通过,返回最后结果
bad :结果失败,继续检查
die :结果失败,返回失败结果
ignore :结果忽略,不影响最后的结果
reset :忽略已经得到的结果
module-path: 模块路径
相对路径:
/lib64/security 目录下的模块可使用相对路径 如: pam_shells.so 、 pam_limits.so
绝对路径:
/etc/security/*.conf
Arguments
用来传递给该模块的参数
Note:PAM配置文件一旦修改或创建,将马上生效
事例
1. 使用pam_shells模块进行用户的有效su切换账号
模块:pam_shells.so 功能: 检查/etc/shells已有的shell 如果配置文件内有的就让其登陆,如果没有就不允许
首先,查找到su在pam.d的文档进行编辑
[root@CentOS6 pam.d]#vim su
1 #%PAM-1.0
2 auth required pam_shells.so 我们在第一行添加,因为如果违反规则无需其它操作
3 auth sufficient pam_rootok.so 其它的选择默认不动
4 # Uncomment the following line to implicitly trust users in t
he "wheel" group.
5 #auth sufficient pam_wheel.so trust use_uid
6 # Uncomment the following line to require a user to be in the
"wheel" group.
7 #auth required pam_wheel.so use_uid
8 auth include system-auth
9 account sufficient pam_succeed_if.so uid = 0 use
_uid quiet
10 account include system-auth
11 password include system-auth
12 session include system-auth
13 session optional pam_xauth.so
接下来查看下/etc/shells里有哪些支持shell 然后创建一个不支持shell的测试用户
useradd -s /bin/csh testuser
echo "testuser" |passwd --stdin testuser
testuser:x:501:501::/home/testuser:/bin/zsh
接下来测试
[root@CentOS6 pam.d]#su - testuser
Password:
su: incorrect password su 无法切换到指定用户,并不是密码错误。
[root@CentOS6 pam.d]#
我们删除之前加进到/etc/pam.d/su 的第一条规则之后测试下结果
[root@CentOS6 pam.d]#su - testuser
[testuser@CentOS6 ~]$ 成功切换
2.使用PAM进行limits,使用的模块儿 pam_limits.so
limits 限额有个两种方式
1. ulimit 命令 也是可以设置限额功能, 但无法进行保存的,因为是执行在内存中。
ulimit
-a 显示所有ulimit 参数信息
-n 最多的打开的文件描述符个数
-u 最大用户进程数
-S 使用soft(软)资源限制
-H 使用hard (硬)资源限制
2.limits 限制的配置文件限额
配置文件: /etc/security/limits.conf 或 /etc/security/limits.d/*.conf
cat /etc/security/limits.conf
# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain> <type> <item> <value> 文档已经给出了参数信息,也给了一定的事例
#
#Where:
#<domain> can be: 域的定义为:用户名称、@组名称、
# - a user name 用户名称
# - a group name, with @group syntax 组名称
# - the wildcard *, for default entry *表示所有用户
# - the wildcard %, can be also used with %group syntax, %表示后使用的组
# for maxlogin limit
#
#<type> can have the two values:
# - "soft" for enforcing the soft limits
# - "hard" for enforcing hard limits
#
#<item> 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 file descriptors
# - 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 (KB)
# - 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 values: [-20, 19]
# - rtprio - max realtime priority
#
#<domain> <type> <item> <value> 这块给出的事例...
#
#* soft core 0
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
#@student - maxlogins 4
# End of file
[[email protected] security]#
当使用到web服务的时候,有时候apache如果是默认的限额的话那么有时候用户访问量过大,限额就要提
高,所以可以从这里进行配置
推荐阅读
-
VSFTP服务报错,pam_unix(vsftpd:auth): authenticatio,pam_unix(vsftpd:auth): check pass; user unknown pam_
-
Linux通过PAM限制用户登录失败次数教程
-
Backdoor on Pam module pam_unix.so 记录linux root密码
-
实现基于pam认证的vsftpd
-
PAM认证
-
centos 6 安装vsftpd与PAM虚拟用户的方法
-
vsftpd如何配置虚拟用户:PAM + PgSQL + FreeBSD-4
-
Centos7/Active Directory authentication using nss-pam-ldapd
-
配置pam_tally.so导致的su故障
-
security/pam_appl.h:没有那个文件或目录