一、nss(network service switch網絡服務轉換)
authentication(認證,決定使用者的使用者名和密碼是否能通過檢驗)
authorization(授權,決定使用者是否能通路某服務)
audition(審計)
username-->UID
groupname-->GID
http-->80port
FQDN-->IP(hosts檔案,DNS,mysql,NIS(networkinformation service),LDAP)
指令route,iptables,netstat,這些指令如果不加-n選項,則會解析主機名及端口
應用程式app内置login程式,如果将認證的所有機制都内置到app裡,那麼隻認證這一個功能将會使得app程式變得非常臃腫,維護不便,為簡化引入中間層(獨立出來作為架構),如:app-->nsswitch-->resolv_lib
#vim /etc/nsswitch.conf(可以為衆多的名稱解析機制提供名稱解析庫,到不同的倉庫中查找,就需要不同的庫檔案支援)
passwd: files
shadow: files
hosts: files dns
netgroup: nisplus
#services: nisplus [NOTFOUND=return] files(NOTFOUND若換為UNAVAIL,則是服務不可用,才到files中查找,nis服務在就是nis說了算;其中,SUCCESS(表示serviceok,found name),NOTFOUND(表示service ok,name not found),UNAVAIL(表示service notavailable),TRYAGAIN(表示temporary service failure))
#ls /usr/lib | grep libnss(這些庫檔案才真正實作解析過程)
libnss_db.so
libnss_dns.so
libnss_files.so
libnss_ldap.so
libnss_nisplus.so
注:linux系統中mingetty僅提供虛拟終端,login程式提供輸入賬号密碼的界面
#vim /etc/nssswitch.conf(在小系統中添加下列三行,再複制相應庫檔案/usr/lib/libnss.files.so即可完成名稱解析)
passwd: files
shadow: files
group: files
#man getent(get entries from administrative database)
#getent passwd
#getent shadow
#getent hosts
#getent passwd root(僅擷取某一特定條目)
二、pam(pluggable authentication module可插入認證子產品)
名稱解析和認證(兩套各自獨立運作的機制,在某些應用中有關系,如linux登入認證借助于名稱解析服務,很多的程式在認證時并不借助于名稱解析服務)
名稱解析(隻告知到哪找)
認證(将輸入的密碼轉為md5特征碼,和檔案中事先儲存的比較,查驗是否一緻,這個過程是認證)
root-->nsswitch.conf-->passwd: files
‘123456’-->nssswitch.conf-->shadow: files
auth:123456-->md5(salt)-->compare(認證本身也可不借助名稱解析服務,僅linux(login)登入認證借助;authentication認證有多種機制,某次認證僅使用一種(md5,mysql,ldap,nis,kerberos))
app-->PAM-->authentication(PAM認證架構,引入中間層思想)
#ls /lib/security/*
pam_unix.so(比對檔案,files)
pam_ldap.so
pam_krb5.so
pam_winbind.so(在win的AD域中找,activedirectory)
pam_mysql.so(得手動安裝)
#ls /etc/pam.d/*(定義支援幾種認證機制,前一種機制通過後是否再繼續第二種機制)
login
passwd
system-auth-ac
功能(以下四種并非每項都要有,在多數服務為保險起見,至少提供前兩種auth和account):
auth(使用者輸入的賬号密碼是否比對,認證過程隻看auth開頭的行)
account(稽核使用者賬号是否仍然有效,是否過期或被鎖定#passwd -l USERNAME)
password(當使用者修改密碼時,查驗使用者改密碼的動作是否被允許,并與規則比較是否符合密碼複雜性要求)
session(定義真正工作過程的相關屬性,如僅允許使用20分鐘)
#vim /etc/pam.conf(此檔案redhat中沒有,這是總配置檔案,可将/etc/pam.d/*目錄下的所有檔案内容整理到此檔案中,格式如下)
service type control module-path module-arguments
#vim /etc/pam.d/login(/etc/pam.d/SERVICE,檔案名通常與服務名相同,且必須要小寫,格式如下)
type control module-path module-arguments
crontrol(控制同一類型有多個時,每行之間如何建立關系,有如下幾種):
required(必要條件,無論它通過還是不通過,若後面同組中還有其它條目繼續檢查,它通過了起不到決定作用)
requisite(必要條件,有一票否決權,若不通過則不過,若通過後面同組中有則繼續檢查)
sufficient(充分條件,它隻參與投贊成票,通過則直接傳回應用程式,不過繼續檢查)
optional(可選的,有無均可,ignore)
include(将權力給其它檔案,由其它檔案決定,例如/etc/pam.d/login檔案中有一行auth include system-auth表示将system-auth檔案中auth開頭的行包含進來)
module-path(預設到/lib[64]/下找,也可寫絕對路徑)
module-arguments(定義子產品工作的不同方式,如nullok,shadow,md5)
#vim /etc/pam.d/system-auth-ac(此檔案的軟連結為/etc/pam.d/system-auth)
auth required pam_env.so
auth sufficient pam_unix.so nulloktry_first_pass
auth requisite pam_succeed_if.souid >= 500 quiet
auth required pam_deny.so
注:1、2若過,則直接通過;1、3、4若過,則最終通過
#vim /etc/pam.d/other(此檔案定義預設規則,先使用與服務名相同的檔案中定義的規則,若最後沒有比對的,将使用此檔案)
子產品/lib/security:
1、pam_unix.so(traditionalpassword authentication,pam出現之前,login的認證是通過glibc的标準庫實作的,pam_unix.so隻是将此功能抽離出來放在pam中實作了而已)
nullok(如果空也ok)
shadow(讀寫都以shadow方式)
md5(預設加密方式)
try_first_pass(之前輸過密碼,現在又要認證,則嘗試使用之前輸過的密碼)
use_first_pass(之前輸過密碼,現在又要誰,直接使用之前輸的密碼)
2、pam_permit.so(允許通路)
3、pam_deny.so(拒絕通路,通常用于/etc/pam.d/other中)
4、pam_cracklib.so(網際網路以破壞為目的攻擊别人稱駭客crack;通過字典和規則(大小寫字母,數字,其它字元)檢查密碼)
minlen=N(最短長度)
difok=N(密碼與此前是否相同)
dcredit=N(至少要包含幾個數字digit)
ucredit=N(包含幾個大寫字母upper case)
lcredit=N(包含幾個不寫字母lower case)
ocredit=N(包含幾個其它字元othercharacters)
retry=N(最多嘗試多少次)
例:
password requisite pam_cracklib.so try_first_pass retry=3
password sufficient pam_unix.so md5shadow nullok try_first_pass use_authtok(use_authok表示使用上一行檢查并通過的密碼,若未通過這行就不設定)
5、pam_shells.so(限制使用者登入時使用/etc/shells中的安全shell,其它shell不允許)
6、pam_securetty.so(限制管理者登入到特殊的裝置;/etc/securetty此檔案中有root使用者登入時能使用的tty,除此之外其它任何終端都登入不了,若将此檔案中的tty2删除,則通過tty2就登入不上系統)
例:auth [user_unknown=ignore success=ok ignore=ignore default=bad]pam_securetty.so
auth include system-auth
7、pam_listfile.so(到某個檔案中驗證使用者賬号是否合法,可獨立定義一個檔案限制哪一類使用者能登入,哪一類使用者不能登入,此子產品應用于vsftpd服務中ftpusers檔案中的使用者)
item=[tty|user|rhost|ruser|group|shell](根據什麼檢查)
sense=[allow|deny](出現在檔案中的使用者是允許還是拒絕)
file=/path/filename
onerr=[succeed|fail](一旦出現故障,如檔案不存在或邏輯錯誤,是succeed還是fail)
例:auth required pam_listfile.soitem=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
舉例:僅在規定組中的使用者才能登陸系統
#cp /etc/pam.d/system-auth-ac /etc/pam.d/system-auth-ac.bak
#vim /etc/pam.d/system-auth-ac(在auth中插入一行,如下)
auth required pam_env.so(設定使用者環境變量)
auth required pam_listfile.so item=group sense=allow file=/etc/pam_allowgroups
#vim /etc/pam_allowgroups
root
allowgrp
#groupadd allowgrp
#usermod -a -G allowgrp fedora(将允許的登入系統的使用者加入到這個組中)
在不同終端測試
注:fedora和ubuntu系統是不能使用root直接登入系統的,要想使用root直接登入,隻需找到對應的pam檔案将auth一行注釋即可
8、pam_rootok.so(管理者切到其它使用者直接通過)
例:#vim /etc/pam.d/su
auth sufficient pam_rootok.so
auth include system-auth
9、pam_limits.so(在一次使用者會話裡,能被使用的資源限定,root也受此限定)
#vim /etc/security/limits.conf(此子產品的配置檔案,格式如下)
<domain> <type> <item> <value>
domain(表示對誰生效,USER,@GROUP_NAME,*)
type(soft limits or hardlimits)
item(對哪一種資源限制,nofile(maxnumber of open files)所能打開的最多檔案個數,nproc(max number of processes)使用者所能運作的最多程序個數,rss所能使用的最大實際記憶體集,as線性位址空間限制,cpu最大CPU時間機關MIN)
value(值的上限)
例如:
* soft core 0
@student - maxlogins 4
注:普通使用者隻能調自己的軟限制,指令#ulimit
#ulimit -n [LIMIT](對nofile限制,Themaximum number of open file descriptors (most systems do notallow this value to be set))
#ulimit -u [LIMIT](對nproc限制,Themaximum number of processes available to a single user)
#ulimit -a(All current limits are reported)
core file size (blocks, -c) 0
scheduling priority (-e) 0
pending signals (-i) 4096
max locked memory (kbytes, -l) 64
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
max user processes (-u) 4096
10、pam_env.so(set/unsetenvironment variables,根據/etc/security/pam_env.conf為使用者設定環境變量)
11、pam_wheel.so(only permitroot access to members of group wheel,限定哪些使用者可以su到root,為加強系統安全可以啟用此項)
#cat /etc/group | grep wheel(FreeBSD系統一般都定義了僅允許wheel組中的使用者可以su到root)
12、pam_succeed_if.so(test accountcharacteristics,可限制>500的賬号登入,而<500且>0的賬号不能登入)
13、pam_time.so(timecontroled access)
舉例:在fedora系統中設定允許root登入
$su - root
#vim /etc/pam.d/gdm(注釋一行,如下)
#auth required pam_succeed_if.so user!=root quiet
#vim /etc/pam.d/gdm-password(注釋一行,如下)
附圖:
<a href="http://s3.51cto.com/wyfs02/M02/75/84/wKiom1Y7CJKSfFZkAAEW4elKgyM995.jpg" target="_blank"></a>
相關文檔參考:PAM-SAG,PAM-ADG,PAM-MWG(system administrator guide,application developers guide,modulewriters guide)
本文轉自 chaijowin 51CTO部落格,原文連結:http://blog.51cto.com/jowin/1710047,如需轉載請自行聯系原作者