黑龙江11选5走势图:PAM的入門介紹

來源:互聯網
更新時間:2018/2/9 2:39:39
責任編輯:王嘉善
字體:

福建体彩走势图 www.uyduz.icu

PAM(Pluggable Authentication Modules )是由Sun提出的一種認證機制。它通過提供一些動態鏈接庫和一套統一的API,將系統提供的服務和該服務的認證方式分開,使得系統管理員可以靈活地根據需要給不同的服務配置不同的認證方式而無需更改服務程序,同時也便于向系統中添加新的認證手段。

PAM最初是集成在Solaris中,目前已移植到其它系統中,如Linux、SunOS、HP-UX 9.0等。

一、PAM的結構

PAM的整個框架結構如下圖所示:

系統管理員通過PAM配置文件來制定認證策略,即指定什么服務該采用什么樣的認證方法;應用程序開發者通過在服務程序中使用PAM API而實現對認證方法的調用;而PAM服務??椋╯ervice module)的開發者則利用PAM SPI(Service Module API)來編寫認證??椋ㄖ饕且鲆恍┖齪am_sm_xxxx( )供libpam調用),將不同的認證機制(比如傳統的Unix認證方法、Kerberos等)加入到系統中;PAM核心庫(libpam)則讀取配置文件,以此為根據將服務程序和相應的認證方法聯系起來。

二、PAM支持的四種管理界面:

1、認證管理(authentication management)

主要是接受用戶名和密碼,進而對該用戶的密碼進行認證,并負責設置用戶的一些秘密信息。

2、帳戶管理(account management)

主要是檢查帳戶是否被允許登錄系統,帳號是否已經過期,帳號的登錄是否有時間段的限制等等。

3、密碼管理(passWord management)

主要是用來修改用戶的密碼。

4、會話管理(session management)

主要是提供對會話的管理和記賬(accounting)。

三、PAM的文件:

/usr/lib/libpam.so.* PAM核心庫

/etc/pam.conf或者/etc/pam.d/ PAM配置文件

/usr/lib/security/pam_*.so 可動態加載的PAM service module

對于RedHat,其目錄不是/usr/lib,而是/lib。

四、PAM的配置:

PAM的配置是通過單個配置文件/etc/pam.conf。RedHat還支持另外一種配置方式,即通過配置目錄/etc/pam.d/,且這種的優先級要高于單個配置文件的方式。

1、使用配置文件/etc/pam.conf

該文件是由如下的行所組成的:

service-name module-type control-flag module-path arguments

service-name 服務的名字,比如telnet、login、ftp等,服務名字“OTHER”代表所有沒有在該文件中明確配置的其它服務。

module-type ??槔嘈陀興鬧鄭篴uth、account、session、password,即對應PAM所支持的四種管理方式。同一個服務可以調用多個PAM??榻腥現?,這些??楣鉤梢桓鰏tack。

control-flag 用來告訴PAM庫該如何處理與該服務相關的PAM??櫚某曬蚴О芮榭?。它有四種可能的值:required,requisite,sufficIEnt,optional。

required 表示本??楸匭敕禱爻曬Σ拍芡ü現?,但是如果該??櫸禱厥О艿幕?,失敗結果也不會立即通知用戶,而是要等到同一stack中的所有??槿恐蔥型甌顯俳О芙峁禱馗τ貿絳???梢勻銜且桓霰匾跫?。

requisite 與required類似,該??楸匭敕禱爻曬Σ拍芡ü現?,但是一旦該??櫸禱厥О?,將不再執行同一stack內的任何???,而是直接將控制權返回給應用程序。是一個必要條件。注:這種只有RedHat支持,Solaris不支持。

sufficient 表明本??櫸禱爻曬σ丫鬩醞ü矸萑現さ囊?,不必再執行同一stack內的其它???,但是如果本??櫸禱厥О艿幕翱梢院雎???梢勻銜且桓齔浞痔跫?。

optional表明本??槭強裳〉?,它的成功與否一般不會對身份認證起關鍵作用,其返回值一般被忽略。

