天天看點

Linux運維 第三階段 (十三)nss&pam

一、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,如需轉載請自行聯系原作者