Scripting

AIX 7 - 檢查從未使用的使用者帳戶是否被鎖定的命令

  • June 10, 2021

在 AIX 7 上,我正在嘗試編寫一個命令來檢查我係統上從未登錄過的使用者帳戶並檢查它們是否被鎖定。如果存在從未登錄過且未處於鎖定狀態的使用者帳戶,則輸出此資訊。

另外,我試圖只查詢 UID 大於 100 的使用者帳戶。

我已經成功地製作了一個命令,它將檢查 UID 大於 100 的使用者列表,但我現在正在努力製作將檢查 lastlogon/locked 狀態的命令:

cat /etc/passwd | awk -F: '$3 > 100 { print $1 }'

我曾嘗試使用“lsuser -a account_locked”和“lsuser -a time_last_login”命令進行試驗,但沒有成功。

任何人都可以幫助我嗎?

我會將以前的解決方案改編為:

lsuser -C -a account_locked time_last_login id ALL | awk -F: '$4 > 100'

這為您提供了以下形式的以冒號分隔的輸出:

#name:account_locked:time_last_login:id
abcdef:false:1517991441:1594
ghijkl:false:1466418488:3430
mnopqr:false:1437508829:1081
stuvwx:false::2393
yz:false::2616

空欄位表示沒有值(例如最後兩個中的“account_locked”欄位)。我留下了標題行,以便可以看到與數據的相關性,但是如果您想跳過它,請調整awk腳本以跳過第一行:

lsuser -C -a account_locked time_last_login id ALL | awk -F: 'NR > 1 && $4 > 100'

如果您不希望報表中出現 UID,請調整awk語句以僅列印前三個欄位:

lsuser -C -a account_locked time_last_login id ALL | awk -F: '$4 > 100 { print $1":"$2":"$3 }'

最後回答哪些賬戶沒有被鎖定並且從未登錄過的問題:

lsuser -C -a account_locked time_last_login id ALL | awk -F: '$4 > 100 && $2 == "false" && $3 == "" { print $1 }'

如果您真的想從現有命令開始,您可以使用它生成使用者名作為參數lsuser,然後使用與awk上述相同的過濾器:

for username in $(awk -F: '$3 > 100 { print $1 }' < /etc/passwd)
do
 lsuser -C -a account_locked time_last_login "$username" | awk -F: '$2 == "false" && $3 == "" { print $1 }'
done

AIX 使用者名不能包含空格、製表符或換行符,因此只要您的 IFS 變數設置合理,就不會有意外拆分的風險。

引用自:https://unix.stackexchange.com/questions/653553