對于control-flag,從Linux-PAM-0.63版本起,支持一種新的語法,具體可參看Linux PAM文檔。

module-path 用來指明本??槎雜Φ某絳蛭募穆肪睹?,一般采用絕對路徑,如果沒有給出絕對路徑,默認該文件在目錄/usr/lib/security下面。

arguments 是用來傳遞給該??櫚牟問?。一般來說每個??櫚牟問疾幌嗤?,可以由該??櫚目⒄咦約憾ㄒ?,但是也有以下幾個共同的參數:

debug 該??橛Φ庇胹yslog( )將調試信息寫入到系統日志文件中。

no_warn 表明該??椴揮Π丫嫘畔⒎⑺透τ貿絳?。

use_first_pass 表明該??椴荒芴崾居沒淙朊藶?,而應使用前一個??櫬佑沒搶锏玫降拿藶?。

try_first_pass 表明該??槭紫扔Φ筆褂們耙桓瞿?櫬佑沒搶锏玫降拿藶?,如果該密碼驗證不通過,再提示用戶輸入新的密碼。

use_mapped_pass 該??椴荒芴崾居沒淙朊藶?,而是使用映射過的密碼。

expose_account 允許該??橄允居沒У惱屎琶刃畔?,一般只能在安全的環境下使用,因為泄漏用戶名會對安全造成一定程度的威脅。

2、使用配置目錄/etc/pam.d/(只適用于RedHat Linux)

該目錄下的每個文件的名字對應服務名,例如ftp服務對應文件/etc/pam.d/ftp。如果名為xxxx的服務所對應的配置文件/etc/pam.d/xxxx不存在,則該服務將使用默認的配置文件/etc/pam.d/other。每個文件由如下格式的文本行所構成:

module-type control-flag module-path arguments

每個字段的含義和/etc/pam.conf中的相同。

3、配置的例子

例一:用/etc/pam.conf配置默認的認證方式。

下面的例子將拒絕所有沒有在/etc/pam.conf中明確配置的服務。OTHER代表沒有明確配置的其它所有服務,pam_deny??櫚淖饔彌皇羌虻サ鼐芫ü現?。

OTHER auth required /usr/lib/security/pam_deny.so

OTHER account required /usr/lib/security/pam_deny.so

OTHER password required /usr/lib/security/pam_deny.so

OTHER session required /usr/lib/security/pam_deny.so

例二:通過/etc/pam.d/rsh文件配置rsh服務的認證方式。

rsh服務認證用戶時,先使用/etc/hosts.equiv和.rhosts文件的認證方式,然后再根據/etc/nologin文件的存在與否來判斷是否允許該用戶使用rsh,最后使用password database來認證用戶。

auth required /lib/security/pam_rhosts_auth.so

auth required /lib/security/pam_nologin.so

account required /lib/security/pam_pwdb.so

session required /lib/security/pam_pwdb.so

例三:通過/etc/pam.conf配置ftpd的認證方式。

下面是ftpd服務利用PAM??榻杏沒現さ娜霾街?。首先用pam_ftp??榧觳櫚鼻壩沒欠裎涿沒?,如果是匿名用戶,則sufficient控制標志表明無需再進行后面的認證步驟,直接通過認證;否則繼續使用pam_unix_auth??槔唇斜曜嫉膗nix認證,即用/etc/passwd和/etc/shadow進行認證;通過了pam_unix_auth??櫚娜現ぶ?,還要繼續用pam_listfile??槔醇觳楦糜沒欠癯魷衷諼募?etc/ftpusers中,如果是則該用戶被deny掉。

ftpd auth sufficient /usr/lib/security/pam_ftp.so

ftpd auth required /usr/lib/security/pam_unix_auth.so use_first_pass

ftpd auth required /usr/lib/security/pam_listfile.so /

onerr=succeed item=user sense=deny file=//img.xue163.net/etc/ftpusers

五、密碼映射(password-mapping)

密碼映射允許用戶在不同的認證機制下使用不同的密碼,其中有一個主密碼(primary password),其它密碼為次密碼(secondary passwords,可能有多個)。主密碼用來對次密碼進行加密。在主密碼認證通過后,認證??槔彌髏藶虢用芄拇蚊藶耄ㄒ渤莆猰apped password)解密,并對次密碼進行認證。

