GNU/Linux >> Linux Esercitazione >  >> Linux

Utilizzando il comando passwd dall'interno di uno script di shell

L'unica soluzione funziona su Ubuntu 12.04:

echo -e "new_password\nnew_password" | (passwd user)

Ma la seconda opzione funziona solo quando cambio da:

echo "password:name" | chpasswd

A:

echo "user:password" | chpasswd

Vedi le spiegazioni nel post originale:Modifica della password tramite uno script


Leggi le sagge parole da:

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

Cito:

Niente di ciò che puoi fare in bash può funzionare. passwd(1) non legge dallo standard input. Questo è intenzionale. È per la tua protezione. Le password non sono mai state pensate per essere inserite nei programmi o generate dai programmi. Dovevano essere inseriti solo dalle dita di un vero essere umano, con un cervello funzionante, e mai e poi mai scritti da nessuna parte.

Ciò nonostante, riceviamo orde di utenti che chiedono come aggirare 35 anni di sicurezza Unix.

Continua spiegando come puoi impostare il tuo shadow(5) correttamente la password e mostra GNU-mi-interessa-solo-della-sicurezza-se-non-mi-fa-pensare-troppo -modo di abusare di passwd(1) .

Infine, se hai intenzione di utilizzare la stupida estensione GNU passwd(1) --stdin , non passare la password inserendola nella riga di 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.

L'ultimo è il meglio che puoi fare con GNU passwd . Anche se ancora non lo consiglierei.

Mettere la password sulla riga di comando significa che chiunque abbia anche il minimo accenno di accesso alla scatola può monitorare ps o simili e rubare la password. Anche se pensi che la tua scatola sia al sicuro; è qualcosa che dovresti davvero prendi l'abitudine di evitare a tutti i costi (sì, anche il costo di fare un po' più di fatica per portare a termine il lavoro).


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

Quindi nel tuo caso

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

[Aggiorna ] alcuni problemi sono stati sollevati nei commenti:

Il tuo passwd il comando potrebbe non avere un --stdin opzione:usa chpasswd utility invece, come suggerito da ashawley.

Se usi una shell diversa da bash, "echo" potrebbe non essere un comando integrato e la shell chiamerà /bin/echo . Questo non è sicuro perché la password verrà visualizzata nella tabella dei processi e può essere vista con strumenti come ps .

In questo caso, dovresti usare un altro linguaggio di scripting. Ecco un esempio in Perl:

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

Al giorno d'oggi, puoi usare questo comando:

echo "user:pass" | chpasswd

Linux
  1. In che modo il comando Su maschera/protegge la password dalla visualizzazione sullo schermo?

  2. Il significato di $? In uno script di shell?

  3. passwd Esempi di comandi in Linux

  4. Come installo uno script da eseguire ovunque dalla riga di comando?

  5. Come impostare la variabile di ambiente all'interno di GDB usando il comando shell?

Come utilizzare il comando Passwd in Linux

Comprendere facilmente i comandi della shell utilizzando lo script "Explain Shell" in Linux

10 esempi di comandi passwd in Linux

Come eseguire un comando in uno script della shell?

Esegui uno script di shell dal comando docker-compose, all'interno del contenitore

Come eseguire il comando Vim dalla shell?