菜鸟学Linux 第069篇笔记 nsswitch, PAM



管理资源授权服务

Authentication (认证)

Authorization (授权)

Audition (审计)




FQDN --> IP   (名称解析库)

dns

/etc/hosts

mysql

nis (Network Information System)

ldap (LlightWeight Directory Access Protocol)  查询数据比mysql要快一个数据级

对查询数据量比较大的时候比较适用,写速度相对慢一些




nsswitch (Network Service Switch)

位于程序和名称解析方式中间位置,实现为程序提供多种解析方式的一个中转站,比如说

当一个程序当前使用/etc/asswd来查询用户的ID,但现在程序又想使用基于mysql来查询用户ID

,这样就需要重新编写代码让该程序支持基于mysql来进行查询用户的ID,而nsswitch则是用来简化程序在设计名称解析时所使用的代码,当程序需要使用名称解析时,直接向该nsswitch程序发送使用何种解析方式(如mysql),该程序则将其指向对应的解析方式(mysql)

这便为nsswitch的作用(个人见解)




配置文件(定义某种名称解析服务通过哪种手段实现)

/etc/nsswitch.conf

passwd: file

hostname: file dns


而上面所定义的库如file dns,在执行时其实是在调用相应的库文件实现名称解析的

/usr/lib

libnss_compat.so

libnss_db.so

libnss_dns.so

libnss_files.so

libnss_hesiod.so

libnss_ldap.so

libnss_nisplus.so

libnss_nis.so

libnssutil3.so

libnss_winbind.so

libnss_wins.so



查找对应服务返回结果

SUCCESS

NOTFOUND

UNAVAIL

TRYAGAIN




命令

getent (get entries from administrative database)

e.g. # getent hosts 

# getent passwd

# getent passwd root 




认证

和名称解析是两套独立运行的机制,此是用来比对用户输入的字符和某种认证机制所提供的是否一致,nsswitch只提供去哪里去找,而比对与用户所输入的用户名密码则是用认证来实现的, 认证本身也可以不用借助名称解析服务去查找用户存放的密码位置


验证密码

123456 --> md5,salt

passwd


用户认证过程

解析:root-->nsswitch.conf-->passwd:files

解析:'12345(password)' --> nsswitch.conf --> shadow:files

auth: 123456 --> md5(salt) --> compare




Authentication机制

md5:/etc/shadow

mysql

ldap

nis

Kerberos



PAM (类似nsswitch,只不过此程序是用来指定用户程序用哪里程序认证机制)

(Pluggable Authentication Modules)


库文件/lib/security

pam_*

pam_unix.so

[options: nullok shadow md5]

pam_unix.so use_authok

pam_sells.so

pam_securetty.so

pam_listfile

pam_rootok.so

pam_limits.so




配置文件

/etc/security/

/etc/pam.d/

type control module-path [module-arguments]


type

account

auth

password

session


control

required (不过,但继续向下检查)

requisite  (不过,不需要向下检查,过还需向下检查)

sufficient (过,则直接通过。 没通过不影响最终结果)

optional (可选)

include (权利移交给其它文件) [value=action]


action

ok

done

bad

die

ignore

reset


required [success=ok new_authok_reqd=ok ignore=ignore default=bad]

requisite [success=ok new_authtok_reqd=ok ignore=ignore default=die]

sufficient [success=done new_authtok_reqd=done default=ignore]

optional [success=ok new_authtok_reqd=ok default=ignore]




PAM 里边的每一个模块的详细配置说明,请参照 linux-PAM_SAG.pdf文档

SAG (System Administrators' Guide)  此文档可以直接百度到有官方网站