注:如果使用了一次性密碼的機制,就不使用密碼映射。

所有服務??楸匭脛С秩縵?個映射選項(在第四部分已經簡單解釋過):

1、use_first_pass

這個選項指示本??椴荒芴崾居沒淙朊藶?,而是使用已有的密碼,即從第一個向用戶提示輸入密碼的??檳搶鍶〉妹藶?,并對該密碼進行認證。

2、try_first_pass

這個選項指示本??槭紫瘸⑹允褂靡延械拿藶?,即從第一個向用戶提示輸入密碼的??檳搶鍶〉妹藶?,并對該密碼進行認證。如果密碼認證失敗,則再提示用戶輸入密碼。

3、use_mapped_pass

這個選項指示本??椴荒芟蠐沒崾臼淙朊藶?,而應使用映射過的密碼,即利用主密碼將加密過的次密碼解密出來并進行認證。

4、try_mapped_pass

這個選項指示本??槭紫瘸⑹允褂糜成涔拿藶?,即利用主密碼將加密過的次密碼解密出來并進行認證。如果密碼認證失敗,則再提示用戶輸入密碼。

密碼映射的例子:

下面是/etc/pam.conf中關于login服務的配置。這里login共有3種認證機制:Kerberos、UNIX和RSA認證,兩個required控制標志表明用戶必須通過Kerberos認證和UNIX認證才能使用login服務,optional選項則說明RSA認證是可選的。首先用戶輸入主密碼進行Kerberos認證;use_mapped_pass選項指示UNIX認證??槔彌髏藶虢糜赨NIX認證的次密碼解密出來并對該次密碼進行認證;try_first_pass選項指示RSA認證??橄仁褂玫諞桓瞿?椋碖erberos??椋┑拿藶胱魑腥現さ拿藶?,當對該密碼認證失敗時才提示用戶輸入用于RSA認證的次密碼。

login auth required pam_kerb_auth.so debug

login auth required pam_unix_auth.so use_mapped_pass

login auth optional pam_rsa_auth.so try_first_pass

六、PAM API

1、框架API:

任何一個支持PAM的服務程序在進行認證時必須以pam_start( )開始進行初始化,最后以pam_end( )結束以便進行清理工作。

2、認證管理API:

pam_authenticate( )對用戶名/密碼進行認證。

pam_setcred( )用來修改用戶的秘密信息。

3、帳戶管理API:

pam_acct_mgmt( )檢查帳戶本身是否有權限登錄系統、帳戶是否過期、帳戶是否有登錄時間限制等。

4、密碼管理API:

pam_chauthtok( )修改用戶的密碼。

5、會話管理API:

一個會話以pam_open_session( )開始,最后以pam_close_session( )結束。

6、其它:

pam_get_item( )、pam_set_item( )用來讀寫PAM事務(transaction)的狀態信息。

pam_get_data( )、pam_set_data( )用來取得和設置PAM??榧盎嶧暗南喙匭畔?。

pam_putenv( )、pam_getenv( )、pam_getenvlist( )用來讀寫環境變量。

pam_strerror( )返回相關的錯誤信息。

例子程序(摘自Sun的白皮書):

下面的例子使用PAM API寫了一個簡單的login服務程序(注:這不是個完整的程序,所以省略了對pam_close_session的調用)。

#include

/* 回調函數 */

static int login_conv(int num_msg, struct pam_message **msg, struct pam_response **response, void *appdata_ptr);

struct pam_conv pam_conv = {login_conv, NULL};

pam_handle_t *pamh; /* 進行認證的PAM句柄 */

void main(int argc, char *argv[], char **renvp)

