www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > > 嵌入式客棧
[導(dǎo)讀]PAM: 你是誰啊? 你的金光驚醒了石頭的酣夢! 2 1 總體描述 1.1 概述 Linux身份鑒別機制是保護操作系統(tǒng)安全的重要機制之一,是防止惡意用戶進入系統(tǒng)的一個重要環(huán)節(jié)。早期的身份鑒別機制就是傳統(tǒng)的UNIX身份鑒別機制,它采用口令加密并與原密碼進行對比的

 PAM: 你是誰?。?br>      你的金光驚醒了石頭的酣夢!

2

1

總體描述


1.1 概述

Linux身份鑒別機制是保護操作系統(tǒng)安全的重要機制之一,是防止惡意用戶進入系統(tǒng)的一個重要環(huán)節(jié)。早期的身份鑒別機制就是傳統(tǒng)的UNIX身份鑒別機制,它采用口令加密并與原密碼進行對比的方式來對用戶身份進行鑒別。但是這種加密方式過于單一,在一個服務(wù)中用戶的帳號密碼泄露會涉及到多個服務(wù)的安全性,所以為了增強系統(tǒng)的安全性,出現(xiàn)了許多其他的身份鑒別機制,如指紋認證、USB認證等。但是這樣導(dǎo)致了一個問題,為了應(yīng)用這些認證機制,就需要重新編寫并編譯應(yīng)用程序(如系統(tǒng)登陸服務(wù)login)。為了解決這個問題,1995Sun公司的Vipin Samar和 Charlie Lai提出了PAM(Pluggable Authentication Modules)身份鑒別機制,它采用模塊化設(shè)計和插件功能,使得系統(tǒng)在更改認證機制時不再需要修改應(yīng)用程序,極大的提高了認證機制的靈活性。本報告對Linux各用戶帳號的權(quán)限區(qū)別進行了分析,對傳統(tǒng)UNIX身份鑒別機制的實現(xiàn)過程進行了研究,重點對PAM身份鑒別機制的實現(xiàn)過程進行了研究與分析,最后通過一個具體的PAM策略演示場景實現(xiàn)了身份鑒別機制的執(zhí)行過程,研究結(jié)果也發(fā)現(xiàn)Linux身份鑒別機制是在Linux用戶態(tài)下實現(xiàn)的,并不涉及內(nèi)核的具體實現(xiàn)。


1.2 涉及到的源碼范圍

由于Linux身份鑒別機制是在用戶態(tài)下實現(xiàn),本報告涉及的源碼包括Linux-PAM-1.1.6,openpamLinux su命令的實現(xiàn)。具體范圍說明如下:

  • Linux-PAM-1.1.6/moudles/pam_access.c:登錄認證模塊的實現(xiàn)源碼。

  • Linux-PAM-1.1.6/libpam:PAM所用的頭文件。

  • openpam/lib/pam_acct_mgmt.c:賬號管理接口函數(shù)實現(xiàn)。

  • Linux su命令:Linux系統(tǒng)命令源碼包。



1.3 技術(shù)方案及原理

Linux身份鑒別機制就是對請求服務(wù)的用戶身份進行鑒別,并且賦予相應(yīng)的權(quán)限的過程。本文通過查閱資料,分析Linux系統(tǒng)中對各用戶帳號的管理及其權(quán)限分配,分析傳統(tǒng)的UNIX身份鑒別機制,以su命令的代碼實現(xiàn)來進行說明,著重分析PAM身份鑒別機制,并對其代碼實現(xiàn)來進行分析說明。


1.3.1 Linux中用戶賬號管理

在Linux系統(tǒng)中,系統(tǒng)設(shè)置了多個帳號和組來進行管理,每個帳號都具有不同的權(quán)限,例如超級用戶root就具有最大的權(quán)限,對所有的文件具有讀寫執(zhí)行的權(quán)限,但是普通用戶對某些文件只具有讀有時甚至連讀的權(quán)限都沒有。Linux操作系統(tǒng)并不是以帳號名稱來識別用戶的,而是以標識符UIDGID來辨別用戶的,這些帳號的信息都存放在/etc/passwd文件當(dāng)中,該文件中記錄的每個帳號信息是以行來表現(xiàn)的,如下所示:

