系统账号:Account Information 账号信息
Authentication 认证信息
名称服务(Name Server) 认证方式 /etc/passwd nis ldap
libc (系统库):实现用户进行名称解析的时候根据其编译的功能到某一个数据库里实现名称解析,在软件编译的时候已经固化,不能改变。
NSS(Name Service Switch): 在进行名称解析的时候可以方便的转换。
获取登录用户信息库:
[root@mail pam.d]# getent passwd
主配置文件:/etc/nsswitch.conf
passwd: files nis
shadow: files nis
group: files nis //** 验证次序很重要
查找的时候四个返回值:SUCCESS:service ok,find name 执行成功,找到对应名字;
NOTFOUND:service ok,name not found 文件存在,但找不到名字
UNAVAIL: service not available 服务不存在
TRYAGAIN:临时性错误
自定义返回值,以改变默认动作:
passwd: files [NOTFOUND = return ] nis
认证:判定来访者确实为所声称的那个人的一种机制。kerberos ,window域等等。
PAM(Pluggable Authentication Modules) 可插入式认证模块 提供集中的,共享模块代码的机制,动态可配置。但PAM仅仅是一个框架,提供能够认证的功能,并不提供怎样去认证。
可以调用用来进行身份验证的模块:
[root@mail pam.d]# cd /lib/security/
常见模块:
pam_unix.so :实现本地用户在登录的时候通过/etc/passwd来进行认证的一个文件。
选项:nullok 允许使用空密码
try_first_pass 在提示用户输密码之前系统先尝试用第一次登录时输入的密码登录。
shadow 要匹配的机制是基于shadow的一种机制。
md5 用户的密码在保存的时候是基于MD5散列加密算法保存。
pam_permit 直接允许通过 ,不做额外动作
pam_deny 直接拒绝 OTHER的默认动作
pam_cracklib.so 根据词典来检查用户密码是否符合安全性要求
选项:minlen 最短长度
difok 如果不一样时怎么处理
dcredit=N 要有多少位数字
ucredit=N 大写字母要多少位
lcredit=N 小写字母要多少位
ocredit=N 其他字符多少位
retry=N 密码失败后尝试的次数
pam_passwdqc.so:类似于pam_cracklib.so,但不针对于字典来检查。
pam_tally.so 记录每个用户登录的时间和次数,启用此模块后系统会在/var/log下生成一个
faillog文件,可以用faillog -u lucy 来查看用户登录失败数
pam_shells 检查用户默认登录shell是否合法shell,即检查用户的shell是否在/etc/shells中。
pam_securetty 限制管理员只能从特定终端登录,在/etc/securetty登录。
pam_nologin.so 限定非管理员账号在/etc/nologin(存在即可)存在的情况下不允许登录
pam_listfile 定义某一个服务可以基于额外的配置文件来决定用户是否登录。
仅允许mygrp组中的用户才能登录:
编辑system-auth-rc文件,在第一行之后添加:
auth required pam.listfile.so item=group sense=allow file=/etc/security/allowgroup
建立/etc/security/allowgroup文件
mygrp
即可,保存退出。
pam_rootok.so 在su中比较常见,当管理员切换到其他普通用户时不用输密码。
pam_limits 资源限定,默认情况下接受/etc/security/limits.conf配置文件中的定义。
同时,在/etc/security/limits.d/目录下单个以*.conf结尾的文件也可作为其配置文件。
语法:
# - core - limits the core file size (KB)
# - data - max data size (KB)
# - fsize - maximum filesize (KB)
# - memlock - max locked-in-memory address space (KB)
# - nofile - max number of open files
# - rss - max resident set size (KB)
# - stack - max stack size (KB)
# - cpu - max CPU time (MIN)
# - nproc - max number of processes
# - as - address space limit
# - maxlogins - max number of logins for this user
# - maxsyslogins - max number of logins on the system
# - priority - the priority to run user process with
# - locks - max number of file locks the user can hold
# - sigpending - max number of pending signals
# - msgqueue - max memory used by POSIX message queues (bytes)
# - nice - max nice priority allowed to raise to
# - rtprio - max realtime priority
定义每个服务所调用的模块:
[root@mail security]# cd /etc/pam.d/
other 当做任何一个程序的默认规则
system-auth-ac 集中定义了最常见的认证机制
配置文件语法:
Service type control module-path module-argument
Service 服务名称,当服务写在/etc/pam.conf 中的时候需要指明,很少使用了。
type 类型(管理组),几种场景 auth accout password session
auth 认证用户的时候使用到的场景
accout 实现用户授权
password 控制密码改变
session 打开 ,关闭和记录会话工程
每种场景可以出现多次。
control 当用户被规则匹配到的时候的处理机制,(直接返回/往后检查)(当同一种场景出
现多次时所做出的决策),五种简单控制条件
required 必须通过,即使失败后边检查继续进行
requisite 必须通过,如果失败停止检查
sufficient 如果某一个测试条件检查通过,那么后面将不再检查,直接通过;如
果失败,忽略这个测试条件,后面继续检查。
optional 可选
include 包含其他规则(服务),文件嵌套,可以互相调用,如:login
auth include system-auth
高级控制条件: [value1=action1 value2=action2 ....]
六种动作:ok ,done,bad,die,ignore,reset
ok 模块通过,继续检查
done 模块通过,向应用程序返回最终结果
bad 测试失败,继续检查
die 测试结果失败,向应用程序返回失败结果
ignore 无论检查结果成功或者失败都忽略
reset 重置所有值
Example:login
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
module-path 模块路径
module-argument 选择的模块所使用的参数
使用PAM认证过程:
system-auth-ac服务:
auth required pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_succeed_if.so uid < 500 quiet
account required pam_permit.so
password requisite pam_cracklib.so try_first_pass retry=3
password sufficient pam_unix.so md5 shadow nis nullok try_first_pass use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so