2010-09-11 28 views
7

Mam program, który piszę w Pythonie, i mam potrzebę przechowywania niektórych haseł. Hasła te będą hasłami do serwerów FTP, dlatego ważne jest, aby nie były one widoczne dla wszystkich. Oznacza to również, że nie mogę zapisać nieodwracalnego skrótu hasła, tak jak na serwerze internetowym, ponieważ nie sprawdzam, czy ktoś wpisuje poprawne hasło, tylko przekazuję hasło komuś innemu.
Jaki jest najlepszy sposób na przechowywanie haseł? Używam Pythona, a program będzie tylko dla Linuksa.Przechowywanie haseł z pythonem

+0

Zobacz http://stackoverflow.com/questions/721436/whats-a-good-two-way-encryption-library-implemented-in-python. – gimel

Odpowiedz

2

W zależności od dystrybucji prawdopodobnie można go przechowywać w pęku kluczy, jeśli jest on dostępny.

Inaczej spojrzeć na niektóre z dostępnych algorytmów szyfrowania (PGP/GPG, DES, AES itp) i ich portów Python/modułów, ale jest to trudne rzeczy które mieć aby uzyskać prawo.

+0

Tak, skorzystaj z usługi świadczonej przez system operacyjny, zamiast pisać własne. – Mark

+1

Chciałbym, aby działał na jak największej liczbie dystrybucji. – Carnberry

+0

Jeśli używasz PGP lub AES lub cokolwiek, nie musisz przechowywać hasła w skrypcie Pythona, aby zdekodować hasła, a następnie ktoś może po prostu otworzyć plik źródłowy python i odczytać klucz, aby zdekodować hasło? – Carnberry

2

Jest wygodny i niezabezpieczony sposób: po prostu zapisz je jako zwykły tekst i jeśli naprawdę korzystasz z FTP (a nie, na przykład SFTP), będą one tak bezpieczne, jak komputer, na którym są hostowane (co nie znaczy bardzo bezpieczne). FTP został napisany w czasie, gdy wysłanie hasła w postaci zwykłego tekstu przez przewód było uważane za "wystarczająco bezpieczne"; te dni minęły. Nawet kodowanie haseł w postaci zwykłego tekstu w źródle pythona naprawdę nie pomaga, ponieważ w pewnym momencie musisz je odszyfrować.

Bezpieczne metody wymagają nieco więcej konfiguracji. Oto decent tutorial, oczekuję, że są lepsze.

5

Można użyć klucza systemowego, np. Pętla kluczy GNOME lub portfel KDE.

Istnieje moduł Python o nazwie keyring, który obsługuje wielu dostawców pierścieni kluczy. Próbowałem go tylko w systemie Windows, gdzie jeszcze nie działa poprawnie. Wygląda na to, że rozwój nie jest bardzo aktywny, ale powinieneś spróbować. Możesz także wypróbować pakiet "python-gnomekeyring", który jest specyficzny dla GNOME i bardziej niskiego poziomu.

+0

Dzięki, właśnie tego szukam, aby zabezpieczyć skrypty Pythona :) –

+0

Dałem 'keyring' szybki spin i wydaje się, że działa idealnie. Czy mógłbyś powtórnie przyjrzeć się swojej odpowiedzi, albo po to, by mocniej wspierać "brelok" (albo lepszy moduł, jeśli go znalazłeś), albo bardziej szczegółowo, co znalazłeś, nie działa z nim? – ArtOfWarfare

+1

Testowałem 'keyring' na obu OS X i Windows i wydaje się działać bezbłędnie na każdej platformie. Sprawdziłem również implementację (ponieważ jest to czysty Python, to dość łatwe) i nie widzę nic na ten temat. – ArtOfWarfare

-4

Polecam Hashowanie hasła hash jest funkcją jednokierunkową, więc nie można go przetworzyć w celu znalezienia zwykłej wersji hasła (w przeciwieństwie do szyfrowania). MD5 to algorytm, który mi się podoba i jest już zaimplementowany w pythonie. Zawsze możesz dodać sól do skrótu, np. abdPasswordABDA gdzie Hasło jest hasłem. Następnie przechowuj hash w pliku lub bazie danych i po prostu włącz go ponownie, zanim zostanie sprawdzony. SHA1 to kolejny algorytm mieszający, którego można użyć.
Dean

+3

Nie może używać skrótów, ponieważ dostarcza hasła, nie sprawdzając ich. –

+0

Poza tym używanie hash pw do uwierzytelniania nie pomaga, ponieważ nadal daje dostęp do bazy danych. – RickyA

0

Wyjazd netrc na Linuksie (wykorzystanie człowiek lub this), a następnie spojrzeć na this Python module

Jeśli netrc posiada odpowiednie informacje można użyć ftp w linii poleceń bez wprowadzania użytkownika i hasło - są spojrzał w pliku. Niektóre rzeczy do zapamiętania: plik jest ograniczony tylko do odczytu/zapisu przez użytkownika (0600) lub może zostać odrzucony przez ftp. Jeśli to działa, jesteś gotowy do użycia go z Pythona.

Znacznie lepszym pomysłem byłoby uniknięcie ftp (gdzie hasło jest wysyłane w zwykłym tekście) i użycie sftp. Skopiuj swój klucz publiczny z komputera z uruchomionym skryptem Python do każdego komputera docelowego i pozwól ssh automatycznie logować się w bezpieczny sposób.