Saltar al contenido

Usando el comando passwd desde dentro de un script de shell

Esta duda se puede resolver de diferentes formas, pero nosotros te mostramos la resolución más completa en nuestra opinión.

Solución:

desde “man 1 passwd“:

   --stdin
          This option is used to indicate that passwd should read the new
          password from standard input, which can be a pipe.

Entonces en tu caso

adduser "$1"
echo "$2" | passwd "$1" --stdin

[Update] Se mencionaron algunos problemas en los comentarios:

Tu passwd El comando puede no tener un --stdin opción: usar el chpasswd
utilidad en su lugar, como lo sugiere ashawley.

Si usa un shell que no sea bash, es posible que “echo” no sea un comando incorporado y el shell llamará /bin/echo. Esto no es seguro porque la contraseña aparecerá en la tabla de procesos y se puede ver con herramientas como ps.

En este caso, debe utilizar otro lenguaje de secuencias de comandos. Aquí hay un ejemplo en Perl:

#!/usr/bin/perl -w
open my $pipe, '|chpasswd' or die "can't open pipe: $!";
print $pipe "$username:$password";
close $pipe

La única solución funciona en Ubuntu 12.04:

echo -e "new_passwordnnew_password" | (passwd user)

Pero la segunda opción solo funciona cuando cambio de:

echo "password:name" | chpasswd

Para:

echo "user:password" | chpasswd

Ver explicaciones en la publicación original: Cambio de contraseña a través de un script

Lee las sabias palabras de:

  • http://mywiki.wooledge.org/BashFAQ/078

Yo cito:

Nada de lo que puedas hacer en bash puede funcionar. passwd(1) no lee desde la entrada estándar. Esto es intencional. Es para tu protección. Las contraseñas nunca fueron pensadas para ser puestas en programas o generadas por programas. Estaban destinados a ser ingresados ​​​​solo por los dedos de un ser humano real, con un cerebro funcional, y nunca, nunca escritos en ningún lado.

No obstante, tenemos hordas de usuarios que preguntan cómo pueden eludir los 35 años de seguridad de Unix.

Continúa explicando cómo puede configurar su shadow(5) contraseña correctamente, y le muestra el GNU-Solo-me-importa-la-seguridad-si-no-me-hace-pensar-demasiado-manera de abusar passwd(1).

Por último, si VAS a usar la tonta extensión GNU passwd(1) --stdin, no pasar la contraseña poniéndola en la línea de comando.

echo $mypassword | passwd --stdin # Eternal Sin.
echo "$mypassword" | passwd --stdin # Eternal Sin, but at least you remembered to quote your PE.
passwd --stdin <<< "$mypassword" # A little less insecure, still pretty insecure, though.
passwd --stdin < "passwordfile" # With a password file that was created with a secure `umask(1)`, a little bit secure.

Lo último es lo mejor que puedes hacer con GNU passwd. Aunque todavía no lo recomendaría.

Poner la contraseña en la línea de comando significa que cualquier persona con la más remota pista de acceso a la caja puede estar monitoreando ps o tal y robar la contraseña. Incluso si cree que su caja es segura; es algo que deberías De Verdad adquiera el hábito de evitar a toda costa (sí, incluso el costo de hacer un poco más de problemas para hacer el trabajo).

No se te olvide compartir este tutorial si lograste el éxito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *