como posso verificar se uma conta local tem uma senha habilitada?

1

Eu preciso fazer um script que verifique se uma conta local tem senha ativada ou simplesmente uma senha em branco. Eu estou supondo que eles são a mesma coisa, sim?

eu pesquisei e tentei a senha -S comando de usuário, mas tudo que eu tenho é um erro. eu tenho que executar isso no console do terminal local ou há uma maneira de transformar isso em um script?

im super novo então estou ainda um pouco confuso com o conceito de script em geral. basicamente eu tenho que escrever o script em um dos editores de texto, salvá-lo como arquivo .sh, dar permissão a RWX, então executá-lo através do terminal, correto?

    
por ujjj56j56j 03.07.2017 / 22:15

1 resposta

1

A senha de um usuário é armazenada no arquivo /etc/shadow . O arquivo consiste em campos : -seperated. O segundo campo é a senha. Se uma senha for definida, um hash será mostrado. Se uma conta estiver desativada ou não tiver senha, ela mostrará ! ou nada.

Você pode usar um script como este:

#!/bin/bash

input="$1"
passwordField=$(cat /etc/shadow | grep "$1" | cut -d ':' -f 2)

echo "Password field contains: ${passwordField}"

if [[ "${passwordField}x" == "x" || "$passwordField" == '!' ]]; then
  echo "Password is not set or account is disabled"
else
  echo "Password is set"
fi

Armazene este texto em um arquivo. Torne o arquivo executável com chmod +x filename e execute o arquivo como usuário root com o nome de usuário como argumento:

root@frisbee:~# ./checkpw.sh test1
Password field contains: $6$WLmjys98$70x/mzE/syE4CGgK9GvcN0Bz1b9.6Ka.JsZQ7W9OFwvTx17MKtQegQKVweaRl5M3X.Wm/EDdBOEEfdalDR225/
Password is set
root@frisbee:~# passwd -d test1
passwd: password expiry information changed.
root@frisbee:~# ./checkpw.sh test1
Password field contains: 
Password is not set or account is disabled

Este script simples tem a limitação de que, se o argumento fornecido fizer parte de dois ou mais nomes de usuário, ele não terá saída confiável.

    
por 03.07.2017 / 22:56

Tags