{

/* 初始化,并提供一個回調函數 */

if ((pam_start("login", user_name, &pam_conv, &pamh)) != PAM_SUCCESS)

login_exit(1);

/* 設置一些參數 */

pam_set_item(pamh, PAM_TTY, ttyn);

pam_set_item(pamh, PAM_RHOST, remote_host);

while (!authenticated && retry < MAX_RETRIES)

{

status = pam_authenticate(pamh, 0); /* 密碼認證管理,檢查用戶輸入的密碼是否正確 */

authenticated = (status == PAM_SUCCESS);

}

if (status != PAM_SUCCESS)

{

fprintf(stderr,"error: %s/n", pam_strerror(pamh, status)); /* 顯示錯誤原因 */

login_exit(1);

}

/* 通過了密碼認證之后再調用帳戶管理API,檢查用戶帳號是否已經過期 */

if ((status = pam_acct_mgmt(pamh, 0)) != PAM_SUCCESS)

{

if (status == PAM_AUTHTOK_EXPIRED)

{

status = pam_chauthtok(pamh, 0); /* 過期則要求用戶更改密碼 */

if (status != PAM_SUCCESS)

login_exit(1);

}

}

/* 通過帳戶管理檢查之后則打開會話 */

if (status = pam_open_session(pamh, 0) != PAM_SUCCESS)

login_exit(status);

/* 設置用戶組 */

setgid(pwd->pw_gid);

/*

* Initialize the supplementary group access list before

* pam_setcred because PAM modules might add groups

* during the pam_setcred call

*/

initgroups(user_name, pwd->pw_gid);

status = pam_setcred(pamh, PAM_ESTABLISH_CRED);

if (status != PAM_SUCCESS)

login_exit(status);

/* 設置真實的用戶ID(或者有效的用戶ID)*/

setuid(pwd->pw_uid);

pam_end(pamh, PAM_SUCCESS); /* PAM事務的結束 */

/*

此處可用來實現與login有關的其它內容

*/

}

/* 出錯則清理現場并退出 */

static void login_exit(int exit_code)

{

if (pamh)

pam_end(pamh, PAM_ABORT);

exit(exit_code);

}

/* 這個回調函數被PAM認證??櫚饔靡員閬允敬砦笮畔⒒蛘呋蛘哂美慈〉糜沒淙?,采用圖形界面的服務程序則應使用圖形界面來取得用戶輸入或顯示提示信息*/

int login_conv(int num_msg, struct pam_message **msg, struct pam_response **response, void *appdata_ptr)

{

while (num_msg--)

{

switch (m->msg_style)

{

case PAM_PROMPT_ECHO_OFF:

r->resp = strdup(getpass(m->msg));

break;

case PAM_PROMPT_ECHO_ON:

(void) fputs(m->msg, stdout);

r->resp = malloc(PAM_MAX_RESP_SIZE);

fgets(r->resp, PAM_MAX_RESP_SIZE, stdin);

/* add code here to remove /n from fputs */

break;

case PAM_ERROR_MSG:

(void) fputs(m->msg, stderr);

break;

case PAM_TEXT_INFO:

(void) fputs(m->msg, stdout);

break;

default:

log_error();

break;

}

}

return (PAM_SUCCESS);

}

七、PAM SPI

當服務程序(ftpd、telnetd等)調用PAM API函數pam_xxx( )時,由PAM 框架(libpam)根據該服務在/etc/pam.conf文件中的配置調用指定的PAM??櫓卸雜Φ腟PI函數pam_sm_xxx( )。如下:

API函數的名字為pam_xxx( ),對應的SPI函數的名字為pam_sm_xxx( ),即每個服務??樾枰魷嚶Φ暮怨﹍ibpam調用。為方便對照,再列一下。

API 對應的 SPI

帳號管理 pam_acct_mgmt( ) pam_sm_acct_mgmt( )

認證管理 pam_authenticate( ) pam_ sm_authenticate( )

密碼管理 pam_chauthtok( ) pam_ sm_chauthtok( )

會話管理 pam_open_session( ) pam_ sm_open_session( )

會話管理 pam_close_session( ) pam_ sm_close_session( )

認證管理 pam_setcred( ) pam_ sm_setcred( )

八、常用的PAM服務???

下面是Linux提供的PAM??榱斜恚ㄖ皇瞧渲幸徊糠鄭?

??槲募???楣δ苊枋?相關配置文件

