linux的root密碼存在於“/etc/shadow”這個文件中,不過要有root權限才能在linux下看到“/etc/shadow”這個文件。我用自己的虛擬機做一個演示,如下圖所示:
上面這個圖中,我沒有設置root的密碼,可以看到root那一行最開始有個“!”。接着看下面的圖,已經設置了root密碼:
在這里,主要是對shadow密碼存儲結構做一些介紹,參考了一下網絡上的相關內容,自己總結一下。
密文字符串格式為:$id$salt$encrypted,通過$來分割,其中$id用來指定使用的算法,如下表格所示:
ID | Method |
1 | MD5 |
2a | Blowfish(not in mainline glibc;added in some Linux distribution) |
5 | SHA-256(since glibc 2.7) |
6 | SHA-512(since glibc 2.7) |
從我上面的截圖可以看到,密文采用的是SHA-512算法。$salt是一個最多16個字符的隨機生成的字符串,用來增加破解難度。$encrypted就是通過加密算法和salt算出來的密文。
接下來,描述一下這個密碼存儲的結構。
- 賬戶名:賬戶名與/etc/passwd里面的賬戶名是一一對應的關系。
- 密碼:這里可以看到3類,分別是奇奇怪怪的字符串、*和!!其中,奇奇怪怪的字符串就是加密過的密碼文件。星號代表帳號被鎖定,雙嘆號表示這個密碼已經過期了。奇奇怪怪的字符串是以$6$開頭的,表明是用SHA-512加密的,$1$ 表明是用MD5加密的、$2$ 是用Blowfish加密的、$5$是用 SHA-256加密的。
- 修改日期:這個是表明上一次修改密碼的日期與1970-1-1相距的天數密碼不可改的天數:假如這個數字是8,則8天內不可改密碼,如果是0,則隨時可以改。
- 密碼需要修改的期限:如果是99999則永遠不用改。如果是其其他數字比如12345,那么必須在距離1970-1-1的12345天內修改密碼,否則密碼失效。
- 修改期限前N天發出警告:比如你在第五條規定今年6月20號規定密碼必須被修改,系統會從距離6-20號的N天前向對應的用戶發出警告。
- 密碼過期的寬限:假設這個數字被設定為M,那么帳號過期的M天內修改密碼是可以修改的,改了之后賬戶可以繼續使用。
- 帳號失效日期:假設這個日期為X,與第三條一樣,X表示的日期依然是1970-1-1相距的天數,過了X之后,帳號失效。
- 保留:被保留項,暫時還沒有被用上。
參考文章:http://www.yucoat.com/linux_opensource/linux_etc_shadow.html