用于获取锁定、解锁、过期的用户帐户列表计数的命令

用于获取锁定、解锁、过期的用户帐户列表计数的命令

我有这三个命令来获取用户数量、锁定的用户帐户数量、解锁的用户帐户数量、设置为永不过期的密码数量。

    cut -d: -f1 /etc/passwd|wc -l
    cat /etc/passwd | cut -d : -f 1 | awk '{ system("passwd -S " $0) }'|wc -l
 awk -F: '{ system("passwd -S " $1)}' /etc/passwd | grep " PS "|wc -l
    cut -f 1 -d: /etc/passwd | xargs -n 1 -I {} bash -c ' echo -n {}" "; chage -l {} | fgrep "Password expires"' | column -t|wc -l

有没有一种方法可以让我向其添加 echo 命令和/或使用一个命令来获取所有这些信息并获取设置为过期的帐户信息? echo "用户数=xx",锁定的用户数=xx,密码永不过期的用户数=xx,设置过期的用户数?

谢谢

答案1

您可以很容易地将这三个中的两个(用户计数和锁定帐户计数)与awked结合起来passwd -Sa,但是您必须循环起来chage才能显示过期的密码。

passwd -Sa |  awk 'BEGIN {lockedusers=0} $2 ~ /L/ {lockedusers++} END {print "Total users:",NF;print "Locked users:",lockedusers}'
neuser=0
for user in $(cut -f1 -d: /etc/passwd); do 
   if chage -l "$user" | grep -i '^Password expires' | grep -q never; then 
      neuser=$((neuser+1))
   fi
done
echo "Non-expiring users: $neuser"

如果您的实现passwd缺乏-a(例如 Red Hat 派生的发行版),您可以使用类似的for循环:

neuser=0
for user in $(cut -f1 -d: /etc/passwd); do
   if chage -l "$user" | grep -i '^Password expires' | grep -q never; then
      neuser=$((neuser+1))
   fi
   passwd -S "$user"
done | awk 'BEGIN {lockedusers=0} $2 ~ /L/ {lockedusers++} END {print "Total users:",NF;print "Locked users:",lockedusers}'
echo "Non-expiring users: $neuser"

答案2

下面的脚本将返回已过期以及将在未来 7 天内过期的用户列表。

cat /etc/shadow | cut -d: -f1,8 | sed /:$/d > /tmp/expirelist.txt
totalaccounts=`cat /tmp/expirelist.txt | wc -l`
for((i=1; i<=$totalaccounts; i++ ))
do
    tuserval=`head -n $i /tmp/expirelist.txt | tail -n 1`
    username=`echo $tuserval | cut -f1 -d:`
    userexp=`echo $tuserval | cut -f2 -d:`
    userexpireinseconds=$(( $userexp * 86400 ))
    todaystime=`date +%s`
    #check if the user expired or not?
    if [ $userexpireinseconds -ge $todaystime ] ;
    then
        timeto7days=$(( $todaystime + 604800 ))
    if [ $userexpireinseconds -le $timeto7days ];
    then
        echo "The user account $username going to expired in next 7 days"
    fi
    else
        echo  "The user account $username already expired"
    fi
done

相关内容