pam_access的使用

说明:
pam_access        提供logdaemon风格的登录控制

[root@station203 pam.d]# uname -a
Linux station203.example.com 2.6.18-53.el5 #1 SMP Wed Oct 10 16:34:02 EDT 2007 i686 i686 i386 GNU/Linux

首先先man一下再说。
[root@station203 security]# man pam_access
...........省略..............


可以看到这个模块的默认配置文件是:/etc/security/access.conf
要使用自定义的另外一个配置文件,可以使用参数accessfile,格式:accessfile=/path/to/file.conf
配置文件格式是:
    权限:用户:来源
权限:+代表允许,-代表拒绝
用户:可以是用户名、组名以及诸如user@host格式的用户名,ALL表示任何人,具有多个值时,可以用空格分开。
来源::可以是tty名称(本地登录时)、主机名、域名(以”.”开始),主机ip地址,网络号(以”.”结束)。ALL表示任何主机

,LOCAL表示本地登录。EXCEPT操作符来表示除了…之外。



修改好配置文件,就要设置启用这个模块。
修改/etc/pam.d/login或者其他配置文件,对相应的功能进行验证。


[root@station203 pam.d]# vim /etc/security/access.conf
- : abc : ALL
## 在最后添加这样一句,拒绝来自如何地方的abc用户。

[root@station203 pam.d]# vim /etc/pam.d/login
account    required     pam_nologin.so
account    required     pam_access.so            ## 添加这样一句,login启用pam_access模块

OK,现在可以测试了。
[root@station203 pam.d]# useradd abc
[root@station203 pam.d]# passwd abc
Changing password for user abc.
New UNIX password:
BAD PASSWORD: it is too simplistic/systematic
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

来到试验机的本地测试。
输入abc用户,输入正确的密码。登陆界面闪一下,但是没有登陆成功。
用户root可以正常登陆


在远端,abc用putty,ssh到试验机,可以成功。这是因为ssh没有经过pam验证,只有login程序启用了pam_access模块。


[root@station203 pam.d]# vim /etc/security/access.conf
- : ALL EXCEPT abc : ALL                ## 除了root和abc用户,其他用户都不能登陆。

## 我有新建了两个用户aaa和bbb
现在到本机上用aaa和bbb登陆,输入正确密码。登陆失败。root登陆也失败。。(注意了)
用abc登陆,登陆成功。


[root@station203 pam.d]# tail /var/log/audit/audit.log             
[root@station203 pam.d]# tail /var/log/secure
## 查看pam相关的日志

[root@station203 security]# vim /etc/pam.d/login
account    required     pam_access.so accessfile=/etc/access.conf    ## 指定使用另外一个配置文件

[root@station203 security]# vim /etc/access.conf            ## 创建另外一个配置文件

- : root : ALL
    

测试:
root本地登录失败
aaa登陆成功


[root@station203 security]# vim /etc/pam.d/login                   ## 在设置配置文件字段的分隔符是@,默认是:
account    required     pam_access.so accessfile=/etc/access.conf fieldsep=@

## /etc/access.conf先不修改,测试。
## root本地登录可以登陆。


[root@station203 security]# vim /etc/access.conf            ## 把字段分割符换成@

- @ root @ ALL


测试:
root登陆失败


最后,如果要sshd也支持pam_access,需要:
[root@station203 pam.d]# vim /etc/pam.d/sshd                ## 添加下面的行
account    required     pam_access.so