Pam模块
Linux系统中的Pam模块为可热插拔的认证模块(*.so)
1、配置文件
# ls /etc/pam.d/
atd other subscription-manager
authconfig passwd subscription-manager-gui
authconfig-gtk password-auth sudo
authconfig-tui password-auth-ac sudo-i
chfn polkit-1 su-l
chsh poweroff system-auth
config-util ppp system-auth-ac
crond reboot system-config-authentication
cups remote system-config-date
cvs rhn_register system-config-kdump
dovecot run_init system-config-keyboard
eject runuser system-config-language
fingerprint-auth runuser-l system-config-network
fingerprint-auth-ac selinux-polgengui system-config-network-cmd
gdm setup system-config-selinux
gdm-autologin sfcb system-config-users
gdm-fingerprint smartcard-auth vmware-authd
gdm-password smartcard-auth-ac vsftpd
gnome-screensaver smtp vsftpd_user
halt smtp.postfix wireshark
ksu squid xlock
liveinst sshd xserver
login ssh-keycat
newrole su
其中system-auth和password-auth配置文件是RHEL6实现用户名验证机制配置文件,大多数服务的配置将都会调用它们。
2、模块,如果是32为系统则路径是/lib/security/,如果是64为系统则在/lib64/security/目录下
# ls /lib64/security/
pam_access.so pam_gnome_keyring.so pam_namespace.so pam_succeed_if.so
pam_cap.so pam_group.so pam_nologin.so pam_tally2.so
pam_chroot.so pam_issue.so pam_oddjob_mkhomedir.so pam_time.so
pam_ck_connector.so pam_keyinit.so pam_passwdqc.so pam_timestamp.so
pam_console.so pam_krb5 pam_permit.so pam_tty_audit.so
pam_cracklib.so pam_krb5afs.so pam_postgresok.so pam_umask.so
pam_debug.so pam_krb5.so pam_pwhistory.so pam_unix_acct.so
pam_deny.so pam_lastlog.so pam_rhosts.so pam_unix_auth.so
pam_echo.so pam_limits.so pam_rootok.so pam_unix_passwd.so
pam_env.so pam_listfile.so pam_securetty.so pam_unix_session.so
pam_exec.so pam_localuser.so pam_selinux_permit.so pam_unix.so
pam_faildelay.so pam_loginuid.so pam_selinux.so pam_userdb.so
pam_faillock.so pam_mail.so pam_sepermit.so pam_warn.so
pam_filter pam_mkhomedir.so pam_shells.so pam_wheel.so
pam_filter.so pam_motd.so pam_smbpass.so pam_winbind.so
pam_fprintd.so pam_mysql.la pam_sss.so pam_xauth.so
pam_ftp.so pam_mysql.so pam_stress.so
3、验证阶段
分四个验证管理阶段:不同的阶段完成整个用户登录到登录成功再到退出登录之前整个过程的管理,同一个阶段可以有多个模块来共同完成管理,但是这些模块都是依次从上往下的顺序进行,四个阶段必须是从auth-->account-->password--->session的顺序进行。每个阶段代表的意思如下:
(1)auth 验证授权阶段,验证用户是否存在,对应的密码是否正确
(2)account 验证帐号阶段,验证用户是否有效,是否被禁止登录或者是否被允许登录,帐号是否过期
(3)password 密码阶段,用户约束密码修改的时候策略以及和密码相关的任何操作
(4)session 会话阶段,用来约束用户成功登录系统之后的一切操作。
控制标记:
(1)required 必要条件,该模块必须通过验证,如果验证失败不会马上返回失败的结果,而是等同一个阶段后续的模块判断完成之后才返回失败的结果。
(2)requisite 必要条件,该模块必须通过验证,如果验证失败马上返回失败的结果,不会继续验证同一个阶段后续的模块。
(3)sufficient 充要条件,只要该条件成立,而且该条件前面的必要条件模块也成立了,那么马上返回成功结果,无需再继续验证同一个阶段后续的模块,如果该条件的模块验证失败,它就会变成可选条件,不影响整个阶段的验证,会继续完成后续的判断。
(4)optional 可选条件,不影响判断结果的条件
(5)include 包含指定的配置文件(相当于把对应的配置文件的同一个阶段的所有选项加载该行)
4、示例
例子1、禁止所有普通用户登录本地系统
(1)首先判断一下登录系统的过程涉及到的配置文件
/bin/login ---> /etc/pam.d/login
(2)搜索需要用到的模块
# find /usr/share/man -iname "pam_*" | grep login
/usr/share/man/man8/pam_loginuid.8.gz
/usr/share/man/man8/pam_nologin.8.gz
此时我们可以看到禁用应该是使用pam_nologin模块,所以通过man文件查看此模块的用法
# man pma_nologin
(3)查看到man文件是需要在login文件中添加一行pam_nologin.so并且需要自己创建nologin文件
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth include system-auth
account required pam_nologin.so
account include system-auth
password include system-auth
然后再创建nologin
# touch /etc/nologin
(4)认证,测试发现除了root可以登录之外,其他普通账户无法登录系统。
例子2、限制普通账户只能在上班时间通过ssh登录系统。
同样的利用上面的步骤方法进行配置
(1)涉及到的配置文件
/etc/pam.d/sshd
(2)涉及到的模块
[root@vpn ~]# find /usr/share/man -iname "*pam_*" |grep time
/usr/share/man/man8/pam_timestamp_check.8.gz
/usr/share/man/man8/pam_time.8.gz
/usr/share/man/man8/pam_timestamp.8.gz
可以通过查看man文档,是pam_time是符合我们的需求,并且得知pam_time的使用方法
# man pam_time
............(省略其他代码)
DESCRIPTION
The pam_time PAM module does not authenticate the user, but instead it
restricts access to a system and or specific applications at various times
of the day and on specific days or over various terminal lines. This
module can be configured to deny access to (individual) users based on
their name, the time of day, the day of week, the service they are
applying for and their terminal from which they are making their request.
By default rules for time/port access are taken from config file
/etc/security/time.conf.
If Linux PAM is compiled with audit support the module will report when it
denies access.
EXAMPLES
#%PAM-1.0
#
# apply pam_time accounting to login requests
#
login account required pam_time.so
..............
通man知道需要配置/etc/security/time.conf和在/etc/pam.d/ssh中添加account required pam_time.so
(3)配置/etc/pam.d/ssh
# vim /etc/pam.d/sshd
#%PAM-1.0
auth required pam_sepermit.so
auth include password-auth
account required pam_nologin.so
account required pam_time.so
account include password-auth
..............
(4)配置/etc/security/time.conf
# vim /etc/security/time.conf
在里面添加一行
sshd;*;abc;Wk0800-1800 & !Wd0000-2400
此代码表示普通账户abc可以在工作时间早上8点到下午18点通过ssh登录系统的任何一个安全终端。
例子3、通过pam_tally2进行配置凡是通过ssh登录系统密码错误3次则锁定5分钟
(1)配置/etc/pam.d/sshd
# vim /etc/pam.d/sshd
#%PAM-1.0
auth required pam_sepermit.so
auth required pam_tally2.so deny=3 even_deny_root unlock_time=300
auth include password-auth
account required pam_nologin.so
(2)测试
通过ssh登录时3次错误密码则此账户被锁定,5分钟解锁。查看账户登录锁定情况
# pam_tally2
Login Failures Latest failure From
abc 3 10/19/13 22:50:31 192.168.232.1
可以手动进行解锁。
# pam_tally2 -u abc -r
Login Failures Latest failure From
abc 3 10/19/13 22:50:31 192.168.232.1
PAM禁止root用户登录,限制普通su切换:http://www.linuxdiyf.com/linux/11390.html
CentOS6.3下vsftpd通过pam认证实现虚拟用户文件共享:http://www.linuxdiyf.com/linux/10249.html
使用PAM集成OpenLDAP实现Linux统一管理系统用户:http://www.linuxdiyf.com/linux/10491.html
Linux-PAM认证方式:http://www.linuxdiyf.com/linux/5838.html
Linux使用PAM锁定多次登陆失败的用户:http://www.linuxdiyf.com/linux/2905.html