GNU/Linux >> Tutoriels Linux >  >> Linux

Vérifier le mot de passe de l'utilisateur avec un script shell

Il n'existe aucun moyen entièrement portable de vérifier le mot de passe de l'utilisateur. Cela nécessite un exécutable privilégié, donc ce n'est pas quelque chose que vous pouvez créer à partir de zéro. PAM, qui est utilisé sur la plupart des systèmes Linux non embarqués ainsi que sur de nombreux systèmes embarqués et la plupart des autres variantes Unix, est livré avec un binaire setuid mais il n'a pas d'interface shell directe, vous devez passer par la pile PAM. /P>

Vous pouvez utiliser une liaison PAM en Perl, Python ou Ruby.

Vous pouvez installer l'un des nombreux checkpassword implémentations.

Si l'utilisateur est autorisé à exécuter sudo pour quoi que ce soit, alors sudo -kv demandera l'authentification (sauf si cela a été désactivé dans la configuration sudo). Mais cela ne fonctionne pas s'il n'y a pas de règle sudoers concernant l'utilisateur.

Vous pouvez exécuter su . Cela fonctionne sur la plupart des implémentations. C'est probablement le meilleur pari dans votre cas.

if su -c true "$USER"; then
  echo "Correct password"
fi

Vous pouvez valider qu'un local donné le mot de passe est correct pour un nom d'utilisateur donné en utilisant le fichier shadow.

Sur la plupart des distributions modernes, les mots de passe hachés sont stockés dans le fichier shadow /etc/shadow (qui n'est lisible que par root). En tant que root, tirez la ligne du fichier shadow pour l'utilisateur donné comme ceci :

cat /etc/shadow | grep username

Vous verrez quelque chose comme ceci :

username:$1$TrOIigLp$PUHL00kS5UY3CMVaiC0/g0:15020:0:99999:7:::

Après le nom d'utilisateur, il y a $1. Cela indique qu'il s'agit d'un hachage MD5. Après cela, il y a un autre $, puis (dans ce cas) TrOIigLp suivi d'un autre $. TroIigLp est le sel. Vient ensuite le mot de passe haché, qui a été haché à l'aide du sel - dans ce cas PUHL00kS5UY3CMVaiC0/g0.

Maintenant, vous pouvez utiliser openssl pour hacher le mot de passe donné en utilisant le même salt, comme ceci :

openssl passwd -1 -salt TrOIigLp

Entrez le mot de passe donné lorsque vous y êtes invité, la commande openssl doit calculer le hachage MD5 à l'aide du sel fourni, et il doit être exactement le même que celui ci-dessus à partir du fichier shadow. Le -1 dans la commande ci-dessus est pour le hachage MD5.


Voici une solution relativement robuste qui fonctionne avec les utilisateurs locaux et distants et tente de s'authentifier auprès de la pile PAM complète en tant qu'utilisateur en question, plutôt que de simplement comparer les hachages de mots de passe.

#!/usr/bin/env ruby

require 'rpam'

username = ARGV[0]
password = ARGV[1]

if Rpam.auth(username, password, service: 'system-auth')
  puts 'authentication successful'
  exit 0
else
  puts 'authentication failure'
  exit 1
end

Pour l'exécuter :enregistrez-le sous ./authenticate_as.rb , chmod +x ./authenticate_as.rb , et ./authenticate_as.rb $username $password . Nécessite Ruby et la gemme rpam, au cas où ce ne serait pas évident.


Linux
  1. Montage Samba avec invite de mot de passe en tant qu'utilisateur non root ?

  2. Passer un nom de fichier avec des espaces à un script shell ?

  3. Script Shell avec fonction et paramètre comme variables ?

  4. Comment ajouter automatiquement un compte utilisateur ET un mot de passe avec un script Bash ?

  5. Automatisez mysql_secure_installation avec la commande echo via un script shell

Trouver des comptes d'utilisateurs avec un mot de passe vide sous Linux

Changer le répertoire de travail dans le shell avec un script python

Comment exécuter le script en tant qu'autre utilisateur sans mot de passe ?

Répertoire de changement de script shell avec variable

Comment vérifier le mot de passe avec Linux?

Exécuter un script shell en tant qu'utilisateur différent