plugins authentication modules 插入式验证模块
查 vsftpd 调用了哪些动态链接库
[user1@b155 pam.d]$ ldd /usr/sbin/vsftpd linux-gate.so.1 => (0x00173000) libssl.so.10 => /usr/lib/libssl.so.10 (0x00174000) libwrap.so.0 => /lib/libwrap.so.0 (0x00911000) libnsl.so.1 => /lib/libnsl.so.1 (0x001dd000) libpam.so.0 => /lib/libpam.so.0 (0x00c69000) libcap.so.2 => /lib/libcap.so.2 (0x00ba7000) libdl.so.2 => /lib/libdl.so.2 (0x0013b000) …………
查看帮助
[user1@b155 pam.d]$ man -k pam_ /$LIB/security/pam_krb5/pam_krb5_storetmp [pam_krb5_storetmp] (8) - Temporary file helper group.conf [group] (5) - configuration file for the pam_group module limits.conf [limits] (5) - configuration file for the pam_limits module pam-panel-icon (1) - A notification area indicator of pam_timestamp status pam_access (8) - PAM module for logdaemon style login access control pam_ck_connector (8) - Register session with ConsoleKit pam_console (8) - determine user owning the system console pam_console_apply (8) - set or revoke permissions for users at the system console pam_cracklib (8) - PAM module to check the password against dictionary words pam_debug (8) - PAM module to debug the PAM stack pam_deny (8) - The locking-out PAM module pam_echo (8) - PAM module for printing text messages pam_ecryptfs (8) - PAM module for eCryptfs …………
example:
vim /etc/pam.d/sshd
#%PAM-1.0 auth required pam_sepermit.so auth include password-auth account required pam_nologin.so account include password-auth password include password-auth # pam_selinux.so close should be the first session rule session required pam_selinux.so close session required pam_loginuid.so # pam_selinux.so open should only be followed by sessions to be executed in the user context session required pam_selinux.so open env_params session optional pam_keyinit.so force revoke session include password-auth
PAM 文件测试
测试分为4组 ,并不是所有的模块都支持这四组测试
auth 认证用户是否为此用户 验证
account 用于给用户授权 统计
password 控制密码修改
session 打开、断开并记录会话 会话
检测顺序是由上往下逐条检测,例:
过程:输入用户名、验证用户是否有权限、验证密码、记录会话
PAM 文件控制值:
required 必须通过测试,如果失败了仍然继续后续测试
requisite 与required类似,与它不同的是,requisite如果失败了立即停止测试
sufficient 如果通过测试,立即返回成功状态,如果失败忽略测试结果,继续测试
optional 测试是否通过都不作出反应,无关紧要
include 从包含的配置文件中放回测试结果
---------------------------------------------------------------
example 1 : pam_securetty
限制root用户登录到指定终端,但并不会影响到其它用户
1、编辑文件 /etc/pam.d/login ,修改
auth required pam_securetty.so debug
[root@b155 pam.d]# vim login #%PAM-1.0 #auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so #注释这一行 auth required pam_securetty.so debug #添加这一行 ,注意 这里是加了 debug 参数 auth include system-auth account required pam_nologin.so account include system-auth password include system-auth
2、编辑 /etc/securetty 文件 ,root只能在文件中有的终端登录 ,#为注释,注释掉某一行,root将不能从那个终端登录
vim /etc/securetty [user1@b155 pam.d]$ sudo vim /etc/securetty [sudo] password for user1: console vc/1 vc/2 vc/3 vc/4 vc/5 vc/6 vc/7 vc/8 vc/9 vc/10 vc/11 tty1 …………
example 2 : pam_nologin
Prevent non-root users from login 阻止非root用户来登录
模块参数: file 文件名
1、编辑文件
[root@bogon pam.d]# vim login …… auth required pam_nologin.so file=/etc/mynologin 添加这一行
2、添加空文件 /etc/mynologin 之后, 所有的用户将不能登录
example 3 : pam_listfile
pam_listfile - deny or allow services based on an arbitrary file 基于一个文件拒绝或允许服务
模块参数:
item 用户名 、终端名、 远程主机名
sense allow or deny
file 文件列表名
onerr 当遭遇错误的时候,比如这个file不存在,或者给定的参数错误,如果 onerr=succeed 就反回成功的结果 ,如果 onerr=fail 就返回一个错误或服务错误 的结果
以ssh服务为例
sense=allow
[root@bogon pam.d]# vim sshd auth required pam_listfile.so item=user sense=allow file=/etc/pam_file_list onerr=succeed
添加空文件 /etc/pam_file_list
此时,不在这个文件列表中的用户都无法远程登陆
login as: xianglou Access denied xianglou@192.168.0.101's password: Access denied xianglou@192.168.0.101's password:
sense=deny
[root@bogon pam.d]# vim sshd auth required pam_listfile.so item=user sense=deny file=/etc/pam_file_list onerr=succeed此时,只有在这个文件列表中的用户才无法登陆,因为文件为空,所以所有用户都是可以登陆的
login as: xianglou Access denied xianglou@192.168.0.101's password: Last login: Wed May 9 07:04:22 2012 from 192.168.0.100 [xianglou@bogon ~]$
example 4 : pam_cracklib
pam_cracklib - PAM module to check the password against dictionary words 检测密码基于字典的单词,也就是检测密码是否为弱密码
模块选项参数 :
debug 记录消息到系统日志
retry=N 输入错误允许的次数 默认为1
difok=N 默认值为5 ,新密码中间至少有N个字符必须在老密码之间不存在
minlen=N 最小长度
example 5 : pam_tally2
pam_tally2 - The login counter (tallying) module 登陆计数模块
This module maintains a count of attempted accesses, can reset count on success, can deny access if too many attempts fail.
模块参数选项:
onerr = succeed or fail 如果有些事情特别奇怪的时候 比如说有些文件打不开的时候
file 这个文件保存计数
认证选项
deny=n 超过这个值的时候,拒绝访问
lock_time=n 在尝试失败以后,锁定为多少秒 内不能登陆
unlock_time=n 在尝试失败以后,多少秒以后才可以访问,与上面相同
magic_root 如果这个选项调用了,用户uid为0,计数器将不增加
even_deny_root root 帐户变得不可用
root_unlock_time=n root帐户锁定多少秒后才可以登陆
对资源做强制限制
这个模块设置系统资源值限制,通过用户获取资源,用户ID为0也受影响,默认的限制从 /etc/security/limits.conf 这个文件中提取,还有从 /etc/security/limits.d/ 这个目录中的 *.conf 的文件,这个模块不能被多线程的应用程序调用
用在 session 这个测试环节中
模块选项参数:
配置文件语法为: /etc/security/limits.conf
<domain> <type> <item> <value>
domain: 用户名 或 组名 ,组名前加 @ @group
type: hard or soft or -(包括两者)
item:
data
maximum data size (KB)
fsize
maximum filesize (KB)
memlock
maximum locked-in-memory address space (KB)
nofile
maximum number of open files 最多能打开多少个文件
rss
maximum resident set size (KB) (Ignored in Linux 2.4.30 and higher)
stack
maximum stack size (KB)
cpu
maximum CPU time (minutes)
nproc
maximum number of processes 最大打开多少个执行程序
as
address space limit (KB)
maxlogins
maximum number of logins for this user except for this with uid=0
maxsyslogins
maximum number of all logins on system
配置用户 user1 只能打开5个应用程序 登录3个终端
#@student - maxlogins 4 user1 - maxlogins 3 user1 - nproc 5
超过了限定值,提示 资源暂时不可用
[user1@b155 ~]$ ps -aux | grep user1 Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ root 13532 1.8 0.6 11396 3408 ? S 14:58 0:00 sshd: user1 [priv] user1 13537 0.0 0.2 11396 1492 ? S 14:58 0:00 sshd: user1@pts/1 user1 13538 0.5 0.3 6716 1588 pts/1 Ss 14:58 0:00 -bash user1 13561 3.0 0.5 12740 2708 pts/1 T 14:58 0:00 vim user1 13562 2.0 0.2 6524 1028 pts/1 R+ 14:58 0:00 ps -aux user1 13563 0.0 0.1 5952 732 pts/1 S+ 14:58 0:00 grep user1 [1]+ Stopped vim [user1@b155 ~]$ vim & [2] 13565 [user1@b155 ~]$ vim & [3] 13566 [2]+ Stopped vim [user1@b155 ~]$ ps -aux | grep user1 -bash: fork: retry: 资源暂时不可用
example 7 : pam_echo
打印消息
pam_echo.so file=/path/filename
可用在所有测试环节
////////////
登陆时打印消息
auth optional pam_echo.so file=/etc/test.txt login as: user1 Access denied user1@202.202.2.155's password: ************************************************************************* * * * * * * * * * * * * * * * * ************************************************************************* Last login: Thu May 10 15:17:49 2012 from 202.202.4.44 [user1@b155 ~]$
example 8 : pam_exec
调用一个外部程序
//////////////
vim sshd auth optional pam_exec.so mkdir /tmp/aa 登录 login as: user1 Access denied user1@202.202.2.155's password: 命令执行失败 mkdir failed: exit code 2 Last login: Thu May 10 15:18:17 2012 from 202.202.4.44 [user1@b155 ~]$
example 8 : pam_lastlog
该模块显示最后一次登陆的日期
pam_lastlog.so [debug] [silent] [never] [nodate] [nohost] [noterm] [nowtmp] [noupdate] [showfailed]
日志文件 /var/log/lastlog ,查看该文件 指令 lastlog
[root@b155 ~]# ls /var/log/lastlog /var/log/lastlog [root@b155 ~]# lastlog Username Port From Latest root pts/0 202.202.4.44 Thu May 10 16:25:01 +0800 2012 bin **Never logged in** daemon **Never logged in** adm **Never logged in** lp **Never logged in** sync **Never logged in** shutdown **Never logged in**…………
该模块只用在 session 测试环节中
example 9 : pam_localuser
只能使用本地用户登陆 ,不能使用 比例LDAP远程用户之类的
example 10 : pam_rootok 只允许root用户登陆
example 11 : pam_shells
这个模块检测有效的登陆shell
仅仅允许访问系统的时候,如果用户的shell是列在这个清单里面 /etc/shells , 同是检测这些文件 是不是明文的,是不是所有人都可写
未完