Unix函數(shù)庫(kù)中CrackLib原理及應(yīng)用
在Unix系統(tǒng)中,我們要學(xué)習(xí)的東西有很多。今天,我們就來(lái)學(xué)習(xí)下Unix函數(shù)庫(kù)中CrackLib原理及應(yīng)用。CrackLib是一個(gè)用于Unix函數(shù)庫(kù), 它可以用于編寫和口令有關(guān)的程序。其基本思想就是通過(guò)限制用戶使用使用過(guò)于簡(jiǎn)單、容易被猜測(cè)出來(lái)或容易被一些工具搜索到的密碼,來(lái)提高系統(tǒng)的安全性。
CrackLib并不是一個(gè)可以直接運(yùn)行使用的程序, 它只是一個(gè)Unix函數(shù)庫(kù), 可以利用其中的函數(shù)寫自己的程序或是加入其它程序中以提高安全性,如可以改寫passwd 使用戶在選擇密碼時(shí)受到限制。
CrackLib使用一個(gè)字典, 它查找字典以判斷用戶所選密碼是不是安全的密碼。用戶也可以加入其它信息, 使用自己的字典。CrackLib通過(guò)建立索引和二元查找,效率非常高,其字典大小通常只有同等字典數(shù)的一半。下面介紹如何運(yùn)用CrackLib。
1、Unix函數(shù)庫(kù)構(gòu)建cracklib字典
CrackLib可以很容易的在Internet上找到, 現(xiàn)在使用的版本多是2.7, 首先要確定字典安裝的路徑,即給DICTPATH賦值,形式為:目錄+字典文件名(不包括后綴),如:DICTPATH=/usr/local/lib/pw_dict.。該變量值將在所有調(diào)用CrackLib函數(shù)的程序中用到,字典文件通常包括 /usr/local/lib/pw_dict.pwd,/usr/local/lib/pw_dict.pwi,/usr/local/lib/pw_dict.hwm三個(gè)文件。
CrackLib 字典可直接從網(wǎng)上下載,也可以用它提供的工具生成。如果想加入其它信息, 使用自己的字典,可將含有新詞的文件放到SOURCEDICT目錄如"/usr/dict/words"下,CrackLib會(huì)將所有文件合并起來(lái),刪除多余的詞,將其壓縮成字典文件,通常只有原文件40%-60%的大小。
2、Unix函數(shù)庫(kù)在程序中調(diào)用函數(shù)
CrackLib函數(shù)可以被應(yīng)用于很多地方, 只需加入簡(jiǎn)單的幾行源碼, 就可以得到非常好的效果。 char *FascistCheck(char *pw, char *dictpath) 是CrackLib中最常用的函數(shù)。其中 pw是用戶選擇的密碼, 將被驗(yàn)證是不是安全的,dictpath是字典所在路徑。
FascistCheck() 返回一個(gè)空指針,說(shuō)明口令很安全,否則返回診斷出的字符串。下面是一個(gè)口令設(shè)置的簡(jiǎn)單示例, 用以說(shuō)明CrackLib函數(shù)用法.
- #ifndef CRACKLIB_DICTPATH
- #define CRACKLIB_DICTPATH "/usr/local/lib/pw_dict"
- #endif
- ...
- ...
- ...
- char *msg;
- while(1) {
- passbuf = getpass("請(qǐng)?jiān)O(shè)定新密碼:");
- if (!*passbuf) {
- (void)printf("密碼設(shè)定取消, 繼續(xù)使用舊密碼\n");
- break;
- }
- if (strlen(pussbuf) <= 4 ││ !strcmp( passbuf, newuser.userid ) ) {
- (void)printf("密碼太短或與使用者代號(hào)相同, 請(qǐng)重新輸入\n ");
- continue;
- }
- if (msg = (char*) FascistCheck(passbuf, CRACKLIBPATH)) {
- printf("請(qǐng)另選密碼! (%s)\n",msg);
- continue;
- }
- strncpy( newuser.passwd, passbuf, PASSLEN );
- passbuf = getpass("請(qǐng)?jiān)佥斎胍淮文愕拿艽a );
- if( strncmp( passbuf, newuser.passwd, PASSLEN ) != 0 ) {
- prints("密碼輸入錯(cuò)誤, 請(qǐng)重新輸入密碼.\n") ;
- continue;
- }
- passbuf[8] = '\0' ;
- break;
- }
這樣通過(guò)限制用戶使用不安全的密碼, 可以極大地提高系統(tǒng)的安全性。Unix函數(shù)庫(kù)中的CrackLib原理及應(yīng)用我們就講解到這里了。
【編輯推薦】