Linux中用戶登錄認證機制的研究_第1頁
Linux中用戶登錄認證機制的研究_第2頁
Linux中用戶登錄認證機制的研究_第3頁
Linux中用戶登錄認證機制的研究_第4頁
Linux中用戶登錄認證機制的研究_第5頁
已閱讀5頁,還剩10頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Linux用戶認證過程分析組員:李濤王智剛孔令軍

姚登波汪小琳專業:計算機科學與技術完成時間:2012年6月5日目錄啟動到登錄界面的流程1LOGIN程序2Login中的加密算法crypt3嵌入式認證模塊——PAM4啟動到登錄界面的流程LOGIN進程getty進程/etc/inittabstart_kernel

initstart_kernel介紹這個函數從開始到cpu_idle().這個階段主要是對系統的”經濟根底”,即各種資源的初始化,僅由主cpu進行,到最后執行init函數,再創立init進程。start_kernel中局部代碼:asmlinkagevoid__initstart_kernel(void){

…… kernel_thread(init,NULL,CLONE_FS|CLONE_FILES|CLONE_SIGNAL);//執行init函數,再創立init進程。……}

init介紹Init()的執行,這是對系統的“上層建筑”的初始化。此段還是由主cpu執行。函數init〔〕的代碼在init/main.c中,這個函數本身并不長,但實際作用很大。我們現在關心的重點是init函數最后執行的execve()函數局部,此局部的執行就是系統的第一個進程init真正執行。staticintinit(void*unused){…….execve("/sbin/init",argv_init,envp_init);//redhat9.0中有此程序。此程序執行/etc/inittab。 execve("/etc/init",argv_init,envp_init); execve("/bin/init",argv_init,envp_init);……..}/etc/inittab文件[運行getty進程]由注釋可知道,該文件是init進程的要執行的文件。其中有系統的運行級別的配置,和getty進程的啟動,在此我們關心的是getty進程。現在getty進程就啟動了。#inittab

ThisfiledescribeshowtheINITprocessshouldsetup

#

thesysteminacertainrun-level.…….#Rungettysinstandardrunlevels

1:2345:respawn:/sbin/mingettytty1

6:2345:respawn:/sbin/mingettytty6…….//respwan:表示如果本行的命令進程終止后,init進程應該馬上重新啟動相應的進程;getty進程.翻開終端命令行。.輸出login提示符/*do_prompt-showloginprompt,optionallyprecededby/etc/issuecontents*/Voiddo_prompt(op,tp)//(顯示提示){……(void)write(1,LOGIN,sizeof(LOGIN)-1); /*alwaysshowloginprompt*///把login:提示符寫到終端上,1代表標準輸出,即終端。……}.執行login程序。Getty程序中調用(void)execl(options.login,options.login,"--",logname,NULL);execl()再調用__execve(path,(char*const*)argv,__environ);執行進程調度,就啟動了,login進程。LOGIN程序流程第一第二第三獲得用戶名。讀取/etc/passwd,與/etc/shadow文件。比較兩個密文顯示password:,獲得密碼。檢測該用戶的登錄shell是否為/etc/nologin成功:啟動用戶shell不成功:重新再登錄讀取/etc/passwd,與/etc/shadow文件讀取/etc/passwd,與/etc/shadow文件。 if((pwd=getpwnam(username))){//從/etc/passwd中獲得與登錄用戶相關信息。#ifdefSHADOW_PWD structspwd*sp; if((sp=getspnam(username)))//讀取/etc/shadow中數據。存放到sp中。

pwd->pw_passwd=sp->sp_pwdp;#endif顯示password:獲得密碼pp=getpass(_(“Password:”));//char*getpass(prompt):輸出提示符,并讀口令。檢測該用戶的登錄shell是否為/etc/nologinif(pwd==NULL||pwd->pw_uid)checknologin();//檢查有無/etc/nologin文件,如果有那么表示禁止該用戶登錄,輸出///etc/nologin中的內容檢測密碼if(pwd&&!strcmp(p,pwd->pw_passwd))//比較兩個密文是否相同break;//相同那么break出L694行的循環,即認證通過,到L829行運行

printf(_("Loginincorrect\n"));//輸出“Loginincorrect”,表示密碼不對badlogin(username);/*logALLbadlogins*///在syslog中記錄登錄失敗記錄Login中的加密算法crypt接下來我們把目光放在Login中的char*crypt(constchar*key,constchar*salt)函數以及具體的密碼比對方法上。我們都知道,在信息平安領域中,系統平安性是非常非常重要的。如果輕易讓別人獲得了root權限,那我們的系統將完全落入別人的掌控之中。所以,為了提高平安性,Linux在用戶登錄驗證的過程中,采用了一些特別的方法。比方加密存放用戶密碼,或者使用嵌入式認證模塊——PAM。這里,我們首先討論一下密碼加密的問題。

Crypt加密原理

加密函數char*crypt(constchar*key,constchar*salt)crypt為支持不同的方式,將salt進行格式化,格式為: $id$salt$encoded〔這也是保存在密碼文件中的格式〕IdMethod1MD5(12個salt字符)2aBlowfish5SHA-256(12個salt字符)6SHA-512(12個salt字符)

/etc/shadow文件密碼分析

系統/etc/shadow: litao:$1$XkUtEjE/$8ZUyvb98gKuGRc3aSUQ1t0:15496:0:99999:7:::第一、二個$之間的為使用的加密算法類型標示,第二、三個$之間的局部為salt,第三個$后面的局部為加密后的密碼。 由$1$可以知道,crypt使用MD5算法。嵌入式認證模塊——PAM

為平安起見,計算機系統只有經過授權的合法用戶才能訪問,在這里,如何正確的鑒別用戶的真實身份是一個關鍵問題。其中無論是比較知名的Kerberos或者基于智能卡的鑒別系統,都有一個通

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論