GNU/Linux >> Tutoriales Linux >  >> Linux

Verifique la contraseña del usuario con un script de shell

No existe una forma totalmente portátil de verificar la contraseña del usuario. Esto requiere un ejecutable privilegiado, por lo que no es algo que pueda crear desde cero. PAM, que se usa en la mayoría de los sistemas Linux no integrados, así como en muchos sistemas integrados y la mayoría de las otras variantes de Unix, viene con un binario setuid pero no tiene una interfaz de shell directa, debe pasar por la pila PAM.

Puede usar un enlace PAM en Perl, Python o Ruby.

Puede instalar uno de varios checkpassword implementaciones.

Si el usuario puede ejecutar sudo para cualquier cosa, entonces sudo -kv solicitará la autenticación (a menos que se haya desactivado en la configuración de sudo). Pero eso no funciona si no hay una regla sudoers con respecto al usuario.

Puedes ejecutar su . Esto funciona en la mayoría de las implementaciones. Esta es probablemente la mejor apuesta en su caso.

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

Puede validar que un determinado local la contraseña es correcta para un nombre de usuario dado usando el archivo shadow.

En la mayoría de las distribuciones modernas, las contraseñas codificadas se almacenan en el archivo shadow /etc/shadow (que solo puede leer root). Como root, extraiga la línea del archivo shadow para el usuario dado de la siguiente manera:

cat /etc/shadow | grep username

Verás algo como esto:

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

Después del nombre de usuario hay $1. Esto indica que es un hash MD5. Después hay otro $, luego (en este caso) TrOIigLp seguido de otro $. TrOIigLp es la sal. Después de eso, está la contraseña codificada, que fue codificada usando la sal, en este caso PUHL00kS5UY3CMVaiC0/g0.

Ahora, puede usar openssl para codificar la contraseña dada usando la misma sal, así:

openssl passwd -1 -salt TrOIigLp

Ingrese la contraseña dada cuando se le solicite, el comando openssl debe calcular el hash MD5 usando la sal provista, y debe ser exactamente igual que el anterior del archivo shadow. El -1 en el comando anterior es para hashing MD5.


Esta es una solución relativamente robusta que funciona tanto con usuarios locales como remotos e intenta autenticarse contra la pila PAM completa como el usuario en cuestión, en lugar de simplemente comparar hashes de contraseña.

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

Para ejecutarlo:guárdelo como ./authenticate_as.rb , chmod +x ./authenticate_as.rb y ./authenticate_as.rb $username $password . Requiere Ruby y la gema rpam, en caso de que no fuera obvio.


Linux
  1. Ssh:¿script de shell para iniciar sesión en un servidor Ssh?

  2. ¿Qué intérprete de Shell ejecuta un script sin Shebang?

  3. ¿Montar Samba con solicitud de contraseña como usuario no root?

  4. ¿Pasar el nombre de archivo con espacios a un script de Shell?

  5. ¿Ocultar la contraseña en los scripts de Shell?

Encuentra cuentas de usuario con contraseña vacía en Linux

Cambie el directorio de trabajo en Shell con un script de python

Contraseña de pánico en Linux

¿Cómo comprobar la contraseña con Linux?

Shell =Comprobar si la variable comienza con #

¿Plantillas con Linux en un script de Shell?