/ / Przechowywanie haseł wpisanych w wierszu poleceń w skrypcie powłoki z historii bash - bash, shell, security, passwords, password-protection

Prowadzenie haseł wpisywanych w wierszu poleceń w skrypcie powłoki z historii bash - bash, shell, security, passwords, password-protection

Mam skrypt, który automatyzuje tworzenie kont użytkowników dla SFTP. Skrypt polega na echo, aby powtórzyć hasło do chpasswd ala:

echo <username>:<the password> | sudo chpasswd

... i openssl, aby sprawdzić wynikowe zaszyfrowane hasło, aby upewnić się, że jest poprawnie ustawione:

openssl passwd -1 -salt <salt> <the password>

Ponieważ skrypt drukuje hasło bezpośrednio w wierszu poleceń, jestem zaniepokojony tym, że pojawia się w historii basha i / lub innych niepewnych obszarach.

Rozważałem dołączenie HISTIGNORE:

HISTIGNORE="echo" echo <username>:<the password> | sudo chpasswd

Czy to niezawodnie ochroni hasło przed historią?

Odpowiedzi:

0 dla odpowiedzi № 1

Polecenia w ciągu skrypt nie skończy się w twojej historii. Tylko polecenia wpisane w monicie.

Jeśli więc zadzwonisz do swojego skryptu ruby script.rb a twój skrypt ruby ​​wykonuje szereg poleceń powłoki, które nie zostaną zakończone w historii, a jedynie wywołanie ruby script.rb będzie.

Z mojego zrozumienia history standardowa funkcja bash i wykonywanie prostych poleceń za pośrednictwem irb widzimy, że bash nie jest powłoką, która jest wywoływana przez ruby ​​i żadna ze zmiennych ani poleceń historii nie jest obecna:

irb(main):002:0> puts `echo $0`
sh
=> nil
irb(main):003:0> puts `echo $HISTFILE`

=> nil
irb(main):004:0> puts `history`
Errno::ENOENT: No such file or directory - history
from (irb):4:in ``"
from (irb):4
from /usr/bin/irb:12:in `<main>"
irb(main):005:0>

Jedyny przypadek, w którym "znam problem, który opisujesz jako problem, to wykonywanie poleceń za pomocą expect. W takim przypadku polecenia są wpisywane bezpośrednio w terminalu i kończą się historią. Dobrym sposobem na usunięcie tych poleceń jest użycie history -c która wyczyści wszelkie wpisy dokonane w tej sesji.


2 dla odpowiedzi nr 2

W zależności od HISTCONTROL Zmienna, możesz uniemożliwić przechowywanie poleceń w historii, poprzedzając polecenie białymi znakami:

$ echo $HISTCONTROL

$ echo my password is foo
my password is foo
$  echo my password is bar
my password is bar
$ history | tail -3
497  echo my password is foo
498   echo my password is bar
499  history | tail -3
$ HISTCONTROL=ignorespace
$ echo my password is foo
my password is foo
$   echo my password is bar
my password is bar
$ history | tail -4
499  history | tail -3
500  HISTCONTROL=ignorespace
501  echo my password is foo
502  history | tail -4

W drugim przykładzie polecenie poprzedzone spacjami nie pojawia się w historii.


Możesz użyć history -d number aby usunąć wpisy z historii.