root:x00root/root/bin/bash

每行是以7個字段來描述的,每個字段以冒號來進行分隔,其中對應(yīng)字段的依次解釋如下:

1. 帳號名稱:用來對應(yīng)UID。

2. 密碼:所有的用戶都有對該文件的訪問權(quán)限,為了防止密碼竊取,就將這個字段的密碼數(shù)據(jù)改放到/etc/shadow中了,所以這里顯示的是X。

3. UID:用戶標識符,表1-1列出了redhat系統(tǒng)中UID號的限制。

1-1 UID限制

Id范圍

該用戶ID特性

0(系統(tǒng)管理員)

當(dāng)UID0時,代表這個帳號是“系統(tǒng)管理員”!所以當(dāng)你要讓其他的帳號名稱也具有root權(quán)限時,將該帳號的UID改為0即可。一個系統(tǒng)上面的系統(tǒng)管理員不見得只有root.不過不建議有多個。

1~499(系統(tǒng)帳號)

保留給系統(tǒng)使用的ID,其實除了0之外,其他的UID權(quán)限與特性并沒有不一樣。默認500以下的數(shù)字讓給系統(tǒng)作為保留帳號只是一個習(xí)慣。199:由distributions自行創(chuàng)建的系統(tǒng)帳號;100499:若用戶有系統(tǒng)帳號需求時,可以使用的帳號UID。

500~65535

給一般用戶使用的



4. GID:用戶組標識符,具體信息存放在/etc/group中。

5. 用戶信息說明列:解釋這個帳號的意義。

6. 主文件夾:即用戶的主文件夾。

7. Shell:當(dāng)用戶登錄系統(tǒng)后就會取得一個shell來與系統(tǒng)的內(nèi)核通信以進行用戶的操作任務(wù)(一個shell可以用來替代成讓帳號無法取得shell環(huán)境的登錄操作/sbin/nologin)。

/etc/shadow中也是這樣的字段,具體字段的意義這里不再做詳細解釋,這個文件主要是為了增加系統(tǒng)安全性而另外設(shè)置用來存放用戶的密碼,只有root用戶才有權(quán)限訪問,但是為了安全性顯示的仍然是加密后的密碼。

系統(tǒng)是通過UID、GID來對不同的帳號進行區(qū)分的,但是系統(tǒng)中是如何對應(yīng)實現(xiàn)具體的權(quán)限設(shè)置的呢?這里就從文件的權(quán)限來進行說明。執(zhí)行ls -al命令后,結(jié)果如圖1-1所示。


 圖1-1 文件屬性

每行顯示內(nèi)容分為七列:第一列代表這個文件的類型與權(quán)限,第二列表示有多少文件名鏈接到這個節(jié)點,第三列表示這個文件的所有者的帳號,第四列表示這個文件的所屬用戶組,第五列表示這個文件的容量大小,默認單位為B,第六列為該文件的創(chuàng)建文件日期或者是最近的修改日期,第七列為該文件名。

第一列中總共有10個字符,這10個字符解釋如下

1. 第一個字符為[d],表示為目錄,為[-]則是文件,為[l]則是鏈接文件,為[b]則表示設(shè)備文件里面的可供存儲的接口設(shè)備,為[c]則表示設(shè)備文件里面的串行端口設(shè)備,比如鍵盤、鼠標等。

2. 接下來都是以三個字符為一組,一共有三組,且每組都是以“rwx”這樣的形式組合,其中[r]代表刻度,[w]代表可寫,[x]代表可執(zhí)行,如果沒有該權(quán)限則會用[-]來表示。第一組是文件所有者的權(quán)限,第二組為同組的權(quán)限,第三組為其他非本用戶組的權(quán)限。這樣就把文件的可讀屬性與不同用戶帳號的權(quán)限對應(yīng)起來了。



