GNU/Linux >> Tutoriales Linux >  >> Linux

Usando el comando passwd desde dentro de un script de shell

La única solución funciona en Ubuntu 12.04:

echo -e "new_password\nnew_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://miwiki.wooledge.org/BashFAQ/078

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 de 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 realmente 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).


de "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.

Así que en tu caso

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

[Actualizar ] se mencionaron algunas cuestiones 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á a /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

Hoy en día, puedes usar este comando:

echo "user:pass" | chpasswd

Linux
  1. Administrar usuarios de Linux con el comando passwd

  2. Uso de Google Drive desde la línea de comandos de Linux

  3. Envíe un correo electrónico desde la terminal o secuencia de comandos de Linux usando el comando de correo

  4. Ejemplos de comandos passwd en Linux

  5. contraseña:comando no encontrado

Cómo usar el comando Passwd en Linux

Comprender fácilmente los comandos de Shell usando el script "Explain Shell" en Linux

10 ejemplos de comandos passwd en Linux

¿Cómo ejecutar un comando en un script de Shell?

¿Cómo configurar la variable de entorno dentro de GDB usando el comando de shell?

Omitir el comando/script especificado en /etc/passwd