歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Linux的密碼防破解與帳號文件保護

Linux作為一種多任務、多用戶的操作系統,在同一時間段上可能為眾多用戶使用,且用戶的管理直接關系到整個系統的安全,用戶需要對其中的密碼管理和帳戶文件管理進行著重的強調和保護。

(更多詳細內容請關注Linux系統全方位管理專題:http://os.51cto.com/art/201009/228849.htm  )

Linux用戶管理主要分為兩方面:密碼管理,以及用戶與用戶組的管理。下面將對這兩方面分別進行闡述。

1. 密碼管理

密碼是用戶登錄Linux系統的鑰匙,如果沒有鑰匙總是要費一番力氣後,才能登錄到目標操作系統。無論入侵者采用何種遠程攻擊,如果無法獲得管理員或超級管理員的用戶密碼,就無法完全控制整個系統。若想訪問系統,最簡單也是必要的方法就是竊取用戶的密碼。因此,對系統管理員賬戶來說,最需要保護的就是密碼,如果密碼被盜,也就意味著災難的降臨。

入侵者大多是通過各種系統和設置漏洞,獲得管理員密碼來獲得管理員權限的,然後,再實現對系統的惡意攻擊。賬號的弱密碼設置會使入侵者易於破解而得以訪問計算機和網絡,而強密碼則難以破解,即使是密碼破解軟件也難以在短時間內辦到。密碼破解軟件一般使用3種方法進行破解:字典猜解、組合猜解和暴力猜解。毫無疑問,破解強密碼遠比破解弱密碼困難得多。因此,系統管理員賬戶必須使用強密碼。

據統計,大約80%的安全隱患是由於密碼設置不當引起的。因此,密碼的設置無疑是十分講究技巧的。在設置密碼時,請遵守密碼安全設置原則,該原則適用於任何使用密碼的場合,既包括Windows操作系統,也包括UNIX/Linux操作系統。

John the Ripper是一個工具軟件,用於在已知密文的情況下嘗試破解出明文的破解密碼軟件。目前的最新版本是JOHN1.7版,主要支持對DES、MD5兩種加密方式的密文進行破解工作。它可以工作於多中不同的機型以及多種不同的操作系統之下,目前已經測試過能夠正常運行的操作系統有:Linux x86、freeBSD、x86、Solaris、SPARC、OSF/1 Alpha、DOS、WinNT/WinXP系列等。

John the Ripper官網:http://www.openwall.com/john/

John the Ripper 1.7是目前比較好的破解密碼工具,在解密過程中會自動定時存盤,用戶可以強迫中斷解密過程(使用ctrl+c組合鍵),下次還可以從中斷的地方繼續進行下去(john-restore命令)。任何時候敲擊鍵盤,用戶都可以看到整個解密的進行情況,所有已經被破解的密碼會被保存在當前目錄下的JOHN.POT文件中,SHADOW中所有密文相同的用戶會被歸成一類,這樣JOHN就不會進行無謂的重復勞動了。在程序的設計中,關鍵的密碼生成的條件被放在JOHN.INI文件中,用戶可以自行修改設置,不僅支持單詞類型的變化,而且支持自己編寫C的小程序限制密碼的取值方式。

在使用該軟件前,我們可以從網上下載其最新版本john-1.7.3.4 for Linux版本,它包含DOC、SRC和RUN三個目錄,在SRC目錄下,在機器上執行如下命令即可:

#make#make clean linux-x86-any

安裝好後,可以切換到RUN目錄下,進行測試,如下所示:

#cd ../run#./john –test

John the ripper提供了如下多達10余種的命令,供用戶選擇使用:

pwfile:<file>[,..]:用於指定存放密文所在的文件名,(可以輸入多個,文件名一我“,”分隔,也可以使用*或者 這兩個通配符引用一批文件)。也可以不使用此參數,將文件名放在命令行的最後即可。

wordfile:<字典文件名>-stdin:指定的用於解密用的字典文件名。也可以使用STDIO來輸入,就是在鍵盤中輸入。

rules:在解密過程中使用單詞規則變化功能。如將嘗試cool單詞的其他可能,如COOLER、Cool等,詳細規則可以在JOHN.INI文件中的[List.Rules:Wordlist]部分查到。

incremental[:<模式名稱>]:使用遍歷模式,就是組合密碼的所有可能情況,同樣可以在JOHN.INI文件中的[Incremental:*****]部分查到。

single:使用單一模式進行解密,主要是根據用戶名產生變化來猜測解密,可以消滅比較低級的用戶。其組合規則可以在JOHN.INI文件中的[List.Rules:Single]部分查到,我們在下面詳細解釋。

external:<模式名稱>:使用自定義的擴展解密模式,用戶可以在john.ini中定義自己需要的密碼組合方式。JOHN也在INI文件中給出了幾個示例,在INI文件的[List.External:******]中所定義的自訂破解功能。

restore[:<文件名>]:繼續上次的破解工作,JOHN被中斷後,當前的解密進度情況被存放在RESTORE文件中,用戶可以拷貝這個文件到一個新的文件中。如果參數後不帶文件名,JOHN默認使用RESTORE文件。

makechars:<文件名>:制作一個字符表,用戶所指定的文件如果存在,則將會被覆蓋。JOHN嘗試使用內在規則在相應密鑰空間中生成一個最有可能擊中的密碼組合,它會參考在JOHN.POT文件中已經存在的密鑰。

show:顯示已經破解出的密碼,因為JOHN.POT文件中並不包含用戶名,同時用戶應該輸入相應的包含密碼的文件名,JOHN會輸出已經被解密的用戶連同密碼的詳細表格。

test:測試當前機器運行JOHN的解密速度,需要1分鐘,它會得出在當前的情況下解密的各種可能情況下相應的解密速度,如同時解密100個用戶時的平均速度,使用 遍歷法解密模式時解密的速度。salts指用戶個數,如果給出的對於100個用戶解密的平均速度為18000次/秒,那麼表明同時對100個用戶解密,解 密的速度為每個180次/秒。因為絕大多數的時間被用於密鑰比較過程中了。所以應該對用戶進行挑選。

users:<login|uid>[,..]:只破解某類型的用戶或者屬於某個組的用戶。如果得到的PASSWD文件沒有包含密文,那麼在得到SHADOW後應該進行組合,JOHN的附帶程序 UNSHADOW.EXE可以完成這一過程,當然了,用戶也可以手工做。一般的能夠進入CSH的用戶都是解密的首選對象。也可以要UID=0的ROOT級別 的用戶。

shells:[!]<shell>[,..]:和上面的參數一樣,這一選項可以選擇對所有可以使用shell的用戶進行解密,對其他用戶不予理睬。“!”就是表示不要某些類型的用戶。例如:“-shells:csh”。

salts:[!]<count>:只選擇解密用戶大於<count>的帳號,可以使用戶得到選擇的權利,盡快的得到所需要的用戶的PASS。

lamesalts:指定用戶中密碼所使用的cleartext。(我不大清楚此功能的作用)。

timeout:<幾分鐘>:指定解密持續的時間是幾分鐘,到時間JOHN自動停止運行。

list:在解密過程中在屏幕上列出所有正在嘗試使用的密碼,建議不要使用,它會將大部分時間浪費在顯示上,極大地拖慢解密速度。一般只是適用於重定向輸出到文件後,檢驗用戶所設定的某些模式是否正常。

beep-quiet:當解密出密碼時是否要讓PC喇叭叫一下,以提醒用戶。

noname-nohash:不使用內存來保存“用戶名”等內容。

des-md5:指定使用的解密方式是解DES還是MD5,對於解密DES密碼不用理會這一選項。

除了口令破解程序之外,在這個軟件包中,還包含了其他幾個實用工具,它們對於實現口令破解都有一定的幫助,這些工具都放置在run目錄下,下面分別予以簡要介紹。

(1)unshadow PASSWORD-FILE SHADOW-FILE

unshadow命令將passwd文件和shadow文件組合在一起,其結果用於John破解程序。通常應該使用重定向方法將這個程序的結果保存在文件中,之後將文件傳遞給John破解程序。

(2)unafs DATABASE-FILE CELL-NAME

unafs從二進制AFS數據庫中提取口令散列值,並生成John可用的輸出,通常應該把這個輸出重定向到文件中。

(3)unique OUTPUT-FILE

刪除字典表中的重復詞匯,但不改變字典表中各詞條項的順序。

安裝好後,我們可以靈活使用如下幾種方式來對自己的賬戶密碼進行測試:

通常情況下,許多用戶的密碼命名方式非常簡單,比如foo、hello、world等等,或者很多都是與用戶名相同的密碼口令,那麼我們一般可以先采用簡單解密方式來對系統中的密碼進行簡單的初步試探,如果發現能夠成功破解,那麼就需要對這些密碼口令的強度進行加強,如下所示:

#./john –single “/etc/shadow”Loaded 2 password hashes with 3 different salts (FreeBSD MD5 [32/32])liyang             (liyang)guesses: 1  time: 0:00:00:00 100%  c/s: 6975  trying: 999991900

在上述命令中,我們發現系統存在一個liyang用戶,其用戶名和密碼均為liyang,因而通過最簡單的方式便能將其發現和利用,如果為黑客破解則將造成不可設想的後果,因而我們的用戶應該立即根據此種情況進行口令加強。

其次,用戶可以使用字典文件來對系統用戶的惡密碼強度進行試探和測試。人們常用hello、superman、cooler、asdfgh、123456等作為自己的密碼。而-rules參數則在此基礎上再加上些變化,如字典中有單詞cool,則JOHN還會嘗試使用cooler、CoOl、Cool等單詞變化進行解密。一般視SHADOW中的用戶多少及用戶的字典大小、用戶的機器速度,解密時間從幾小時到幾天不等。下面給出使用該方式進行解密的例子,假設我們已經生成了一個password.lst文件,其中包含了常用的以字典單詞為依據的密碼,那麼我們對系統中的用戶密碼使用該方式進行試探破解,由於字典中保留了young這樣一個單詞,因而用戶google的密碼所以也被試探出來,網絡管理員同樣需要對該密碼進行加固,比如添加適當的後綴、字母和數字等:

# ./john --wordlist=password.lst "/etc/shadow"
Loaded 2 password hashes with 2 different salts (FreeBSD MD5 [32/32])
young            (google)
guesses: 1  time: 0:00:00:01 100%  c/s: 3571  trying: zhongguo

2. 管理用戶及組文件安全

Linux操作系統采用了UNIX傳統的方法,把全部的用戶信息保存為普通的文本文件。用戶可以通過對這些文件進行修改來管理用戶和組。

(1) 用戶賬號文件——passwd

/etc/passwd文件是UNIX安全的關鍵文件之一。該文件用於用戶登錄時校驗用戶的登錄名、加密的口令數據項、用戶ID(UID)、默認的用戶分組ID(GID)、用戶信息、用戶登錄子目錄以及登錄後使用的shell。這個文件的每一行保存一個用戶的資料,而用戶資料的每一個數據項采用冒號“:”分隔。如下所示:

LOGNAME:PASSWORD:UID:GID:USERINFO:HOME:SHELL

每行的頭兩項是登錄名和加密後的口令,後面的兩個數是UID和GID,接著的一項是系統管理員想寫入的有關該用戶的任何信息,最後兩項是兩個路徑名:一個是分配給用戶的HOME目錄,另一個是用戶登錄後將執行的shell(若為空格則默認為/bin/sh)。

下面是一個實際的系統用戶的例子:

cracker:x:6018: 6018: cracker:/home/ cracker:/bin/bash

該用戶的基本信息為:

登錄名:cracker

加密的口令表示:x

UID:6018

GID:6018

用戶信息:cracker

HOME目錄:/home/ cracker

登錄後執行的shell:/bin/bash

用戶的登錄名是用戶用來登錄的識別,由用戶自行選定,主要由方便用戶記憶或者具有一定含義的字符串組成。

所有用戶的口令的存放都是加密的,通常采用的是不可逆的加密算法,比如DES(Data Encryption Standard,數據加密標准)。當用戶在登錄提示符處輸入它們的口令時,輸入的口令將由系統進行加密。再把加密後的數據與機器中用戶的口令數據項進行比較。如果這兩個加密數據匹配,就可以讓這個用戶進入系統。在/etc/passwd文件中,UID信息也很重要。系統使用UID而不是登錄名區別用戶。一般來說,用戶的UID應當是獨一無二的,其他用戶不應當有相同的UID數值,只有UID等於0時可以例外。任何擁有0值UID的用戶都具有根用戶(系統管理員)訪問權限,因此具備對系統的完全控制。通常,UID為0這個特殊值的用戶的登錄名是“root”。根據慣例,從0到99的UID保留用做系統用戶的UID。如果在/etc/passwd文件中有兩個不同的入口項有相同的UID,則這兩個用戶對文件具有相同的存取權限。

每一個用戶都需要有地方保存專屬於自己的配置文件。這需要讓用戶工作在自己定制的操作環境中,以免改變其他用戶定制的操作環境,這個地方就叫做用戶登錄子目錄。在這個子目錄中,用戶不僅可以保存自己的配置文件,還可以保存自己日常工作用到的各種文件。出於一致性的考慮,大多數站點都從/home開始安排用戶登錄子目錄,並把每個用戶的子目錄命名為其上機使用的登錄名。

當用戶登錄進入系統時,都有一個屬於自己的操作環境。用戶遇到的第一個程序叫做shell。在Linux系統裡,大多數shell都是基於文本的。Linux操作系統帶有好幾種shell供用戶選用。用戶可以在/etc/shells文件中看到它們中的絕大多數。用戶可以根據自己的喜好來選用不同的shell進行操作。按照最嚴格的定義,在上面所介紹的/etc/passwd文件中,每個用戶的口令數據項中並沒有定義需要運行某個特定的shell,其中列出的是這個用戶上機後第一個運行的程序是哪個。綜上所述,通過使用cat命令查看/etc/passwd文件(#cat /etc/passwd)。

(2) 用戶影子文件——shadow

Linux使用不可逆的加密算法如DES來加密口令,由於加密算法是不可逆的,所以黑客從密文是得不到明文的。但/etc/passwd文件是全局可讀的,加密的算法是公開的,惡意用戶取得了/etc/passwd文件,便極有可能破解口令。而且,在計算機性能日益提高的今天,對賬號文件進行字典攻擊的成功率會越來越高,速度越來越快。因此,針對這種安全問題,Linux/UNIX廣泛采用了“shadow(影子)文件”機制,將加密的口令轉移到/etc/shadow文件裡,該文件只為root超級用戶可讀,而同時/etc/passwd文件的密文域顯示為一個x,從而最大限度地減少了密文洩露的機會。

/etc/shadow文件的每行是8個冒號分割的9個域,格式如下:

username: passwd: lastchg: min: max: warn: inactive: expire: flag

如下所示的是一個系統中實際影子文件的例子:

liyang:$1$ciY58zQZ$iKVHLSVZZgM75.lGp5Rmv.:14633:0:99999:7:::

我們對最後一個用戶的信息進行解釋,該信息表明了如下含義:

用戶登錄名:liyang

用戶加密的口令:liyang後緊跟的一段亂碼信息$1$ciY58zQZ$iKVHLSVZZgM75.lGp5Rmv.

從1970年1月1日起到上次修改口令所經過的天數天數為:14633天

需要多少天才能修改這個命令:0天

該口令永不過期:采用99999表示

要在口令失效前7天通知用戶,發出警告

禁止登錄前用戶名還有效的天數未定義,以“:”表示

用戶被禁止登錄的時間未定義,以“:”表示

保留域,未使用,以“:”表示

(3) 組賬號文件——group

/etc/passwd文件中包含著每個用戶默認的分組ID(GID)。在/etc/group文件中,這個GID被映射到該用戶分組的名稱以及同一分組中的其他成員去。

/etc/group文件含有關於小組的信息,/etc/passwd中的每個GID在文件中應當有相應的入口項,入口項中列出了小組名和小組中的用戶,這樣可方便地了解每個小組的用戶,否則必須根據GID在/etc/passwd文件中從頭至尾地尋找同組用戶,這提供了一個比較快捷的尋找途徑。/etc/group文件對小組的許可權限的控制並不是必要的,因為系統用來自於/etc/passwd文件的UID、GID來決定文件存取權限,即使/etc/group文件不存在於系統中,具有相同的GID用戶也可以小組的存取許可權限共享文件。小組就像登錄用戶一樣可以有口令。如果/etc/group文件入口項的第二個域為非空(通常用x表示),則將被認為是加密口令。/etc/group文件中每一行的內容如下所示:

用戶分組名

加過密的用戶分組口令

用戶分組ID號(GID)

以逗號分隔的成員用戶清單

如下是系統中一個具體的/etc/group文件中記錄的例子:

adm:x:4:root,adm,daemon

以上面文件第四行為例子,它說明在系統存在一個adm的用戶組,它的信息如下:

用戶分組名為adm

用戶組口令已經加密,用“x”表示

GID為4

同組的成員用戶有:root,adm,daemon

(4) 組賬號文件——gshadow

如同用戶賬號文件的作用一樣,組賬號文件也是為了加強組口令的安全性,防止黑客對其實行的暴力攻擊,而采用的一種將組口令與組的其他信息相分離的安全機制。其格式如下所示內容:

用戶組名

加密的組口令

組成員列表

下面是系統中一個具體的/etc/gshadow文件的例子:

mail:::mail,postfix,exim

以組mail為例,其加密後的組口令被隱藏,其組成員包括mail、postfix和exim。其他的以“::”結尾的組表明沒有組成員,但是用戶可以自行添加。

總結

對於Linux系統的全方位保護,我們已經介紹了文件系統保護、進程管理、以及本文的用戶管理。除了已經介紹過的這三項,Linux日志管理也是必不可缺的一環,這將在下篇文章中進行介紹。

本文出自 “卓越始於足下” 博客,請務必保留此出處http://patterson.blog.51cto.com/1060257/399005

Copyright © Linux教程網 All Rights Reserved