PAM(Pluggable Authentication Modules)即可插拔式认证模块,它是一种高效而且灵活便利的用户级别的认证方式,它也是当前Linux服务器普遍使用的认证方式
1.部署PAM认证的必要性我们知道一台Linux服务器会开许多不同的服务,这些服务中很多服务本身并没有认证功能,只是把认证交给用户名及密码。如果这样的话,那么所有服务都用Linux系统的用户名及密码来认证,对于服务器来说是很危险的。比如一台服务器开着FTP、SMTP、SSH等服务,那么新建一个用户默认就享有对以上的服务的操作权限,那么如果一个用户的帐号密码泄露会涉及到多个服务。因此,不管是PC还是服务器在类Linux系统中部署PAM认证是非常必要的。通过新型的认证模块——PAM就能解决认证方面的不足,加强Linux系统安全。
2.PAM认证的方式
PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so。PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证。通常情况下,在Linux系统安装完成后会在/etc/pam.d路径下为我们提供了一些默认的配置文件。另外,大家要知道/lib/security目录是认证文件的默认存放位置。/etc/pam.d路径下的默认配置文件是我们进行PAM配置的模板,通常情况下我们根据安全需要对于进行修改或者添加相应的项即可。
3.PAM认证的构成
客观地说PAM认证还是比较复杂的,简单地讲它包括四种常见认证类型(module type):即auth认证管理、account用户管理、password密码认证管理、session会话管理。以/etc/pam.d/login为例,我们可以看到它的配置文件,区域1中的auth、account、password、session等都是认证类型。区域2中的required、 requisite 、sufficient 、optional是认证的流程控制。最后面的区域3就是认证的PAM文件了。
八、常用的PAM服务模块
下面是Linux提供的PAM模块列表(只是其中一部分):
模块文件 模块功能描述 相关配置文件
pam_access 提供logdaemon风格的登录控制 /etc/security/access.conf
pam_chroot 提供类似chroot命令的功能
pam_cracklib 对密码的强度进行一定的检查库文件libcrack和字典文件 /usr/lib/cracklib_dict
pam_deny 总是无条件地使认证失败
pam_env 设置或取消环境变量 /etc/security/pam_env.conf
pam_filter 对输入输出流进行过滤 filters
pam_ftp.so 对匿名ftp用户进行认证
pam_group 当用户在指定的终端上请求指定的服务时赋予该用户相应的组权限 /etc/security/group.conf
pam_issue 在提示用户输入用户名之前显示/etc/issue文件的内容 /etc/issue
pam_krb4 对用户密码进行Kerberos认证 相应的Kerberos库文件
pam_lastlog 在用户登录成功后显示关于用户上次登录的信息,并维护/var/log/lastlog文件 /var/log/lastlog
pam_limits 限制用户会话所能使用的系统资源 /etc/security/limits.conf
pam_listfile 根据指定的某个文件决定是否允许或禁止提供服务 例如/etc/ftpusers
pam_mail 检查用户的邮箱中是否有新邮件 /var/spool/mail/xxxx
pam_mkhomedir 为用户建立主目录 /etc/skel/
pam_motd 显示/etc/motd文件的内容 /etc/motd
pam_nologin 根据/etc/nologin文件的存在与否来决定用户认证是否成功 /etc/nologin
pam_permit 总是无条件地使认证成功
pam_pwdb 作为pam_unix_xxxx模块的一个替代使用Password Database通用接口进行认证 /etc/pwdb.conf
pam_radius 提供远程身份验证拨入用户服务(RADIUS)的认证
pam_rhosts_auth 利用文件~/.rhosts和 /etc/hosts.equiv对用户进行认证。
pam_rootok 检查用户是否为超级用户,如果是超级用户则无条件地通过认证。
pam_securetty 提供标准的Unix securetty检查 /etc/securetty
pam_time 提供基于时间的控制,比如限制用户只能在某个时间段内才能登录 /etc/security/time.conf
pam_unix 提供标准的Unix认证pam_userdb 利用Berkeley DB数据库来检查Berkeley DB用户/密码 /etc/passwd和 /etc/shadow
pam_warn 利用syslog( )记录一条告警信息
pam_wheel 只允许wheel组的用户有超级用户的存取权限
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表示调用子服务文件
Module-type:
auth 检查用户和密码,分配权限
account 检查账号是否过期,是否有权登录
session 从用户登录成功到退出的会话控制
password 控制用户改密码的过程
control-flag:
required 要求矣须通过,否则结束退出
requisite 如果不通过还可继续向下认证,后面有一通过即可。
sufficient 通过则不需要向下认证
optional 可选项