---------------------------------

一、前言

二、环境

三、验证说明

四、执行流程

五、常用模块

六、案例配置

案例1.限定ssh登录

案例2.限制登录次数

案例3.限定组中的用户ssh

---------------------------------


一、前言

    PAM(Pluggable Authentication Modules )是由Sun提出的一种认证机制。它通过提供一些动态链接库和一套统一的API,将系统提供的服务 和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系 统中添加新的认证手段。PAM最初是集成在Solaris中,目前已移植到其它系统中,如RedHat、SunOS、HP-UX 9.0等。


二、环境

CentOS6.4 32位


三、验证说明

    每一个配置文件均有四栏:第一栏验证类型,第二栏验证控制标准,第三栏调用的PAM模块,第四栏为使用的参数。

module_type   control_flag   module_location   arguments

1.PAM验证类型(Type)

    * auth 验证使用者身份,提示输入账号和密码

    * account 基于用户表、时间或者密码有效期来决定是否允许访问

    * password 禁止用户反复尝试登录,在变更密码时进行密码复杂性控制

    * session 进行日志记录,或者限制用户登录的次数

2.PAM验证控制类型(Control Flag)

    * required 验证失败时仍然继续,但返回Fail(用户不会知道哪里失败)

    * requisite 验证失败则立即结束整个验证过程,返回Fail

    * sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续

    * optional 无论验证结果如何,均不会影响(通常用于session类型)

PAM认证_auth


PAM认证_PAM_02


PAM认证_auth_03


四、执行流程

 PAM认证_auth_04

五、PAM常用模块

1.pam_access认证模块

所属类型:account

功能描述:该模块提供基于登录用户名、客户ip/主机名、网络号以及登录终端号的访问控制。缺省的,该模块的配置文件是/etc/security/access.conf,可以使用accessfile参数指定自定义的配置文件。

2.pam_chroot认证模块

所属类型:account, session, auth

功能描述:该模块为一般用户提供一个虚根环境,该模块的配置文件是/etc/security/chroot.conf。

3.pam_filter认证模块

所属类型:account, session, auth,password

功能描述:该模块提供对用户和应用程序交互内容的访问控制功能,目前仅仅具有大小写转换功能。

4.pam_group认证模块

所属类型:auth

功能描述:该模块没有提供用户认证,而仅仅是授予该用户指定组的组权限。其缺省的配置文件为/etc/security/groups.conf。

5.pam_limits认证模块

所属类型:session

功能描述:该模块限制用户会话过程中系统资源的使用率。缺省的,该模块的配置文件是/etc/security/limits.conf,可以使用conf参数指定自定义的配置文件。

6.pam_listfile认证模块

所属类型:auth

功能描述:该模块提供根据某种规则来对用户进行访问控制的功能。通常把访问控制规则放在一个文件中,可以用file参数指定该文件。一般可以根据用户名、登录tty名、rhost、ruser、所属用户组、登录shell来对用户访问进行控制。

7.pam_nologin认证模块

所属类型: auth

功能描述:提供标准的unix nologin登录认证。如果/etc/nologin文件存在,则只有root用户可以登录,其他用户登录时只会得到/etc/nologin文件的内容。如果/etc/nologin不存在,则该模块没有作用。

8.pam_permit认证模块

所属类型: account; auth; password; session

功能描述:使用该模块具有很大的安全风险,该模块的唯一功能就是允许用户登录。

9.pam_rootok认证模块

所属类型: auth

功能描述:使用该模块具有很大的安全风险,该模块的唯一功能就是让uid为0的用户不需输入密码就可以登录系统。

10.pam_securetty认证模块

所属类型: auth

功能描述:该模块用来控制root用户只可以从包含在/etc/securetty文件中的终端登录系统。 

11.pam_shell认证模块

所属类型: auth

功能描述:如果用户的shell在/etc/shells中列出,则允许用户进行验证,如果/etc/passwd中没有指定shell,则缺省使用/bin/sh.

12.pam_userdb认证模块

所属类型: auth

功能描述:使用该模块允许您通过一个berkeley数据库来验证用户,假如您使用这种数据库来保存用户信息的话。


六、案例配置

案例1.限定ssh登录 

案例说明:允许root在任何地方ssh登录,只允许user1从192.168.2.50主机ssh登录,其他人不允许ssh。

# rpm -qa |grep pam
pam-1.1.1-13.el6.i686
# rpm -ql pam 

# vim /etc/security/access.conf 
 
 87 - : user1 : all EXCEPT 192.168.2.50
 88 - : all EXCEPT root user1 :all

# vim /etc/pam.d/sshd
7 session    required     pam_access.so       //第一个session

# tail -f /var/log/secure                     //查看日志信息
May 20 19:40:54 localhost sshd[4130]: Accepted password for user1 from 192.168.2.55 port 1223 ssh2
May 20 19:40:54 localhost sshd[4130]: pam_access(sshd:session): access denied for user `user1' from `192.168.2.55'
May 20 19:40:54 localhost sshd[4130]: pam_unix(sshd:session): session opened for user user1 by (uid=0)
May 20 19:40:54 localhost sshd[4130]: error: PAM: pam_open_session(): Permission denied


案例2.限制登录次数

案例说明:限定user1只能登录2次

# vim /etc/pam.d/sshd

7 session    required     pam_limits.so

# vim /etc/security/limits.conf

49 user1      hard    maxlogins    2


案例3.限定test组中的用户ssh,就是root也无法ssh登录.

# vim /etc/pam.d/sshd

7 session    required     pam_listfile.so  item=group sense=allow file=/etc/sshgroup  onerr=succeed

# groupadd  test
# gpasswd -a user1 test
Adding user user1 to group test
# groups user1         
user1 : user1 test
# vim /etc/sshgroup       //添加test组
test