Jaki jest najmniej bezpieczny sposób przechowywania hasła używanego przez skrypt?


13

Mam skrypt Bash, który automatycznie uwierzytelnia się w usłudze przy użyciu mojej nazwy użytkownika i hasła. Poświadczenia są obecnie przechowywane w skrypcie jako zwykły tekst.

Jakie środki ostrożności należy podjąć, aby jak najbezpieczniej przechowywać te poświadczenia, jednocześnie umożliwiając dostęp do skryptu?

Wyjaśnienia:

  • Rozumiem, że jeśli to możliwe, należy zastosować inne metody uwierzytelnienia. Nadal chcę wiedzieć, co zrobić, jeśli uwierzytelnianie za pomocą hasła jest jedyną opcją.
  • Brak przechowywania hasła w ogóle nie jest tutaj akceptowalną odpowiedzią. Pytam o przypadek, w którym skrypt musi mieć nienadzorowany dostęp do hasła.

2
może nie przechowywać kodu dostępu do poświadczeń?
— Thomas Ward

Czy nie zadziałałoby uzyskanie dostępu do GNOME Keyring lub czegoś podobnego?
— Firefeather

Być może byłoby miło, gdybyś mógł przechowywać go jako skrót kryptograficzny (taki jak SHA-1).
— Anonimowy

ROT13 zasłoniłby go, ale NIE zabezpieczyłby go w żaden sposób.
— Anonimowy

@Anonimowy Jeśli hasło jest przechowywane jako kryptograficzny skrót, jak zaleca się jego odzyskanie?
— ændrük

Odpowiedzi:


8

Jakiego rodzaju usługi? Niektóre usługi mają inne metody uwierzytelniania, np. Klucze SSH dla SSH w połączeniu z agentem SSH.

Przechowuję hasło oddzielnie od skryptu i upewniam się, że wszystkie składniki ścieżki mają ustawione odpowiednie uprawnienia. Na przykład, upewnij się, że w ścieżce /path/to/file, /, /pathi /path/tosą własnością użytkownika ufasz ( root) i że nie są to zapisywalny przez kogoś, kto nie jest dozwolone, aby zobaczyć pliki. Wreszcie zalecane uprawnienia fileto 600 lub 400.

Że filemógłby wyglądać następująco:

PASSWORD='something that you cannot remember'

W swoim skrypcie użyj poniższego kodu, aby zaimportować zmienną:

. /path/to/file

Co do skryptu, upewnij się, że nie zawiera on dziur, które mogą pozwolić atakującym na wykonanie kodu w kontekście skryptu (np. Niekontrolowane środowisko, w którym może być ustawiona dowolna $PATHzmienna lub nieprawidłowe użycie innych plików (np. Pozyskiwanie pliku do zapisu na świecie) .

Jeśli chodzi o faktyczną ochronę hasła, nie możesz. Musi być jakoś dostępny dla innej usługi. Alternatywnie możesz zaszyfrować plik / skrypt zawierający hasło za pomocą, openssllub gpgmusisz wprowadzić hasło przed odblokowaniem poświadczeń. Jest to szczególnie przydatne, jeśli hasło do usługi jest trudne do zapamiętania.


14

Zamiast zakodować hasło w pliku, przechowuj hasło w osobnym pliku i chroń plik ( chmod 700lub chmod 500), aby tylko autoryzowani użytkownicy mieli do niego dostęp.

Pobierz hasło za pomocą cat /dir/to/file/with/.passwordzamiast odczytywać plik i przechowywać jego zawartość w zmiennej.


Niektóre narzędzia mają nawet opcję odczytu hasła z pliku właśnie z tego powodu, na przykład gpg --passphrase-file.

2
... i uczyń go plikiem .dotfile (/dir/to/file/with/.password)
— knb

2
chmod 400dla plików (tylko do odczytu). Oczywiście musisz zabezpieczyć wiodące katalogi (700 lub 500, a nawet 100, jeśli jesteś paranoikiem). Zauważ, że 400 (lub 500 dla katalogów) jest wystarczające, inne tryby (100) można uznać za bezpieczeństwo poprzez zaciemnienie , podobnie jak ukrywanie pliku przez umieszczenie kropki przed nazwą.
— Lekensteyn

1

Wiem, że to stare pytanie, ale zmierzyłem się z tym podobnym problemem i użyłem breloczka do kluczy Ubuntu, aby go rozwiązać. Oto rozwiązanie dla Ubuntu 18.04LTS Otwórz terminal Zapisz keyring set {{service}} {{username}} na przykład, jeśli używasz tego do logowania do szkoły:

keyring set school mohamed

Zostaniesz zalogowany w celu wprowadzenia hasła. Wprowadź hasło. Teraz wprowadzone hasło jest przechowywane w breloku Ubuntu.

Aby uzyskać to hasło, napisz w terminalu:

keyring get school mohamed

aby użyć tego w kontekście skryptu:

password=$(keyring get school mohamed)

Teraz hasło jest zgodne z wcześniej wprowadzonym hasłem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.