譯者 | 趙青窕
最糟糕的密碼不是弱密碼,而是根本沒有密碼。作為系統(tǒng)管理員,您必須確保每個用戶帳戶都有一個強密碼。接下來我將簡要的解釋如何在 Linux 中查找密碼為空的帳戶。
在進入主題之前,讓我們快速回顧一下Shadow文件及其用途。
1.目錄
- Shadow文件介紹
- 查找Linux上所有沒有設(shè)置密碼的賬戶
- 查找特定狀態(tài)的密碼狀態(tài)
- 在Linux中,如何設(shè)置賬戶密碼
- 在Linux中,如何對賬戶上鎖
- 在Linux中,如何對賬戶進行解鎖操作
- 總結(jié)
2.Shadow文件
在 RHEL 系統(tǒng)中,用戶密碼經(jīng)過哈希處理并存儲在名為 /etc/shadow 的安全文件中。Shadow密碼文件包含用戶帳戶的用戶身份驗證信息和密碼過期策略(password aging)的詳細信息。
Shadow文件歸 root 用戶所有,且只有超級用戶才能讀取。您可以使用以下命令驗證Shadow文件的所有權(quán)和權(quán)限:
# ls -l /etc/shadow
---------- 1 root root 618 Apr 7 07:52 /etc/shadow
下面給出了影子文件中示例行的典型結(jié)構(gòu):
user1:$6$5ps/XV21$EFmQ463GJZnsdF/:19089:0:99999:7:::
您可能已經(jīng)知道,Shadow文件有九個字段,每個字段間采用冒號分隔。
接下來我們快速瀏覽一下每個字段。
- 字段1(登錄名)- 標識了一個登錄帳號,同文件/etc/passwd中的相同。
- 字段2(加密后密碼) -包含用戶對應(yīng)的采用散列加密方式加密后的密碼。如果此字段開頭有一個感嘆號 (!),則表示該用戶帳戶已被鎖定。如果此字段為空,則該用戶沒有密碼。
- 字段3(上次更改)- 此字段顯示最后一次修改密碼的時間。如果此字段包含 0,則用戶在下次登錄時將被強制更改密碼。
- 字段4(最短天數(shù))- 此字段顯示在允許用戶更改密碼之前必須經(jīng)過的最短天數(shù)(mindays)。您可以使用帶有 -m 選項的 chage 命令來更改此字段的值。
- 字段5(最大天數(shù))- 顯示用戶密碼過期前密碼有效的最大天數(shù) (maxdays)。如果該字段為 0,則表示此功能已禁用??梢允褂脦в?-M 選項的 chage 命令來更改該字段的值。
- 字段6(警告)- 表示用戶在密碼過期前收到更改密碼警告的天數(shù)(警告日)。您可以使用帶有 -W 選項的 chage 命令或帶有 -w 選項的 passwd 命令來更改此值。
- 字段7(密碼過期)- 定義用戶能夠使用過期密碼登錄的最大允許天數(shù)。這可以使用帶有 -I 標志的 chage 命令或帶有 -i 標志的 passwd 命令來更改。
- 字段8(帳戶到期) - 定義用戶的帳戶將到期且不再可用的天數(shù)。您可以使用帶有 -E 選項的 chage 命令更改此字段的值。
- 字段 9(保留)- 該字段保留供將來使用。
如上所述,加密后的密碼存儲在Shadow文件中每個條目的第二個字段中,就在用戶名之后。
因此,如果影子文件中的第二個字段為空,則用戶沒有密碼。下面,我向您展示一個查找所有無密碼用戶帳戶的示例。
3.查找所有沒有密碼的賬戶
要檢測所有沒有密碼的本地用戶帳戶,只需以 root 用戶身份運行以下命令:
# awk -F: '$2 == "" { print $1, "has empty password!. Please set a strong password ASAP!!" }' /etc/shadow
下面是上述命令的輸出示例:
ostechnix has empty password!. Please set a strong password ASAP!!
您還可以使用 getent 命令,同時結(jié)合 grep 和 cut 命令來識別 Linux 中的無密碼的本地用戶帳戶,其命令如下所示:
# getent shadow | grep -Po '^[^:]*(?=::)'
也可以采用下面的命令:
# getent shadow | grep '^[^:]*::' | cut -d: -f1
以上所有命令將僅列出密碼為空的本地用戶帳戶。如果要同時列出所有密碼為空的帳戶,下面的兩個命令都可以實現(xiàn)該功能:
# getent shadow | grep -Po '^[^:]*(?=:.?:)'
# getent shadow | grep '^[^:]*:.\?:' | cut -d: -f1
圖 1:查找無密碼的賬戶
4.查看特定賬戶的密碼狀態(tài)
上述命令將列出所有沒有密碼的帳戶。您還可以使用帶有 -S 標志的 passwd 命令檢查特定用戶帳戶的密碼狀態(tài)。
# passwd -S ostechnix
下面是一個上述命令的輸出示例:ostechnix NP 2022-04-07 0 99999 7 -1 (Empty password.)
passwd命令將指示給定用戶帳戶的密碼狀態(tài)。可能的值是:
- LK – 該帳戶被鎖定。
- NP - 該帳戶沒有密碼。
- PS – 該帳戶有一個可用的密碼。
注意:在基于 Debian 的系統(tǒng)中,密碼狀態(tài)將分別用L、N、P來標識。
5.在Linux中設(shè)置賬戶密碼
您可以作為無密碼用戶登錄,但并不推薦!您必須設(shè)置至少包含 8 個字符的強密碼,且密碼中要包括大寫字母、小寫字母、特殊字符和數(shù)字。
要在 Linux 中為用戶帳戶設(shè)置密碼,請以 root 用戶身份執(zhí)行passwd 命令,如下所示:
作為根用戶:
# passwd ostechnix
使用上述命令時,請將ostechnix 替換為您自己的用戶名。
現(xiàn)在我們用passwd命令來檢查帳戶的密碼狀態(tài):
# passwd -S ostechnix
輸出示例如下:
ostechnix PS 2022-04-07 0 99999 7 -1 (Password set, SHA512 crypt.)
圖 2:在Linux中設(shè)置賬戶密碼
在Linux中鎖定賬戶
有時,您想要鎖定一個沒有密碼的賬戶。如果是這樣,首先如上所述找到密碼為空的用戶,以root用戶的身份執(zhí)行帶有 -l 標志的 passwd 命令來鎖定賬戶,其命令如下所示:
# passwd -l ostechnix
下面是上述命令的輸出示例:
Locking password for user ostechnix.
passwd: Success
現(xiàn)在我們再來檢查下帳戶的狀態(tài):
# passwd -S ostechnix
其輸出示例如下:
ostechnix LK 2022-04-07 0 99999 7 -1 (Password locked.)
從輸出情況可以看出用戶已被鎖定,且不能再登錄系統(tǒng)了。
您還可以使用帶有 -L(大寫 L)標志的 usermod 命令來鎖定用戶。
# usermod -L ostechnix
在Linux中解鎖賬戶
要在 Linux 中解鎖無密碼用戶,請以root身份執(zhí)行 passwd 命令或帶有-p的usermod命令,其命令如下:
# passwd ostechnix
輸入兩次密碼以解鎖密碼。
使用 usermod 命令解鎖用戶密碼為空的用戶是不可能的,您可以使用 usermod -p 設(shè)置密碼來解鎖用戶的密碼。
# usermod -p <password-here> ostechnix
6.總結(jié)
在本教程中,我們解釋了什么是shadow文件以及該文件在 Linux 中的用途。然后,我們討論了在 Linux 中查找所有沒有密碼帳戶的各種命令。最后,我們學習了如何為用戶設(shè)置密碼,以及如何在 Linux 中鎖定和解鎖用戶。
原文鏈接:https://ostechnix.com/find-user-accounts-with-empty-password-in-linux/
譯者介紹
趙青窕,51CTO社區(qū)編輯,從事多年驅(qū)動開發(fā)。研究興趣包含安全OS和網(wǎng)絡(luò)安全領(lǐng)域,發(fā)表過網(wǎng)絡(luò)相關(guān)專利。