1.3.2 傳統(tǒng)的UNIX身份鑒別機制原理

傳統(tǒng)的UNIX身份鑒別即口令認證方式,它主要通過識別用戶的用戶名或者UID號獲取在/etc/shadow中存放的對應(yīng)用戶密碼密文等信息,然后獲取用戶輸入密碼并采用crypt()函數(shù)對獲得的輸入密碼進行加密,當(dāng)然加密方式是與原用戶密碼的加密方式是一致的,然后將這兩個密文進行比較,如果一致則通過驗證,如果不一致則拒絕賦予權(quán)限。接下來以登錄Linux系統(tǒng)為例,說明登錄過程中傳統(tǒng)UNIX認證方式對用戶帳號的鑒別過程。Linux用戶在登錄主機時會出現(xiàn)一個輸入賬號及密碼的界面,Linux會先找尋 /etc/passwd 里面是否有這個賬號,如果拒絕用戶登錄請求,如果有的話則將該賬號對應(yīng)的 UID 、GID、該賬號的主目錄與shell設(shè)定 一并讀出,接著就是將用戶輸入密碼進行加密,然后讀取/etc/shadow 中存放的密碼,將這個密碼與用戶輸入并加密的密碼進行核對,如果核對成功,則進入系統(tǒng)。

  Linux 提供getpwnam()來獲取用戶登錄的相關(guān)信息,返回的是一個passwd型的結(jié)構(gòu)體,該結(jié)構(gòu)體就包含了用戶帳號的各種信息,該結(jié)構(gòu)體如下所示。



1.3.3 PAM身份鑒別機制原理

PAM(Pluggable Authentication Modules)即可插拔驗證模塊,它是一個非常完善的身份驗證機制,它采用模塊化設(shè)計和插件功能,從而可以輕易的在應(yīng)用程序中插入新的鑒別模塊或者替換原來的組件,而不必對應(yīng)用程序做任何修改,從而使軟件的定制、維持和升級更加輕松。PAM 的易用性較強,它對上層屏蔽了鑒別的具體細節(jié),用戶不必詳細知道各種鑒別機制是如何實現(xiàn)的,它還實現(xiàn)了多鑒別機制的集成問題。


1.3.3.1 PAM框架

PAM 為了實現(xiàn)其插件功能和易用性,采取了分層設(shè)計思想。就是讓各鑒別模塊從應(yīng)用程序中獨立出來,然后通過 PAMAPI、 SPI作為兩者聯(lián)系的紐帶,這樣應(yīng)用程序就可以根據(jù)需要靈活地在其中插入所需要的鑒別功能模塊,從而真正實現(xiàn)了在認證和鑒別基礎(chǔ)上的隨需應(yīng)變。PAM框架如下圖所示:


其中的配置文件(etc/pam.d)是由系統(tǒng)管理員來設(shè)置的,用以制定認證策略。當(dāng)應(yīng)用程序調(diào)用 PAM API 時,應(yīng)用接口層按照 PAM 配置文件的定義來加載相應(yīng)的認證鑒別模塊,然后把請求(即從應(yīng)用程序那里得到的參數(shù))傳遞給底層的認證鑒別模塊,這時認證鑒別模塊就可以根據(jù)要求執(zhí)行具體的認證鑒別操作了。當(dāng)認證鑒別模塊執(zhí)行完相應(yīng)的操作后,再將結(jié)果返回給應(yīng)用接口層,然后由接口層根據(jù)配置的具體情況將來自認證鑒別模塊的應(yīng)答返回給應(yīng)用程序。

上面簡單描述了PAM的運作方式,下面對它的三個層次加以介紹:

1.最上層為應(yīng)用程序?qū)樱菏褂肞AM 機制的應(yīng)用程序(如login、su等),調(diào)用PAM接口庫的上層接口API來實現(xiàn)認證功能;

