Compare os usuários de um array com o arquivo / etc / shadow

3

Eu quero verificar todos os usuários que não têm uma senha definida.

Por exemplo, um usuário com a seguinte entrada em /etc/passwd

test01::15164: ...* 

não tem senha definida. Eu gostaria de listar todos esses usuários.

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

O código não fornece resultados nem erros

Solução

A entrada no arquivo de sombra sem uma senha é userteste01 & 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

Resultado

usertest01
Human user
usertest01
Changing password for user usertest01.
passwd: all authentication tokens updated successfully.
tecusertest01
Technical User
    
por BlueFox 09.01.2014 / 13:11

1 resposta

6

Você pode simplesmente verificar usando:

Nota: - Execute o seguinte comando usando sudo , porque /etc/shadow tem apenas acesso de leitura ao usuário root & grupo.

awk -F: '$2 == ""' /etc/shadow

OR

awk -F: 'length($2) == 0' /etc/shadow

Usando o 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 

Atualização 1:

Can i output the users or give them a temporary password?

Acima de Bash Script já está dando nomes de usuário de saída.

você pode configurar uma senha temporária para o usuário usando:

echo "username:password" | chpasswd 

Em seguida, você pode informar seus usos para alterar a senha no primeiro login:

chage -d 0 username

Atualização 2: Algumas informações para verificar segundo arquivado com base em, porque OP mencionar que o segundo arquivado está em branco, mas isso não é possível a menos que seja editado à mão.

/etc/passwd file O segundo campo denota x significa que a senha está no arquivo /etc/shadow e em

/etc/shadow 2º campo tem:

  • !{ecrypted passwd} == o usuário está bloqueado
  • * ou ! == * é principalmente para conta do sistema / daemon. o usuário não poderá usar uma senha unix para efetuar login (mas o usuário pode efetuar login no sistema por outros meios).
por 09.01.2014 / 13:17