linxu傳統口令與影子口令

/etc/passwd是存放用戶的基本信息的口令文件。該口令文件的每一行都包含由6個冒號分隔的7個域:username: passwd: uid: gid: comments: Directory: shell

以上從左到右7個域分別敘述如下:

username:是用戶登陸使用的名字。

passwd:是口令密文域。密文是加密過的口令。如果口令經過

shadow則口令密文域只顯示一個x,通常,口令都應該經過shadow以確保安全。如果口令密文域顯示爲*,則表明該用戶名有效但不能登陸。如果口令密文域爲空則表明該用戶登陸不需要口令。

uid:系統用於唯一標識用戶名的數字,uid系統是這樣分配的:

0  超級用戶

1~10 守護程序和僞用戶

11~99  系統保留用戶

100~   正常用戶

gid:表示用戶所在默認組號。由/etc/group文件決定。

comments:描述用戶的個人信息。

directory:定義用戶的初始工作目錄。

shell:就是指定用戶登陸到系統後啓動的外殼程序。

 

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

其中:

lastchg:表示從1970年1月1日起到上次修改口令所經過的天數。

min:表示兩次修改口令之間至少經過的天數。

max:表示口令還會有效的最大天數,如果是99999則表示永不過期。

warn:表示口令失效前多少天內系統向用戶發出警告。

inactive:表示禁止登陸前用戶名還有效的天數。

expire:表示用戶被禁止登陸的時間。0

flag:無意義,未使用。

 

啓用影子口令

 

RedHat Linux缺省安裝shadow,如果你發現你的系統的/etc/passwd文件仍然可以看到密文,說明你沒有啓用shadow。可以執行pwconv來啓用shadow。

在RedHat Linux 7.1中,影子工具包(shadow utils)包含了幾個工具支持以下功能:

傳統口令與影子口令之間的轉換工具:pwconv、pwunconv。

驗證口令,組和相應的影子文件:pwck、grpck。

以符合工業標準的方法增加、刪除和修改用戶帳戶:useradd、usermod、userdel。

以符合工業標準的方法增加、刪除和修改用戶組:groupadd、groupmod、groupdel。

以符合工業標準的方法管理文件/etc/group。

無論系統是否啓用shadow機制,上述工具都可以正常使用。

 

更改Linux口令的最短長度Linux系統默認最短口令長度爲5個字符,這個長度不足以保證口令的健壯性,應該改爲最短8個字符,編輯/etc/login.defs文件,在此文件中,將PASS_MIN_LEN

5改爲:PASS_MIN_LEN8

 

PAM是pluggable authentication modules系統的一個實現,它最初有sun開發;很快被Linux社區的接受,並且開發了更多的模塊。其目標是提供一套可用於驗證用戶身份的函數庫,從而將認證從應用程序開發中獨立出來。下面是一些PAM在口令保護中的簡單例子。

使用pam-tally.so
pam-tally.so是一個PAM模快,用於監視用戶登陸失敗次數並該值超過特定值時做出反映。例如用戶在登陸3次失敗後,其帳號會被鎖定一段時間,或永久鎖定(或到聯繫到系統管理員)。將下面行添加到/etc/pam.d/login:account required /lib/security/pam-tally.so deny=3 no-magic-root這行配置pam-tally.so ,使之在用戶連續3次登陸失敗後鎖定其帳號。這樣攻擊者就只有3次猜測口令的機會,之後就會被剔出。pam-cracklib.so 是alecmuffett編寫的PAM版本的cracklib庫,用於檢查口令的強度,他首先調用cracklib例程來測試口令是否能被破解。在通過這個測試後再進行如下測試:

口令是否迴文?

新口令是不是舊口令的大小寫變換版本?

新口令和舊口令是否非常相似?

口令是否太短?

新口令是不是舊口令的移位版本?

要以此測試每個新口令。只需要在

/etc/pam.d/passwd文件中用如下行替換原來pam-unix.so模塊;passWord required pam-cracklib.so retry=3  password required pam-unix.so use-authtok md5這樣就給用戶三個機會來選擇合適的健壯口令。也可以強制口令的長度:

password required pam-cracklib.so retry=3 minlength=10

password required pam-unix.so use-authtok md5

強制MD5散列,有些linux發佈默認配置下使用DES散列,而非MD5散列。要想強制所有新口令都以MD5散列方式保存,只需直接把md5添加到/etc/pam.d/passwd文件的pam-unix.so行中:password required pam-unix.so use-authtok md5 下面這段perl代碼可用來生成強口令
# ! /usr/bin/perl -w

#passwd-generator.pl

use strict;

my @chars=(33..91,93..126);

my $num-chars=@chars;

my $length;

my $punt='! "#$%&'()*+,-./:;<=>?@[\\]^{}~ ';

print "enter number of characters in your passwd:"

chmop($length=<STDIN>);

die "length must be greater than 6!" if $length<=5;

while(1){

my $password=' ';

foreach (1..Slength){

Spassword.=chr(Schars[int(rant(Snum-chars))]);

}

if($passwd=~/[a-z]/ and $passwd=~/[A-Z]/ and

$passwd=~/[0-9]/ and $passwd=~/[$punt]/ {

print Spassword, "\n"  

exit;

}

 }

 

發佈了36 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章