En toute sécurité en passant le mot de passe pour openssl via stdin
Nous savons que nous pouvons chiffrer un fichier avec openssl à l'aide de cette commande:
openssl aes-256-cbc -a -salt -in twitterpost.txt -out foo.enc -pass stdin
Le mot de passe sera lue depuis l'entrée standard. En tant que tel, afin de fournir le mot de passe à l'avance, tout ce que nous devons faire est d'ajouter
echo "someGoodPassword" |
à la commande ci-dessus. Ma question est: Comment puis-je faire cela de manière plus sécurisée? La méthode ci-dessus ne regarde pas assez sécurisé.
J'apprécierais quelques commentaires à propos de ce que je puisse comprendre ce problème.
OriginalL'auteur Enchilada | 2011-06-12
Vous devez vous connecter pour publier un commentaire.
pratiquement n'importe quel mécanisme vous utilisez sera snoopable par la racine, donc garder cela à l'esprit.
L'option de l'écho, s'affiche dans le "
ps
' annonces, ce qui la rend vulnérable à des utilisateurs ordinaires de fouiller et de trouver le mot de passe.Vous pouvez utiliser
-pass file:filename
pour utiliser un fichier, de sorte que vous pouvez utiliser:cela crée le fichier illisible par les autres comptes (mais toujours lisible que par root). On suppose que le script est utilisé une seule fois pour créer le passfile, comme si vous répétez le processus, il a tendance à être dans un fichier, et donc vous avez besoin pour
chmod go-rwx
le fichier afin de le rendre illisible par les autres utilisateurs.alors que vous utilisez:
pour effectuer le chiffrement, à l'aide de la pré-créé le fichier de mot de passe.
D'autres mécanismes sont
-pass env:ENVVAR
pour utiliser une variable d'environnement (encore une fois arriver là-bas sans révéler qu'il est l'astuce)Qui rendrait les choses relativement sûre, cependant, s'il existe une application spécifiquement conçue pour l'attaque de votre programme, alors tous les paris sont éteints - Nous pouvons snoop le clavier le mot de passe est tapé, nous pouvons lire les e/S que le fichier est écrit, on peut lire le fichier, on peut lire dans votre environnement. Il n'y a pratiquement pas de protection à 100% sûr - Vous pouvez utiliser le fichier ouvert, dissocier, mais garder le descripteur de fichier ouvert et passer la poignée autour de " truc donc il n'y a aucune trace du mot de passe sur le système de fichier (utilisez fd:nombre comme argument de passe) de l'application avec l'INTERFACE utilisateur utilise un fd également
Si c'est une partie d'une application de bureau de gnome, vous pouvez utiliser le gnome-keyring comme un emplacement de stockage pour le mot de passe est crypté et généralement inaccessibles lorsque l'utilisateur n'est pas connecté (KDE a kwallet IIRC). Les applications Adobe AIR ont un mot de passe mécanisme de stockage aussi (je ne sais pas de l'AIR du mécanisme de fixation), mais parce que vous êtes à l'aide d'un script shell idiomes, j'attends ce ne sont pas vraiment une option.
echo ne s'affiche pas dans
ps
listes que c'est un construit-dans (au moins en bash)OriginalL'auteur Petesh
Version courte
Utilisation d'un tube nommé.
Version longue
Utilisation d'un tube nommé. Vous pouvez le créer en bash avec
par exemple
Il va ouvrir un canal nommé, généralement une file d'attente FIFO, et vous verrez sur la liste des processus, quelque chose comme
Il sera lisible que par l'utilisateur actuel et sera automatiquement fermée après qu'il a été lu, de sorte que vous n'avez pas à vous soucier des autorisations et le nettoyage du disque (le tuyau de fermer si le plantage du programme, tandis qu'un fichier créé par vous, comme suggéré dans une autre réponse serait de rester sur le disque).
De cette façon, il sera à proximité de la manière la plus rapide possible, juste après la commande lire et sans attendre la fin de sa tâche (je viens de faire un test: chiffrer quelques gigaoctets et essayez de lire le tube nommé (c'est visible dans la liste des processus): le canal nommé ferme instantanément, même si openssl prend une éternité à chiffrer).
À propos de vos commentaires
Si votre ordinateur a été piraté et que l'attaquant a les mêmes droits d'utilisateur, vous êtes fait pour. Par exemple le pirate peut facilement modifier votre .bashrc pour alias openssl afin qu'il démarre une hypotetic "mal-openssl" cette copie de votre mot de passe et les données avant de les manipuler tout le réel openssl, vous laissant avec votre faux sentiment de sécurité.
Cela dit, je ne suis pas un expert en sécurité, donc si quelqu'un veut downvote moi dans l'oubli (et dites-moi pourquoi), vous êtes les bienvenus.
OriginalL'auteur Riccardo Galli
Si je comprends bien, votre concert sur
est que le mot de passe sera visible dans la liste des processus à tous les utilisateurs pendant une brève quantité de temps. Qui peuvent être facilement travaillé autour avec bash est
<<<
la redirection ne fonctionne pas dans le bon vieux shell POSIX, tout de même):Cette construction prend en charge interpolation de variable (
<<<"$password"
) et la sortie de commande peut être joué plus ou redirigé vers un fichier comme d'habitude.OriginalL'auteur firegurafiku
Mettre un mot de passe en bash ou autre fichier de script, et de faire 600 autorisations pour elle. Qui vous permet de vous afficher le fichier, et le mot de passe ne sera pas révélé de n'importe où.
OriginalL'auteur Nickolay Olshevsky
Vous pouvez utiliser plusieurs méthodes pour passer à travers le mot de passe: https://www.openssl.org/docs/man1.0.2/apps/openssl.html#PASS-PHRASE-ARGUMENTS
@Petesh dit, le
root
pouvez tout lire!Par conséquent, si vous écrivez le mot de passe dans toutes les communes(!) fichier, par exemple
echo
truc dans une pipela
root
utilisateur pourrait trouver cela!Ne préfère pas utiliser tout ce qui est disponible via
/proc
(par exemple, par leps
)Donc, ne pas utiliser...
ou
La meilleure solution
Passer à travers les mots de passe pour
openssl
via pipe/fifo:ou
ou
OriginalL'auteur andras.tim