2.中間為應(yīng)用接口層:連接應(yīng)用程序和服務(wù)模塊的中間層,它根據(jù)配置文件中的設(shè)置加載相應(yīng)的服務(wù)模塊,將請求傳遞到具體的服務(wù)模塊,向應(yīng)用程序的開發(fā)者提供API使用各種鑒別模塊,向鑒別模塊的開發(fā)者提供SPI來掛載新的鑒別模塊;

3.最下層為服務(wù)模塊:服務(wù)模塊中都為動態(tài)鏈接庫,它給應(yīng)用程序提供具體的認證用戶服務(wù),應(yīng)用程序可以使用幾個服務(wù)模塊。PAM所支持的四種任務(wù)管理:account 類型表示賬戶管理,它執(zhí)行賬戶管理,它主要用來限制/允許用戶對某個服務(wù)的訪問時間,當(dāng)前有效的系統(tǒng)資源(最多可以有多少個用戶),限制用戶的位置(例如:root用戶只能從控制臺登錄);auth類型表示認證管理,對用戶進行認證。讓應(yīng)用程序提示用戶輸入密碼或者其它的標記,確認用戶的合法性;通過它的憑證許可權(quán)限,設(shè)定組成員關(guān)系或者其它優(yōu)先權(quán);password類型表示口令管理,用于更新與用戶相關(guān)的認證特性,如更改用戶密碼;session類型表示會話管理,用于進入給定的服務(wù)之前,或者離開給定的服務(wù)之后,需要進行的會話操作,如:存儲關(guān)于與用戶交換數(shù)據(jù)的log信息、掛接目錄等。3



1.3.3.2 PAM的配置文件

應(yīng)用PAM的服務(wù)例程是通過讀取PAM的配置文件初始化pam_handle這個句柄,用來記錄整個PAM的過程信息例如服務(wù)名、接口傳遞參數(shù)等,定義服務(wù)的配置文件存放在/etc/pam.d中,/etc/pam.conf也是pam的配置文件,該配置文件是老版本的配置文件,目前所安裝的版本當(dāng)中,如果有pam.d這個文件就首要讀取這個文件,若沒有再讀取pam.conf這個文件,另外若所讀服務(wù)不存在相應(yīng)配置文件,此時系統(tǒng)會讀取other這個配置文件的信息,other這個配置文件是所有服務(wù)的缺省選項。pam.d中的配置文件的語法形式如下:

module-type control-flag mudle-path arguments3

1.module-type:linux PAM 所提供的四種服務(wù)模塊,包括authaccountsession、password

2.control-flag:控制標志用來設(shè)置驗證成功或者失敗后PAM需要做出的反應(yīng),有四個關(guān)鍵詞如下所示:

required:表示即使某個模塊對用戶的驗證失敗,也要等所有的模塊執(zhí)行完成,PAM才可以返回錯誤信息,如此用戶就不知道被哪個模塊拒絕了。

requisite:一旦模塊對用戶的驗證失敗,PAM立馬返回出錯信息。

sufficient:一旦模塊對用戶的驗證成功,PAM立馬返回成功信息,并把控制權(quán)交給用戶。

optional:PAM會忽略這個模塊所產(chǎn)生的驗證錯誤,繼續(xù)執(zhí)行下一個模塊。

3.module-path:PAM驗證模塊的路徑;

4.arguments:傳遞給模塊的參數(shù)。參數(shù)是可選擇的,可以是讀取另外配置文件的路徑信息,也可以是各種模塊所需的傳遞參數(shù)。以下列出pam_unix模塊的參數(shù)信息:


1-2 pam_unix模塊參數(shù)3

參數(shù)

說明

debug

打開調(diào)試信息,通過syslog寫入日志系統(tǒng)

audit

debug記錄更為詳細的調(diào)試信息

nullok

