Linux shadow檔案中密碼的加密方式

2021-06-26 12:22:01 字數 2179 閱讀 6192

1) 檢視shadow檔案的內容

cat /etc/shadow

可以得到shadow檔案的內容,限於篇幅,我們舉例說明:

root:$1$bg1h/4mz$x89tqh7tpi9dx1b9j5ysf.:14838:0:99999:7:::

其格式為:

:::::::

【注】:shadow檔案為可讀檔案,普通使用者沒有讀寫許可權,超級使用者擁有讀寫許可權。如果密碼字串為*,則表示系統使用者不能被登入;如果字串為!,則表示使用者名稱被禁用;如果字串為空,則表示沒有密碼。

我們可以使用passwd –d 使用者名稱 清空乙個使用者的口令密碼。

2) 解析shadow檔案中密碼字串的內容

對於示例的密碼域$1$bg1h/4mz$x89tqh7tpi9dx1b9j5ysf.,我們參考了linux標準原始檔passwd.c,在其中的pw_encrypt函式中找到了加密方法。

我們發現所謂的加密演算法,其實就是用明文密碼和乙個叫salt的東西通過函式crypt()完成加密。

而所謂的密碼域密文也是由三部分組成的,即:$id$salt$encrypted。

【注】:id為1時,採用md5進行加密;

id為5時,採用sha256進行加密;

id為6時,採用sha512進行加密。

3) 資料加密函式crypt()講解

i. 標頭檔案:#define _xopen_source

#include 

ii. 函式原型:char *crypt(const char *key, const char *salt);

iii. 函式說明:crypt()將使用des演演算法將引數key所指的字串加以編碼,key字串長度僅取前8個字元,超過此長度的字元沒有意義。引數salt為兩個字元組成的字串,由a-z、a-z、0-9,』.』和』/』所組成,用來決定使用4096種不同內建**的哪一種。函式執行成功後會返回指向編碼過的字串指標,引數key所指向的字串不會有所改動。編碼過的字串長度為13個字元,前兩個字元為引數salt代表的字串。

iv. 返回值:返回乙個指向以null結尾的密碼字串

v. 附加說明:使用gcc編譯時需要加上 –lcrypt

4) 加密引數salt的由來

在我們的示例密碼域中salt為bg1h/4mz,那麼它又是如何來的?

我們還是從標準原始檔passwd.c中查詢答案。在passwd.c中,我們找到了與salt相關的函式crypt_make_salt。

在函式crypt_make_salt中出現了很多的判斷條件來選擇以何種方式加密(通過id值來判斷),但其中對我們最重要的一條語句是gensalt(salt_len)。

5) 最終結論

在我們每次改寫密碼時,都會隨機生成乙個這樣的salt。我們登入時輸入的明文密碼經過上述的演化後與shadow裡的密碼域進行字串比較,以此來判斷是否允許使用者登入。

【注】:經過上述的分析,我們發現破解linux下的口令也不是什麼難事,但前提是你有機會拿到對方的shadow檔案。

6) 示例**(測試**):

#include 

#include 

#include 

#include 

#include 

#include 

int main(int argc, char *argv)

if (geteuid() != 0)

struct spwd *shd= getspnam(argv[1]);

if(shd != null)

} i++;

} if(j<3)

perror("file error or user cannot use.");

if(argc==3)

} return 0;

} 編譯: gcc passwd.c -lcrypt -o passwd

執行: ./passwd root 123

結果: salt: $1$bg1h/4mz$, crypt: $1$bg1h/4mz$x89tqh7tpi9dx1b9j5ysf.

shadowd passwd: $1$bg1h/4mz$x89tqh7tpi9dx1b9j5ysf.

scp免密傳輸檔案

scp 命令 例如 把本地 backup a.txt檔案傳輸至192.168.80.128伺服器,賬號root 目錄為 backup scp backup a.txt root 192.168.80.128 backup 反之把192.168.80.128伺服器下backup a.txt檔案傳輸至本...

ubantu中免密登陸

一 執行ssh keygen t rsa,之後一直回車,會出現如下圖所示。二 執行命令cat ssh id rsa.pub ssh authorized keys,執行完之後,你可以去用ls l命令去 ssh目錄下面檢視是否含有以下幾個檔案 再修改authorized keys的許可權命令是chmo...

Linux設定scp免密傳輸檔案

檢查ssh key是否已經生成過 ls al ssh生成新的ssh key,三次回車 ssh keygen t rsascp免密傳輸設定 方法一 ssh copy id i root worker1方法二 scp root ssh id rsa.pub 主機b root ssh authorized...