pam_access 提供logdaemon風格的登錄控制 /etc/security/access.conf

pam_chroot 提供類似chroot命令的功能

pam_cracklib 對密碼的強度進行一定的檢查 庫文件libcrack和字典文件

/usr/lib/cracklib_dict

pam_deny 總是無條件地使認證失敗

pam_env 設置或取消環境變量 /etc/security/pam_env.conf

pam_filter 對輸入輸出流進行過濾 filters

pam_ftp.so 對匿名ftp用戶進行認證

pam_group 當用戶在指定的終端上請求指定的 /etc/security/group.conf

服務時賦予該用戶相應的組權限

pam_issue 在提示用戶輸入用戶名之前顯示 /etc/issue

/etc/issue文件的內容

pam_krb4 對用戶密碼進行Kerberos認證 相應的Kerberos庫文件

pam_lastlog 在用戶登錄成功后顯示關于 /var/log/lastlog

用戶上次登錄的信息,并維護

/var/log/lastlog文件。

pam_limits 限制用戶會話所能使用的系統資源 /etc/security/limits.conf

pam_listfile 根據指定的某個文件決定是否 例如/etc/ftpusers

允許或禁止提供服務

pam_mail 檢查用戶的郵箱中是否有新郵件 /var/spool/mail/xxxx

pam_mkhomedir 為用戶建立主目錄 /etc/skel/

pam_motd 顯示/etc/motd文件的內容 /etc/motd

pam_nologin 根據/etc/nologin文件的存在與否 /etc/nologin

來決定用戶認證是否成功

pam_permit 總是無條件地使認證成功

pam_pwdb 作為pam_unix_xxxx??櫚囊桓鎏媧?。/etc/pwdb.conf

使用Password Database通用接口

進行認證。

pam_radius 提供遠程身份驗證撥入用戶服務

(RADIUS)的認證

pam_rhosts_auth 利用文件~/.rhosts和 /etc/hosts.equiv和~/.rhosts

/etc/hosts.equiv對用戶進行認證。

pam_rootok 檢查用戶是否為超級用戶,如果

是超級用戶則無條件地通過認證。

pam_securetty 提供標準的Unix securetty檢查 /etc/securetty

pam_time 提供基于時間的控制,比如限制 /etc/security/time.conf

用戶只能在某個時間段內才能登錄

pam_unix 提供標準的Unix認證 /etc/passwd和 /etc/shadow

pam_userdb 利用Berkeley DB數據庫來檢查 Berkeley DB

用戶/密碼

pam_warn 利用syslog( )記錄一條告警信息

pam_wheel 只允許wheel組的用戶有超級用戶

的存取權限

參考資料:

1、DCE/OSF-RFC 86.0

2、Linux-PAM documentation & source code

3、Sun Solaris PAM documentation

轉自于 Xue163.com_Linux新手入門

根據您訪問的內容,您可能還對以下內容感興趣,希望對您有幫助:

求助pam stamp 2009的學習,0基礎,不知怎樣入門才...

答:從做例子開始,先做幾個例子,再去看書,這樣才有效果 光看書沒用的 做例子就做help里面的 有examples的,很詳細,做完后,再看看相關的 書籍 ,PAM的書有幾本了,你可以看看。

在潘馬斯的豐收中,除了最基礎的Pam's harvest cra...

答:語法錯亂,而且原版就有打草掉種子的設定。 推薦竹和豆腐。

以三段論的前提PAM和SEM推出的結論為基礎,再進行...

答:首先可得出三段論的結論SEP,接著進行直接推理,可推出很多結論:1、SOP,2、¬(SAP),3、¬(SIP),4、PES,5、PA¬S,6、¬SIP,7、¬SO¬P,8、SA¬P,9、SI¬P,10、¬PIS,11、¬PO¬S。

如何判斷PAC與PAM投加過量

PAM的使用方法以及用量的鑒定: 一、固相含量越高,絮凝劑使用的量越大。根據處理工藝要求的絮體大小選擇絮凝劑的分子量。聚丙烯酰胺的離子型必須通過實驗進行篩選。...

