Je cherche le (1) moyen le plus sûr et (2) le plus simple pour qu'un utilisateur tape un mot de passe sur une invite shell bash et que ce mot de passe fasse partie de stdin dans un programme.
Voici à quoi doit ressembler le stdin:, {"username":"myname","password":"<my-password>"}
où <my-password>
est ce qui a été tapé dans l'invite du shell. Si j'avais le contrôle du programme stdin, je pourrais le modifier pour demander en toute sécurité un mot de passe et le mettre en place, mais l'aval est une commande standard à usage général.
J'ai considéré et rejeté les approches qui utilisent les éléments suivants:
- l'utilisateur tapant le mot de passe dans la ligne de commande: le mot de passe serait affiché à l'écran et serait également visible pour tous les utilisateurs via "ps"
- interpolation variable du shell dans un argument d'un programme externe (par exemple,
...$PASSWORD...
): le mot de passe serait toujours visible par tous les utilisateurs via "ps" - variables d'environnement (si elles sont laissées dans l'environnement): le mot de passe serait visible par tous les processus enfants; même les processus dignes de confiance peuvent exposer le mot de passe s'ils vident le noyau ou les variables d'environnement dans le cadre d'un diagnostic
- le mot de passe reste dans un fichier pendant une longue période, même un fichier avec des autorisations restreintes: l'utilisateur peut accidentellement exposer le mot de passe et l'utilisateur root peut accidentellement voir le mot de passe
Je mettrai ma solution actuelle comme réponse ci-dessous, mais je choisirai volontiers une meilleure réponse si quelqu'un en propose une. Je pense qu'il devrait y avoir quelque chose de plus simple ou peut-être que quelqu'un voit un problème de sécurité que j'ai manqué.