使用 /etc/shadow 文件比较数组外的用户

Blu*_*Fox 3 linux shell-script

我想检查所有没有设置密码的用户。

例如,具有以下条目的用户 /etc/passwd

test01::15164: ...* 
Run Code Online (Sandbox Code Playgroud)

没有设置密码。我想列出所有此类用户。

declare -a liste=(test 01 test02)
for a in `echo ${liste[@]}`
do
    for b in `cat /etc/shadow`
    do
        if [[ "$a" == "$b" ]]
        then
            echo $a
        fi
    done
done
Run Code Online (Sandbox Code Playgroud)

代码没有给出任何输出或错误

解决方案

没有密码的影子文件中的条目是 usertest01 和 tecusertest01

declare -a liste=(usertest01 usertest 02 tecusertest01 tecusertest02)

for sdw in `awk -F: '$2 == ""' /etc/shadow`

        do

                user=`echo "$sdw" | awk -F: '{print $1}'`

                echo "$user"

                echo  "${liste[@]}" | grep "$user" > /dev/null

                if [ $? -eq 0 ]
                        then

                                echo "Human user"

                                echo "$user"  | passwd "$user" --stdin

                        else

                                echo "Technical User"

                fi

        done
Run Code Online (Sandbox Code Playgroud)

输出

usertest01
Human user
usertest01
Changing password for user usertest01.
passwd: all authentication tokens updated successfully.
tecusertest01
Technical User
Run Code Online (Sandbox Code Playgroud)

Rah*_*til 6

您可以简单地检查使用:

注意:- 使用 运行以下命令sudo,因为/etc/shadow只有 root 用户和组的读取权限。

awk -F: '$2 == ""' /etc/shadow
Run Code Online (Sandbox Code Playgroud)

或者

awk -F: 'length($2) == 0' /etc/shadow
Run Code Online (Sandbox Code Playgroud)

使用 Bash

#!/usr/bin/env bash

set -f  # do not expand * 

while IFS=":" read -a user
do 
    [[ -z ${user[1]} ]] && 
    echo "User : ${user[0]} has no password"

done < /etc/shadow 
Run Code Online (Sandbox Code Playgroud)

更新 1:

我可以输出用户或给他们一个临时密码吗?

上面的 Bash 脚本已经给出了输出用户名。

您可以使用以下方法为用户设置临时密码:

echo "username:password" | chpasswd 
Run Code Online (Sandbox Code Playgroud)

然后你可以强行告诉你的用户在第一次登录时更改密码:

chage -d 0 username
Run Code Online (Sandbox Code Playgroud)

更新 2: 基于检查第二个文件的一些信息,因为 OP 提到第二个文件是空白的,但这是不可能的,除非它是手动编辑的。

/etc/passwd文件第二个字段表示x密码在/etc/shadow文件中,在

/etc/shadow 第二个字段有:

  • !{ecrypted passwd} ==用户被锁定
  • *! ==*主要用于系统/守护程序帐户。用户将无法使用unix密码登录(但用户可以通过其他方式登录系统)。