GNU/Linux >> Znalost Linux >  >> Linux

Zkontrolujte heslo uživatele pomocí shell skriptu

Neexistuje žádný plně přenosný způsob, jak zkontrolovat heslo uživatele. To vyžaduje privilegovaný spustitelný soubor, takže to není něco, co můžete vybičovat od nuly. PAM, který se používá na většině neembedded linuxových systémů, stejně jako na mnoha vestavěných systémech a většině dalších unixových variant, je dodáván s binárním souborem setuid, ale nemá přímé rozhraní shellu, musíte přejít přes zásobník PAM.

Vazbu PAM můžete použít v Perlu, Pythonu nebo Ruby.

Můžete nainstalovat jeden z několika checkpassword implementací.

Pokud má uživatel povoleno spouštět sudo pro cokoliv, pak sudo -kv zobrazí výzvu k ověření (pokud to nebylo zakázáno v konfiguraci sudo). Ale to nefunguje, pokud neexistuje žádné pravidlo sudoers týkající se uživatele.

Můžete spustit su . Toto funguje na většině implementací. To je ve vašem případě pravděpodobně nejlepší sázka.

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

Můžete ověřit, že daný místní heslo je správné pro dané uživatelské jméno pomocí stínového souboru.

Na většině moderních distribucí jsou hashovaná hesla uložena ve stínovém souboru /etc/shadow (který může číst pouze root). Jako root vytáhněte řádek ze stínového souboru pro daného uživatele takto:

cat /etc/shadow | grep username

Uvidíte něco takového:

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

Za uživatelským jménem je $1. To znamená, že se jedná o hash MD5. Poté následuje další $, pak (v tomto případě) TrOIigLp následovaný dalším $. TrOIigLp je sůl. Poté následuje hashované heslo, které bylo zahašováno pomocí soli – v tomto případě PUHL00kS5UY3CMVaiC0/g0.

Nyní můžete použít openssl k hašování daného hesla pomocí stejné soli, například:

openssl passwd -1 -salt TrOIigLp

Po výzvě zadejte dané heslo, příkaz openssl by měl vypočítat hash MD5 pomocí poskytnuté soli a měl by být přesně stejný jako výše ze souboru stínu. -1 ve výše uvedeném příkazu je pro MD5 hash.


Zde je relativně robustní řešení, které pracuje s místními i vzdálenými uživateli a pokouší se o autentizaci proti celému zásobníku PAM jako dotyčný uživatel, spíše než pouhé porovnávání hash hesel.

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

Chcete-li jej spustit:Uložte jej jako ./authenticate_as.rb , chmod +x ./authenticate_as.rb a ./authenticate_as.rb $username $password . Vyžaduje Ruby a drahokam rpam, v případě, že to nebylo zřejmé.


Linux
  1. Jak spustit skript jako jiný uživatel bez hesla?

  2. Shell skript změní adresář s proměnnou

  3. Panic Password na Linuxu

  1. Ssh – Shell skript pro přihlášení na Ssh server?

  2. Který Shell Interpreter spouští skript s No Shebang?

  3. Spusťte skript prostředí jako jiný uživatel

  1. Samba Mount s výzvou k zadání hesla jako uživatel bez oprávnění root?

  2. Předávání názvu souboru s mezerami do skriptu Shell?

  3. Skrýváte heslo ve skriptech Shell?