pam-crash和LS-dyna都是做高速下的碰撞分析,哪個做汽車碰撞...

一、明確跟你講,兩個軟件都很牛,精通任何一個你都是牛人。相對來講pamcrash更在汽車碰撞領域更專業一點,而ls-dyna則更通用一點,其實他們的核心算法都是一樣的,都是dy...

星露谷物語pam在哪 潘姆喜好和行程介紹

星露谷物語中潘姆pam是游戲中十大可結婚對象之一潘妮penny的母親,如果你想攻略penny,那么你就可以選擇對她的媽媽也就是你未來的丈母娘下手,小伙伴們趕緊看看下面的潘...

越獄中Alex和Pam最后怎么了?

最后離婚了,Alex和他以前的女同事好了... 因為Alex的兒子死了,自然對他們夫妻之間的感情有很大的傷害,并且只要是繼續相對的話,心上的痛是一直磨滅不了的,分開是很正常的...

PAM和PAC溶液的罐子使用什么材質

由于腐蝕性較強,一般采用聚丙烯材質的罐體!

PAM脈沖調幅信號是模擬還是數字信號

是PAM是模擬信號。 原因:區別模擬信號和數字信號的關鍵,是看攜載消息的信號參量(如幅值、頻率、相位)的取值是連續的還是離散的,而不是看時間,PAM信號盡管在時間上是...

Discovery系列記錄片有一集介紹了PAM導彈(美國的精確攻擊導...

discovery 巡航導彈A B兩集 你去看看吧!

污水處理過程中什么情況下要加PAC與PAM,比例是多少?

PAC為聚合氯化鋁,PAM為聚丙烯酰胺,前者為絮凝劑,后者為助凝劑,通常聯合使用,一般情況下先加PAC,后加PAM,有時可能需要加酸或堿調節PH 配制濃度PAC10--15%,PAM0....

如何解決pam作為凝聚劑反應后粘度

聚丙烯酰胺溶液配置濃度: ≈0.15% 1. 準備 1.5 kg 陰離子聚丙烯酰胺固體,備用; 2. 將溶藥罐內注入清水 1000L 左右; 3. 啟動攪拌機,將 1.5kg 陰離子聚丙烯酰胺固體分批逐...

pam111在廣州站西鐘表城要多少錢才能買到高仿的 就是沒什么...

手表有石英表和機械表,石英表無所謂買個100多的基本上都是日本機芯,質量還算可以主要看外殼還有做工?;當砭蛻畎鋁?機芯有:國產垃圾機芯、國產高仿瑞士機芯、瑞士...


www.xue163.net true //www.xue163.net/soft/18/187504.html report 17357 PAM的入門介紹,PAM(PluggableAuthenticationModules)是由Sun提出的一種認證機制。它通過提供一些動態鏈接庫和一套統一的API,將系統提供的服務和該服務的認證方式分開,使得系統管理員可以靈活地根據需要給不同的服務配置不同的認證方式而無...
網友評論
最新添加資訊
    24小時熱門資訊
    娛樂時尚
      科技資訊
      歷史文化
        真視界
        旅游美食
        精彩圖文
        我愛我車
        母嬰健康
        關于本站 | 廣告服務 | 手機版 | 商務合作 | 免責申明 | 招聘信息 | 聯系我們
        Copyright © 2004-2018 xue163.net All Rights Reserved. 學網 版權所有
        京ICP備10044368號-1 京公網安備11010802011102號
        教育考試: 學歷財經建筑 醫藥公考資格外語電腦作文招聘中小學留學 文檔 移民 文庫專欄23問答中心問答圖書館知識IT編程數碼信息解決方案信息中心IT科技topzttophottopsctopnew問答新聞中心軟件教室設計大全網絡相關英語學習開發編程考試中心參考范文管理文庫營銷中心站長之家IT信息中心商學院數碼大全硬件DIY企業服務網吧在線百科硬件知識手機平板汽車游戲家電精彩攝影現代家居IT女人經驗健康養生獵奇創業攻略教育學習歷史時尚潮流福建体彩走势图漲知識