2010-12-10 6 views
10

J'écris une application python qui utilise un utilitaire de ligne de commande (propietary donc il ne peut pas être modifié) pour faire une partie de son travail. Le problème est que je dois passer le mot de passe comme un argument de ligne de commande à l'outil qui serait facilement vu par n'importe quel utilisateur faisant 'ps ax'. Comment puis-je envoyer le mot de passe à l'outil de ligne de commande en toute sécurité depuis python (ou un script shell)?Envoyer un mot de passe aux outils de ligne de commande

+0

Cela dépend fortement de la façon dont l'outil que vous souhaitez appeler accepte les mots de passe. Par exemple, 'ssh' l'accepte de stdin, s'il s'agit d'un terminal. – khachik

+0

Est-ce que 'sudo' serait utile? –

Répondre

2

Si le mot de passe n'est accepté que sur la ligne de commande, vous n'avez pas vraiment de chance. Êtes-vous absolument sûr qu'il n'y a pas d'option pour envoyer le mot de passe d'une autre manière? Si vous pouvez l'envoyer via le stdin du processus, vous pouvez lui parler via un tuyau, et envoyer le mot de passe de manière sécurisée de cette manière.

+0

Je vais regarder, mais je ne sais pas si c'est possible. – theprole

+0

Etes-vous sûr que la transmission de mots de passe dans des programmes via des canaux est sécurisée? Voir ma nouvelle question http://stackoverflow.com/questions/6321353/securely-passing-password-to-openssl-via-stdin peut-être vous pouvez prendre quelques points là-bas. – Enchilada

5

Si l'application dispose d'un mode interactif, vous pouvez utiliser quelque chose comme pyexpect.

Si elle n'accepte que les mots de passe sur la ligne de commande, l'application a été conçue pour être vulnérable à 'ps ax', comment allez-vous surmonter le mauvais design original? C'est propiétaire, les plaintes devraient aller au coupable. H H H H H H H Hauthor.

0

Vous pouvez obtenir plus de sécurité en ayant un argument de mot de passe crypté et en transmettant un mot de passe crypté, et le programme peut le décrypter. Au moins, il n'y aurait pas de mot de passe en clair. J'ai utilisé cette méthode lors du lancement d'un processus via un autre processus et en lui passant des arguments. Ce n'est peut-être pas faisable dans votre cas.

0

Ecrivez un autre script python qui acceptera le mot de passe à partir de l'invite de commande en utilisant getpass.getpass() et stockez-le dans une variable. Puis appelez la commande du script avec cette variable ayant un mot de passe comme paramètre.

0

Vous pouvez forcer une enveloppe shell en ligne comme suit

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

L'entrée de mot de passe remplir la commande avant de l'exécuter

Le mot de passe ne sera pas apparaître dans l'histoire de votre coquille

Mais il va apparaît dans votre sortie 'ps'

0

Qu'en est-il à bash:

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

Mieux vaut utiliser 'printf' - le comportement de' echo' lorsqu'on lui donne une chaîne de format en utilisant des barres obliques inverses - ou, d'ailleurs, l'argument '-n' - est [non défini par POSIX] (http: // pubs .opengroup.org/onlinepubs/9699919799/utilities/echo.html), et varie en pratique entre les shells communs (le comportement de ash et dash est différent de bash avec une config par défaut, ce qui est différent de bash avec l'option 'xpg_echo' activée). –

Questions connexes