Linux

Bash - 對每個使用者帳戶執行“chage”命令

  • May 18, 2021

我必須在每個環境中審核我們的 linux 伺服器上的使用者帳戶,所以我想編寫腳本檢查每個帳戶是否過期。我有一個for 循環,它提取 /etc/passwd 中列出的使用者帳戶並將它們儲存在一個數組中。

#!/bin/bash
users = $(awk -F: '{ print $1}' /etc/passwd)
uservar=($users)

for value in "${uservar[0]}"
do chage -l $value
done

理想情況下,該腳本將首先顯示使用者名,然後在新行上顯示該使用者帳戶的帳戶到期日期和其他資訊。該過程將針對每個帳戶重複。目前它只顯示沒有使用者名的所有使用者帳戶的帳戶到期和日期,所以我無法區分這些帳戶。一切也都堆疊在一起,因此難以閱讀。理想情況下,輸出如下所示:

userA
Last Password Change:    1/2/34
Password Expires:        1/2/34
Password Inactive:       1/2/34
.....

userB
Last Password Change:    1/2/34
Password Expires:        1/2/34
Password Inactive:       1/2/34
.....

我將不勝感激任何幫助/建議。

你的問題的字面答案:

#!/bin/bash
users=$(awk -F: '{ print $1}' /etc/passwd)

for value in $users
do 
     echo $value
     chage -l $value
     echo "....."
     echo ""
done

應該以以下形式生成輸出

userA
Last Password Change:    1/2/34
Password Expires:        1/2/34
Password Inactive:       1/2/34
.....

userB
Last Password Change:    1/2/34
Password Expires:        1/2/34
Password Inactive:       1/2/34
.....

請注意,資訊chage顯示的來源在文件的欄位中編碼/etc/shadow(表示為自 1970 年 1 月 1 日以來的天數)。

直接解析該文件可能比使用chage和/或其他將這些欄位轉換為人類可讀輸出並對其進行解析的工具效率更高。

引用自:https://serverfault.com/questions/1063989