Linux用戶登陸密碼的生成

原文連接: https://voidint.github.io/pos...php

1、從自動化需求提及

如何生成一個Linux用戶登陸密碼?可能有人會說用passwd生成。的確,passwd命令可以幫助咱們重置用戶登陸密碼,可是這並無解答如何生成一個Linux用戶登陸密碼的疑問。html

對於這個問題,秉承着實用主義的精神,我本來也不會去深究。畢竟,安裝的時候會設置密碼,安裝完畢後能經過passwd命令重置密碼,學會這兩點後已知足通常的需求已經綽綽有餘了。linux

可是,對於自動化而言,知道以上的兩點是不夠的。Linux的自動化安裝過程當中,設置用戶登陸密碼這事,確定不能有人爲干預,不然談什麼自動化。操做系統安裝完畢後,也有可能會有重置用戶密碼的自動化需求,此時使用passwd命令來重置用戶密碼,也不見得是最佳的選擇。git

若是明白了密碼的生成機制,那麼這個自動化需求的難題也就迎刃而解了。github

2、密碼生成理論

有Linux基礎的人必定知道,Linux的用戶登陸密碼信息是存放在/etc/shadow文件當中的,而且該文件只有root用戶可以訪問。如下會以voidint這個用戶爲例,看一下這個用戶的密碼信息。算法

$ sudo cat /etc/shadow | grep voidint
[sudo] password for voidint:
voidint:$6$3kheX/Vg$TGum9JEjfmGsj8Mfk3SUY/d/bWkJgnRimCxoaDTX7wcgrraYvU.fiziEUdpDglWc58uPZqWJhKNjiXayP9Q6b0:16892::::::

很明顯,這個字符串被:符號分隔成了9段。咱們這裏只關注前兩段,至於每一段具體的含義,能夠戳這裏自行閱讀。第一段,是用戶名稱。第二段,即爲用戶密碼。其實密碼這種稱呼並不許確。相對準確的說法是,用戶密碼明文通過某種哈希算法計算所得到的密文。可是,鑑於這個相對準確的說法實在太長太拗口,不便於表達。所以,如下提到的密碼在無特別說明狀況下,一概指的是密碼明文的密文。docker

言歸正傳,看到這裏相信好多人會和我有同樣的思考: 是否是隻要知道了密碼生成的算法,並按照此算法生成一個知足Linux要求的密碼,再把密碼覆蓋這個第二段的內容,那麼用戶密碼就被重置了嗎?shell

仔細看這段密碼,會發現它是由$xxx$xxx$xxx的格式構成,即由$符號分隔的3端字符串構成。查閱資料後得知,這個格式能夠進一步歸納爲$id$salt$encrypted。簡要說明下$id$salt$encrypted中各個部分的含義:centos

  • id: 加密(確切說是哈希)所用算法的代號。
ID Method
1 MD5
2a Blowfish (not in mainline glibc; added in some Linux distributions)
5 SHA-256 (since glibc 2.7)
6 SHA-512 (since glibc 2.7)
  • salt: 由程序隨機生成的字符串,即)。
  • encrypted: 用戶密碼明文字符串加鹽後使用哈希算法所得的哈希值,即哈希(明文+鹽)

特別說明工具

資料中還提到了另一種形式的密碼——$id$rounds=yyy$salt$encrypted。其中,鹽的部分換成了rounds=yyyyyy是一個由用戶(調用方)提供的[1000, 999999999]之間的整數。

3、密碼生成實踐

知道了上面這部分基礎知識,那麼接下來就是理論指導實踐的環節了。具體能夠藉助什麼工具來生成密碼呢?這裏使用的grub-crypt工具。你能夠在某個Linux發行版中安裝這個工具,也可使用我提供的這個dockerfile

  • 使用sha512算法生成密碼
$ grub-crypt --sha-512
Password:
Retype password:
$6$r1jcut3Crl8bSIMo$XfKnrl4Ykzk2KPQ59MCXcUef9OjZWoZrIp7aeWwnCzIVQY1p/G1EiJQE4DYFej783NlvR5KtKYXs4P/hQaVst.
  • 將生成的密碼寫入/etc/shadow文件中(該文件只有root用戶纔有權限讀寫,若root也無權限,則賦予600權限便可)
$ sudo cat /etc/shadow | grep voidint
voidint:$6$r1jcut3Crl8bSIMo$XfKnrl4Ykzk2KPQ59MCXcUef9OjZWoZrIp7aeWwnCzIVQY1p/G1EiJQE4DYFej783NlvR5KtKYXs4P/hQaVst.:16892::::::
  • 退出當前用戶並使用新修改的密碼登陸

4、參考

相關文章
相關標籤/搜索