1.PMA簡介html
PMA(Pluggable Authentication Module)是一個可插入式認證模塊,在Linux系統中,各類不一樣的應用程序都須要完成認證功能,爲了實現統一調配,把全部須要認證的功能作成一個模 塊(認證機制特別複雜的除外,如:https),當特定的程序須要完成認證功能的時候,就去調用PMA的認證模塊,這些模塊都位於系統中的/lib64 /security(/lib/security:32位操做系統)目錄下,但並非全部的模塊都是用來完成認證的,有些模塊是爲了實現PAM的某些高級 功能而存在的,其中PMA的認證庫是由glibc提供的,應用程序最終使用哪一個PMA模塊,取決於/etc/pma.d/*這個目錄下的定義.shell
PMA完成認證的過程:下面用passwd這個應用程序舉例吧!vim
一)首先用戶執行/usr/bin/passwd這個程序,並輸入密碼安全
二)passwd這個程序會去調用PMA模塊進行驗證bash
三)PMA會到/etc/pam.d/*下去尋找與passwd同名的配置文件session
四)當找到配置文件後,PMA會根據/etc/pam.d/passwd內的配置,調用PMA的模塊進行認證app
五)認證完成後,將驗證的結果返回給passwd這支程序ssh
六)最終,passwd會根據PAM的返回結果決定下一個執行動做(從新輸入密碼或驗證經過)ide
·在以上步驟中最重要的是第四步,咱們來詳細分析一下分析下第四步,pam是如何完成認證功能的,一樣,拿/etc/pam.d/passwd來舉例,首先來 /etc/pam.d/passswd的配置信息.ui
1
2
3
4
5
6
7
|
[root@lidefu ~]
# cat /etc/pam.d/passwd
#%PAM-1.0 <==PAM的版本號
auth include system-auth <==每一行都是一個驗證過程
account include system-auth
password substack system-auth
-password optional pam_gnome_keyring.so
驗證類別 驗證控制標誌 PAM的模塊與該模塊的參數
|
·第一個字段:驗證類別(Type)
驗證類別主要分爲以下四種,而且按順序依次向下驗證
·auth
auth是用來認證用戶的身份信息的,若是auth認證的時候須要用到多個模塊,就依次檢查各個模塊,這個模塊一般最終都是是須要密碼來檢驗的,因此這個模塊以後的下一個模塊是用來檢驗用戶身份的.若是賬號沒問題,就受權
·account
account大部分是用來檢查權限的,好比檢查帳戶和密碼是否過時等,若是你使用一個過時的帳戶或密碼就不容許驗證經過.若是有多個模塊,也依次檢查各個模塊.
·password
修改密碼須要用到的,若是用戶不修改密碼,幾乎用不到這個模塊.
·session
限定會話限制的,好比:vsftpd下午6點不容許訪問,那6點事後用戶再去訪問的話就會被限制,或內存 不足不容許訪問等,session就是限定這種類型的
·第二個字段:驗證控制標誌(control flag)
用於控制認證成功或失敗時要採起的行動,其中又分爲兩種control,一種是簡單control,一種是複雜 contorl
·簡單的control
·required
此驗證若是成功則帶有success的標誌,若是失敗則帶有failure的標誌,此驗證若是失敗了,就必定會 返回失敗的標誌,可是不會當即返回,而是等全部模塊驗證完成後才返回,因此它不論驗證成功或失敗 都會繼續向後驗證其餘的流程.
·requisite
若是驗證失敗則當即返回failure的標誌,並終止後續的驗證流程,若是驗證帶有success標誌,則繼續 後面的流程.
·sufficient
與requisite正好相反,此驗證若是成功則帶有success的標誌,並當即終止後續的流程,若是驗證帶有 failure的標誌,則繼續後面的流程.
·optional
optional參考意見,這個只是打醬油的....
·以上流程以下圖所示
·include
包含進來指定的其餘配置文件中的同名棧中的規則,並以之進行檢測.
·substack·
有點麻煩.無論他了...你也用不着
·PAM模塊路徑
·/etc/pam.d/*:每一個程序個別的PAM的配置文件;
·/lib/security/*:PAM模塊檔案的實際放置目錄;
·/etc/security/*:其餘PAM環境的配置文件;
·/usr/share/doc/pam-*/:詳細的PAM說明文件;
·PAM模塊分類
·pam_unix.so
傳統意義上的賬號和密碼認證機制,這個機制實現了標準C庫中基於讓用戶輸入賬號密碼並完成檢測 的認證過程
·pam_permit.so
直接經過,容許訪問,定義默認策略
·pam_deny.so
拒絕訪問,定義默認策略
·pam_cracklib.so
用來檢驗密碼的強度,包括設定的密碼是否在字典中,修改的密碼是否能和上次同樣,密碼至少包含多 少個數字字符,能夠輸入多少次錯誤密碼等,都是由這個模塊定義的
·pam_shells.so
檢查用戶登陸的shell是不是安全shell,也就是寫在 /etc/shells中的shell
·pam_securetty.so
限定管理員只能經過安全的tty登陸,/etc/securetty,tty就是傳統終端
·pam_listfile,這東西可牛逼了....
1
|
item=[tty|user|rhost|ruser|group|shell] sense=[allow|deny] file=/path/filename onerr=[succeed|fail] [apply=[user|@group]] [quiet]
|
·pam_rootok.so
管理員su到其餘用戶不用輸入密碼就是靠這個定義的
·pam_succeed_if.so
普通用戶su的時候不須要密碼
·pam_limits.so
資源限定打開文件數,使用進程數等等,對任何人都生效,/etc/security/limits 或/etc/security/limits.d/*
·pam_nologin.so
能夠限制通常用戶是否可以登入主機,當/etc/nologin這個檔案存在時,則全部通常使用者均沒法 再登入系統
練習:
·限制root用戶只能最多從tty2登陸,不能遠程使用sshd登陸
1
2
3
4
5
6
|
[root@lidefu etc]# vim /etc/pam.d/sshd #編輯這個文件
auth required pam_securetty.so #添加這一行
[root@lidefu ~]# cat /etc/securetty #編輯這個文件
console
tty1
tty2
|
·只有sshusers組的用戶能使用ssh遠程登陸
1
2
3
4
5
|
[root@lidefu etc]# groupadd sshusers #添加一個組
[root@lidefu etc]# vim /etc/pam.d/sshd #編輯遠程登陸的pam
auth required pam_listfile.so item=group sense=allow file=/etc/security/allow-groups #添加這一句
[root@lidefu etc]# vim /etc/security/allow-groups #編輯組文件,就是上面那個
sshusers #添加組
|
·管理員su的時候須要密碼
1
2
3
4
5
6
|
[root@lidefu etc]# vim /etc/pam.d/su #編輯這個文件
#auth sufficient pam_rootok.so #註釋這一項
[root@lidefu etc]# whoami
root
[root@lidefu etc]# su ldf
Password:
|
·普通用戶ldf,su的時候不用輸入密碼
1
2
3
4
5
6
|
[root@lidefu etc]# vim /etc/pam.d/su #編輯這個文件
3
auth sufficient pam_succeed_if.so uid =
500
use_uid quiet #添加這一句
[root@lidefu etc]# id ldf
uid=
500
(ldf) gid=
500
(ldf) groups=
500
(ldf)
[ldf@lidefu ~]$ su root #嘗試
[root@lidefu ldf]#
|
·限定組(用戶)使用最大的資源數
1
2
3
4
5
6
|
[root@lidefu etc]# vim /etc/security/limits.conf #這裏看限制的東西不少
@sshusers soft nofile
10000
#軟限制,打開文件數
10000
個
@sshusers hard nofile
10000
#硬限制,
@sshusers - data
10000
#軟硬都限制,使用數據大小
sshusers - nproc
10000
#軟硬都限制,進程數
上面帶@的是組,不帶的是用戶,使用命令limits能夠臨時調整
|
本文出自 「煙不離手」 博客,請務必保留此出處http://lidefu.blog.51cto.com/3429777/1388751