Ustaw HISTIGNORE na “sudo -S”
$ export HISTIGNORE='*sudo -S*'
Następnie przekaż bezpiecznie hasło do sudo:
$ echo "your_password" | sudo -S -k <command>
“HISTIGNORE” oznacza nie zapisywanie tego polecenia w historii. Jest to historia w pamięci lub plik “~/.bash_history”.
Na przykład, poniżej, bezpiecznie przeniesie Twoje hasło do polecenia sudo, bez zachowania historii Twojego hasła.
“-S”, oznacza użycie stdin dla hasła,
“-k” oznacza zignorowanie zbuforowanych danych uwierzytelniających, aby zmusić sudo do ciągłego pytania. To jest dla spójnego zachowania.
$ export HISTIGNORE='*sudo -S*'
$ echo "<your_password>" | sudo -S -k whoami
$ echo "<your_password>" | sudo -S -k cat /etc/shadow
$ echo "<your_password>" | sudo -S -k bash /tmp/myscript.sh
Wadą powyższej metody jest to, że jeśli chcesz zobaczyć komendy, które wykonałeś w historii później, nie będzie ich tam. Inną metodą jest aktualizacja pamięci podręcznej uwierzytelniania sudo (domyślnie jest włączona z 5 minutowym timeoutem), a następnie uruchomienie sudo oddzielnie. Ale minusem tego jest to, że musisz być świadomy 5-minutowego cache'u.
Na przykład:
$ export HISTIGNORE='*sudo -S*'
$ echo "<your_password>" | sudo -S -v
$ sudo whoami
$ echo "<your_password>" | sudo -S -v
$ sudo cat /etc/shadow
$ echo "<your_password>" | sudo -S -v
$ sudo /tmp/myscript.sh
Uwaga Uruchomiłem sudo przed każdym poleceniem, aby upewnić się, że cache sudo jest aktualizowany, ponieważ domyślnie jest to 5 minut. Tak, whoami nie powinno zająć 5 minut, ale myślę, że równie dobrze może uruchomić go przed każdym poleceniem dla spójności. Możesz również umieścić “export HISTIGNORE=‘sudo -S’” w swoim pliku ~/.bashrc, a następnie załadować go za pomocą “. ~/.bashrc” lub logoff, a następnie zaloguj się. Jednakże, myślę o użyciu tego do celów skryptowych, więc będę trzymał to na szczycie wszystkich moich skryptów dla najlepszych praktyk bezpieczeństwa. Ustawienie “echo ” | sudo -S -v" na zmienną zamiast tego może być również dobrym pomysłem, a następnie po prostu uruchom zmienną przed każdym poleceniem, które potrzebuje uprawnień roota, zobacz komentarz Janara. Komentarz “John T” powinien również zawierać parametr “-k”, tak jakbyś uruchomił “sudo -S” bez “-k”, a cache uwierzytelniający sudo miał już Twoje dane uwierzytelniające (i jest nadal ważny, domyślny cache uwierzytelniający sudo wynosi 5 minut), wtedy bash uruchomi Twoje hasło jako polecenie, co jest złe.