默認值下,如果用戶輸入的口令為空,則不允許用戶訪問服務(wù),該參數(shù)覆蓋率這個默認值,即使不輸入口令就可以獲得服務(wù)

nodelay

取消延遲,默認是2秒為延遲時間

try_first_pass

提示用戶使用前面模塊認證通過的口令,只適用于auth 類型

use_first_pass

強制使用前面模塊認證通過的口令,只適用于auth password類型

not_authok

當(dāng)口令改變時,強制模塊設(shè)置新口令到以前模塊提供的口令

md5

當(dāng)用戶下次改變他們的口令時,使用md5算法加密口令

shadow

維護shadow口令,即使用/etc/shadow存儲口令

unix

當(dāng)用戶更改密碼時,密碼被放置在/etc/passwd

bigcrype

當(dāng)用戶下次改變口令時,使用DEC C2算法加密口令

nis

使用NISRPC(遠程過程調(diào)用)設(shè)置新口令

Remember=x

將每個用戶最后x個口令存儲在/etc/security/opasswd文件中,用于強制口令更改歷史,以免用戶頻繁使用同一個口令

broken_shadow

account管理模塊中讀取shadow口令時忽略錯誤

pam_conf配置文件的寫法與pam.d中的配置文件沒有太大的出入,只是在最前面多了一行具體的服務(wù)名稱,例如login,而pam.d中是將各種模塊分開來寫,這樣更便于控制。


1.1.3.3 PAM接口函數(shù)

PAM提供了多種接口函數(shù)以供用戶使用,其中包括框架API4、服務(wù)類型的API和服務(wù)模塊SPI

框架API:

每個支持PAM機制的應(yīng)用程序在使用PAM機制之前必須調(diào)用函數(shù)pam_start()初始化PAM上下文和PAM事務(wù),使用完后調(diào)用pam_end()來結(jié)束PAM機制,通過pam_get_item、pam_set_item()來讀寫PAM事物的狀態(tài)信息,通過pam_get_data()、pam_set_data()來取得和設(shè)置PAM模塊及會話的相關(guān)信息,通過pam_putenv()pam_getenv()、pam_getenvlist()來讀寫環(huán)境變量,通過pam_strerror()返回相關(guān)的錯誤信息;

服務(wù)類型的API:

1.認證管理模塊通過pam_authenticate()對用戶名和密碼進行認證,通過pam_setcred()用來修改用戶的信任參數(shù),建立數(shù)字認證;

2.賬戶管理模塊通過pam_acct_mgmt()來檢查用戶本身是否具有權(quán)限登錄系統(tǒng)、賬戶是否過期、賬戶是否有登錄時間限制等;

3.密碼管理模塊通過pam_chauthtok()來修改用戶的密碼;

4.會話管理模塊通過pam_open_session()來開始會話,以pam_close_session()來結(jié)束會話;

PAM中的APISPI詳細解釋如表1-3所示。

1-3 PAMAPI以及SPI3

服務(wù)管理類型

PAM   API

PAM  SPI

說明

account

pam_acct_mgmt()

pam_sm_acct_mgmt()

檢查認證特性、賬戶有效期和驗證訪問控制



authentication

pam_authenticate()

pam_sm_authenticate()

根據(jù)認證特征認證用戶

pam_setcred()

pam_sm_setcred()

在認證后會話前調(diào)用,用來修改用戶的信任參數(shù),如:uid gid

passwd

pam_chauthtok()

pam_sm_chauthtok()

用于改變給定用戶的認證特征

session

pam_open_session()

pam_sm_open_session()

為認證成功的用戶建立會話

pam_close_session()

pam_sm_open_session()

結(jié)束會話




參考文獻

【1】鳥哥的私房菜.人民郵電出版社.2010.

【2】Linux安全策略與實例.李洋等.機械工業(yè)出版社.2009.

【3】Linux安全體系分析與編程.倪繼利.電子工業(yè)出版社.2007.11

4The Linux-PAM Application Developers' Guide


免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