2010-12-10 17 views
10

Piszę aplikację python, która używa narzędzia wiersza poleceń (własność, więc nie można go zmodyfikować), aby wykonać część swojej pracy. Problem polega na tym, że muszę przekazać hasło jako argument wiersza poleceń do narzędzia, które będzie łatwo widoczne dla dowolnego użytkownika wykonującego "ps ax". Jak mogę bezpiecznie wysłać hasło do narzędzia wiersza poleceń z poziomu Pythona (lub skryptu powłoki)?wysyłanie hasła do narzędzi wiersza poleceń

+0

To zależy od tego, w jaki sposób narzędzie, do którego chcesz zadzwonić, akceptuje hasła. Na przykład 'ssh' akceptuje go ze stdin, jeśli jest to terminal. – khachik

+0

Czy 'sudo' byłby przydatny? –

Odpowiedz

2

Jeśli hasło jest akceptowane tylko w wierszu poleceń, oznacza to, że nie masz szczęścia. Czy jesteś absolutnie pewien, że nie ma opcji, aby wysłać hasło w inny sposób? Jeśli możesz wysłać go do procesu stdin, możesz porozmawiać z nim za pośrednictwem potoku i bezpiecznie wysłać hasło w ten sposób.

+0

Zajmę się tym, ale nie jestem pewien, czy to możliwe. – theprole

+0

Czy jesteś pewien, że przekazywanie haseł do programów przez rury jest bezpieczne? Zobacz moje nowe pytanie http://stackoverflow.com/questions/6321353/securely-passing-password-to-openssl-via-stdin. Może uda ci się zdobyć kilka punktów. – Enchilada

5

Jeśli aplikacja ma jakiś tryb interaktywny, można użyć czegoś takiego jak pyexpect.

Jeśli akceptuje tylko hasła w wierszu poleceń, aplikacja została ZAPROJEKTOWANA jako podatna na "ps ax", w jaki sposób należy przezwyciężyć oryginalny zły projekt? Jest to własnościowe, skargi powinny trafiać do winnych^H^H^H^H^H^Hauthor.

0

Być może uda się uzyskać większe bezpieczeństwo dzięki zaszyfrowanemu argumentowi hasła i przekazywaniu zaszyfrowanego hasła, a program może je deszyfrować. Przynajmniej nie byłoby mowy o zwykłym haśle. Użyłem tej metody podczas uruchamiania procesu przez inny proces i przekazywania jego argumentów. W twoim przypadku może to jednak nie być możliwe.

0

Napisz kolejny skrypt python, który zaakceptuje hasło z wiersza poleceń, używając getpass.getpass() i zapisze go w zmiennej. Następnie wywołaj polecenie ze skryptu z tą zmienną, która ma hasło jako parametr.

0

Można wymusić opakowanie inline powłoki jak następuje

somecommand --password=$(echo "Enter Password: " >&2;read -s PASSWORD;echo $PASSWORD) 

Wpis hasło będzie wypełniać polecenia przed wykonaniem go

hasło NIE będą wyświetlane w historii skorupy

ale będzie pojawia się na wyjściu "ps"

0

Co z tym w bash:

command_asking_for_password < <(command_that_prints_a_password; echo -n "\r") 
+0

Lepiej używać 'printf' - zachowanie' echo' przy podanym łańcuchu formatującym za pomocą ukośników odwrotnych - lub, jeśli o to chodzi, argument '-n' - jest [niezdefiniowane przez POSIX] (http: // pubs .opengroup.org/onlinepubs/9699919799/utilities/echo.html) i zmienia się w praktyce pomiędzy typowymi powłokami (zachowanie popiołu i myślnika różni się od bashu z domyślną konfiguracją, która różni się od bash z włączoną flagą "xpg_echo"). –

Powiązane problemy