GNU/Linux >> Znalost Linux >  >> Linux

Použití příkazu passwd ze skriptu shellu

Jediné řešení funguje na Ubuntu 12.04:

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

Ale druhá možnost funguje pouze tehdy, když změním z:

echo "password:name" | chpasswd

Komu:

echo "user:password" | chpasswd

Viz vysvětlení v původním příspěvku:Změna hesla pomocí skriptu


Přečtěte si moudrá slova z:

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

Cituji:

Nic, co můžete dělat v bash, nemůže fungovat. passwd(1) nečte ze standardního vstupu. Toto je záměrné. Je to pro vaši ochranu. Hesla nebyla nikdy určena k tomu, aby byla vkládána do programů nebo generována programy. Měly být zapsány pouze prsty skutečné lidské bytosti s funkčním mozkem a nikdy, nikdy nikam zapsané.

Přesto se zástupy uživatelů ptají, jak mohou obejít 35 let zabezpečení Unixu.

Dále vysvětluje, jak můžete nastavit shadow(5) správně heslo a zobrazí vám GNU-Zajímám se pouze o zabezpečení-pokud-to-nepřiměje-mě-přemýšlím-příliš-moc -způsob zneužití passwd(1) .

A konečně, pokud se chystáte použít hloupé GNU passwd(1) rozšíření --stdin , ne předejte heslo uvedením na příkazový řádek.

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.

Poslední je to nejlepší, co můžete s GNU passwd udělat . I když bych to stále nedoporučoval.

Zadání hesla na příkazový řádek znamená, že kdokoli, kdo má i ten nejodlehlejší náznak přístupu k boxu, může sledovat ps nebo tak a ukrást heslo. I když si myslíte, že je vaše krabice v bezpečí; je to něco, co byste opravdu měli zvykněte si vyhýbat se za každou cenu (ano, i za cenu toho, že uděláte trochu větší potíže s dokončením práce).


z „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.

Takže ve vašem případě

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

[Aktualizovat ] v komentářích bylo uvedeno několik problémů:

Vaše passwd příkaz nemusí mít --stdin možnost:použijte chpasswd místo toho, jak navrhuje Ashawley.

Pokud používáte jiný shell než bash, "echo" nemusí být vestavěný příkaz a shell zavolá /bin/echo . Toto není bezpečné, protože heslo se zobrazí v tabulce procesů a lze jej zobrazit pomocí nástrojů jako ps .

V tomto případě byste měli použít jiný skriptovací jazyk. Zde je příklad v Perlu:

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

V dnešní době můžete použít tento příkaz:

echo "user:pass" | chpasswd

Linux
  1. Jak příkaz Su maskuje/chrání heslo před zobrazením na obrazovce?

  2. Příklady příkazů passwd v Linuxu

  3. Bash skript:Použití příkazu script z bash skriptu pro protokolování relace

  1. Otevřete Vim ze skriptu prostředí Bash

  2. Jak nastavit proměnnou prostředí v GDB pomocí příkazu shell?

  3. Spusťte skript prostředí z příkazu docker-compose uvnitř kontejneru

  1. Správa uživatelů Linuxu pomocí příkazu passwd

  2. Používání Disku Google z příkazového řádku systému Linux

  3. Vynechání příkazu/skriptu zadaného v /etc/passwd