GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Überprüfen Sie das Passwort des Benutzers mit einem Shell-Skript

Es gibt keine vollständig portable Möglichkeit, das Passwort des Benutzers zu überprüfen. Dies erfordert eine privilegierte ausführbare Datei, sodass Sie dies nicht von Grund auf neu erstellen können. PAM, das auf den meisten nicht eingebetteten Linux-Systemen sowie vielen eingebetteten Systemen und den meisten anderen Unix-Varianten verwendet wird, enthält eine setuid-Binärdatei, aber es hat keine direkte Shell-Schnittstelle, Sie müssen über den PAM-Stack gehen.

Sie können eine PAM-Bindung in Perl, Python oder Ruby verwenden.

Sie können einen von mehreren checkpassword installieren Implementierungen.

Wenn der Benutzer sudo für irgendetwas ausführen darf, dann sudo -kv fordert zur Authentifizierung auf (es sei denn, dies wurde in der sudo-Konfiguration deaktiviert). Aber das funktioniert nicht, wenn es keine sudoers-Regel bezüglich des Benutzers gibt.

Sie können su ausführen . Dies funktioniert bei den meisten Implementierungen. Dies ist wahrscheinlich die beste Wahl in Ihrem Fall.

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

Sie können dies mit einem bestimmten local validieren das Passwort für einen bestimmten Benutzernamen korrekt ist, der die Shadow-Datei verwendet.

Bei den meisten modernen Distributionen werden die gehashten Passwörter in der Shadow-Datei /etc/shadow gespeichert (die nur von root gelesen werden kann). Ziehen Sie als root die Zeile aus der Schattendatei für den angegebenen Benutzer wie folgt:

cat /etc/shadow | grep username

Sie werden so etwas sehen:

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

Hinter dem Benutzernamen steht $1. Dies zeigt an, dass es sich um einen MD5-Hash handelt. Danach kommt ein weiteres $, dann (in diesem Fall) TrOIigLp gefolgt von einem weiteren $. TrOIigLp ist das Salz. Danach kommt das gehashte Passwort, das mit dem Salt gehasht wurde – in diesem Fall PUHL00kS5UY3CMVaiC0/g0.

Jetzt können Sie openssl verwenden, um das angegebene Passwort mit demselben Salt zu hashen, etwa so:

openssl passwd -1 -salt TrOIigLp

Geben Sie das angegebene Passwort ein, wenn Sie dazu aufgefordert werden, der openssl-Befehl sollte den MD5-Hash mit dem bereitgestellten Salt berechnen und es sollte genau das gleiche sein wie oben aus der Shadow-Datei. Die -1 im obigen Befehl ist für MD5-Hashing.


Hier ist eine relativ robuste Lösung, die sowohl mit lokalen als auch mit entfernten Benutzern funktioniert und versucht, sich gegen den gesamten PAM-Stack als der betreffende Benutzer zu authentifizieren, anstatt einfach Passwort-Hashes zu vergleichen.

#!/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

Um es auszuführen:Speichern Sie es als ./authenticate_as.rb , chmod +x ./authenticate_as.rb , und ./authenticate_as.rb $username $password . Benötigt Ruby und das RPAM-Gem, falls das nicht offensichtlich war.


Linux
  1. Ssh – Shell-Skript zum Einloggen in einen SSH-Server?

  2. Welcher Shell-Interpreter führt ein Skript ohne Shebang aus?

  3. Shell-Skript ändert Verzeichnis mit Variable

  4. Panikpasswort unter Linux

  5. lxc-Container:Passwort und Benutzername

Finden Sie Benutzerkonten mit leerem Passwort in Linux

Ändern Sie das Arbeitsverzeichnis in der Shell mit einem Python-Skript

Wie führe ich ein Skript als ein anderer Benutzer ohne Passwort aus?

Automatisieren Sie die mysql_secure_installation mit dem echo-Befehl über ein Shell-Skript

Wie überprüfe ich das Passwort mit Linux?

Führen Sie ein Shell-Skript als ein anderer Benutzer aus