Linux-PAM 认证 模块

Pluggable Authentication Modules for Linux 可插拨认证模块当用户访问服务器,服务程序将请求发送到PAM 模块,PAM 模块根据服务名称在/etc/pam.d 目录下选择一个对应的服务文件,最后根据服务文件的内容选择具体的PAM 模块进行处理。通过ldd 查看服务程序在编译时是否使用了libpam.so,决定服务程序是否支持PAM 认证。
具体的pam 文件放在/lib/security 目录下,服务文件放在/etc/pam.d 目录下
PAM 服务文件格式 eg:
auth required pam_security.so
auth required pam_stack.so
service=system-auth  service 表示调用子服务文件
PAM服务文件格式
Module-type:
auth 检查用户和密码,分配权限
account 检查账号是否过期,是否有权登录
session 从用户登录成功到退出的会话控制
password 控制用户改密码的过程
control-flag:
required 要求必须通过,否则结束退出
requisite 如果不通过还可继续向下认证,后面有一通过即可。
sufficient 通过则不需要向下认证
optional 可选项
常用PAM 服务文件
login -------/etc/pam.d/login
ipop3d -------/etc/pam.d/pop
vsftpd -------/etc/pam.d/ftp(编译安装)或 /etc/pam.d/vsftpd(rpm 安装)
sshd -------/etc/pam.d/sshd
su -------/etc/pam.d/su
imap -------/etc/pam.d/imap
/lib/security 目录下,各个pam 模块的作用,可参考/usr/share/doc/pam-0.99.3.0 下的帮助文件。
相同类型Module-type 组成一个堆栈。(认证堆栈)
常用PAM 模块
pam_access.so 控制访问者地址与账号名称
pam_listfile.so 控制访问者的账号名称或登录位置
pam_limits.so 控制为用户分配的资源
pam_rootok.so 对管理员(uid=0)无条件允许通过
pam_userdb.so 设定独立用户账号数据库认证
tty 终端设备
/usr/share/doc/pam-0.77/txts 下面有各个认证模块的作用说明
#more README.pam_securetty
测试一下 #touch /etc/nologin #ssh
oracle@192.168.0.99怎么也登陆不上 rm –f /etc/nologin 就可以了
pam_access.so 模块的使用
―――控制访问sshd 服务的主机和用户
1.修改需使用这个模块的服务文件,如
sshd: /etc/pam.d/sshd 添加 account required pam_access.so
2.修改模块的配置文件
/etc/security/access.conf
- : redhat : ALL EXCEPT 192.168.0. (格式)
3.测试
ssh
redhat@192.168.0.22
sshredhat@127.0.0.1
pam_access.so 根据主机、IP、用户、拒绝或允许访问。
pam_listfile.so 的应用( 比pam_access.so 更加详细控制 )
1.首先查看它的帮助文件,看它的具体格式,参数如何
#less  /usr/share/doc/pam-0.99.3.0/txts/     
# more README.pam_listfile
Item       user,tty,group 说明列表文件中的内容.
sense   allow,deny 拒绝或允许文件中的用户file 指定一个文件,内容根据item 项来添加.
onerr    succeed,fail 当模块本身产生错误时,返回的值,如无法打开file 指定的文件,一般设为succeed.
2.将模块应用到sshd 服务
将上面添加的pam_access.so 清掉,然后在/etc/pam.d/sshd 中添加(第一行)
auth required pam_listfile.so item=user sense=deny file=/etc/denyuser nerr=succeed
注意添加的位置顺序,否则看不到效果
3.创建编缉列表文件
#echo “redhat”>/etc/denyuser
4.测试
#ssh -l redhat 192.168.0.22 失败
#ssh -l ** 192.168.0.22 成功
#w 显示已登录的用户及最近的一次操作
pam_limits.so 的应用
1.查看帮助文件,确认它的配置文件位置,参数模式
#less  /usr/share/doc/pam-0.99.3.0/txt/  README.pam_limits
<domain>   <type>   <item>   <value>
<domain> 用户名或组名
<type> soft 软限制 hard 硬限制(不能达到的)
<item> 限制的内容,fsize 文件大小,nproc 最大进程数,maxlogins 用户登录次数
2.将模块应用到sshd 服务,修改服务文件
#vi /etc/pam.d/sshd 添加
session required pam_limits.so
session 控制用户进程的登录次数,文件大小,通过控制用户的会话进程来限制用户使用的资源
3.编缉pam_limits.so 的配置文件   修改模块的配置文件 vi /etc/security/limits.conf 添加以下的内容
redhat hard maxlogins 2    限制redhat 登录到sshd 服务的次数。
4.测试
#ssh -l redhat 192.168.0.22 第1 个
#ssh -l redhat 192.168.0.22 第2 个
表示同时最多可以有两个redhat
用户登录pam_rootok.so 的应用
#chfn 或chfn oracle 改变用户的finger 信息     more /etc/pam.d/chfn
普通用户使用这个命令修改信息时,需要输入密码才能使用,而root 用户则不需要。
分析:
#more /etc/pam.d/chfn
第一行为auth sufficient pam_rootok.so因为chfn 的pam 服务文件的第一行应用了pam_rootok.so模块,所以当root 用户使用chfn 时不需验证,不需要再往下,直接通过。
pam_userdb.so 模块需要一个db 数据库储存用户信息,具体如何使用可参考前面的vsftpd 虚拟用户。在使用PAM 模块时,注意参考README.pam 帮助。
#W查看登录的用户数
#wget 是下载东西,后面跟的是下载的地址。
./configure; make; make install       ---./configure –h(查看帮助)