GNU/Linux >> Linux Esercitazione >  >> Linux

Controlla la password dell'utente con uno script di shell

Non esiste un modo completamente portatile per controllare la password dell'utente. Ciò richiede un eseguibile privilegiato, quindi non è qualcosa che puoi creare da zero. PAM, che viene utilizzato sulla maggior parte dei sistemi Linux non incorporati, nonché su molti sistemi embedded e sulla maggior parte delle altre varianti Unix, viene fornito con un binario setuid ma non ha un'interfaccia shell diretta, è necessario passare attraverso lo stack PAM.

Puoi usare un'associazione PAM in Perl, Python o Ruby.

Puoi installare uno dei diversi checkpassword implementazioni.

Se l'utente è autorizzato a eseguire sudo per qualsiasi cosa, allora sudo -kv richiederà l'autenticazione (a meno che questa non sia stata disabilitata nella configurazione sudo). Ma ciò non funziona se non esiste una regola sudoers riguardante l'utente.

Puoi eseguire su . Funziona sulla maggior parte delle implementazioni. Questa è probabilmente la soluzione migliore nel tuo caso.

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

Puoi convalidare che un dato local la password è corretta per un determinato nome utente utilizzando il file shadow.

Nella maggior parte delle distribuzioni moderne, le password con hash sono memorizzate nel file shadow /etc/shadow (che è leggibile solo da root). Come root, estrai la riga dal file shadow per l'utente specificato in questo modo:

cat /etc/shadow | grep username

Vedrai qualcosa di simile a questo:

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

Dopo il nome utente c'è $1. Ciò indica che si tratta di un hash MD5. Dopodiché c'è un altro $, quindi (in questo caso) TrOIigLp seguito da un altro $. TrOIigLp è il sale. Dopo c'è la password con hash, che è stata sottoposta ad hashing usando il salt - in questo caso PUHL00kS5UY3CMVaiC0/g0.

Ora puoi utilizzare openssl per eseguire l'hashing della password fornita utilizzando lo stesso salt, in questo modo:

openssl passwd -1 -salt TrOIigLp

Immettere la password specificata quando richiesto, il comando openssl dovrebbe calcolare l'hash MD5 utilizzando il salt fornito e dovrebbe essere esattamente lo stesso di quanto sopra dal file shadow. Il -1 nel comando precedente è per l'hashing MD5.


Ecco una soluzione relativamente robusta che funziona sia con utenti locali che remoti e tenta di autenticarsi rispetto all'intero stack PAM come utente in questione, piuttosto che confrontare semplicemente gli hash delle password.

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

Per eseguirlo:salvalo come ./authenticate_as.rb , chmod +x ./authenticate_as.rb e ./authenticate_as.rb $username $password . Richiede Ruby e la gemma rpam, nel caso non fosse ovvio.


Linux
  1. Quale interprete di shell esegue uno script senza Shebang?

  2. Passare il nome del file con spazi a uno script di shell?

  3. Nascondere la password negli script della shell?

  4. Come aggiungere automaticamente account utente E password con uno script Bash?

  5. Automatizza mysql_secure_installation con il comando echo tramite uno script di shell

Trova account utente con password vuota in Linux

Directory di modifica dello script Shell con variabile

contenitore lxc:password e nome utente

Come controllare la password con Linux?

Eseguire uno script di shell come utente diverso

Creazione di modelli con Linux in uno script Shell?