Quelle est la manière la moins sécurisée de stocker un mot de passe utilisé par un script?

13

J'ai un script Bash qui s'authentifie automatiquement avec un service en utilisant mon nom d'utilisateur et mon mot de passe. Les informations d'identification sont actuellement stockées en texte brut dans le script.

Quelles précautions dois-je prendre pour stocker le plus en toute sécurité ces informations d'identification tout en autorisant l'accès au script?

Points de clarification:

  • Je comprends que, si elles sont disponibles, d'autres méthodes d'authentification devraient être utilisées à la place. Je veux toujours savoir quoi faire dans le cas où l'authentification par mot de passe est la seule option.
  • Ne pas stocker du tout le mot de passe n'est pas une réponse acceptable ici. Je pose des questions sur le cas où le script doit avoir un accès sans surveillance au mot de passe.
ændrük
la source
2
pas stocker la partie de mot de passe des informations d'identification, peut-être?
Thomas Ward
Cela ne fonctionnerait-il pas pour accéder au porte-clés GNOME ou à quelque chose de similaire?
Firefeather
Peut-être que si vous pouviez le stocker en tant que hachage cryptographique (tel que SHA-1), ce serait bien.
Anonyme
ROT13 l'obscurcirait, mais ne le sécuriserait d'aucune façon.
Anonyme
@Anonymous Si le mot de passe est stocké sous forme de hachage cryptographique, comment recommandez-vous de le récupérer?
ændrük

Réponses:

8

Quel genre de service? Certains services ont d'autres méthodes pour s'authentifier, par exemple les clés SSH pour SSH conjointement avec l'agent SSH.

Je stockerais le mot de passe séparément du script et m'assurerais que tous les composants de chemin ont les autorisations correctes définies. Par exemple, assurez - vous que dans le chemin /path/to/file, /, /pathet /path/toappartiennent à un utilisateur qui vous avez confiance ( root) et que ceux - ci ne sont pas inscriptibles par quelqu'un qui n'a pas le droit de voir vos fichiers. Enfin, les autorisations recommandées pour file600 ou 400.

Cela filepourrait ressembler à ceci:

PASSWORD='something that you cannot remember'

Dans votre script, utilisez le code ci-dessous pour importer la variable:

. /path/to/file

Quant à votre script, assurez-vous qu'il ne contient pas de trous qui pourraient permettre aux attaquants d'exécuter du code dans le contexte du script (par exemple, environnement non contrôlé qui peut avoir un $PATHensemble de variables arbitraires ou une utilisation non valide d'autres fichiers (par exemple, sourcing d'un fichier accessible en écriture)) .

Quant à la protection réelle de votre mot de passe, vous ne pouvez pas. Il doit être accessible d'une manière ou d'une autre à l'autre service. Comme alternative, vous pouvez crypter le fichier / script contenant le mot de passe en utilisant opensslou gpgalors vous devez entrer un mot de passe avant que les informations d'identification ne soient déverrouillées. Ceci est particulièrement utile si le mot de passe de votre service est difficile à retenir.

Lekensteyn
la source
14

Au lieu de coder en dur le mot de passe dans le fichier, stockez-le dans un fichier séparé et protégez le fichier ( chmod 700ou chmod 500) afin que seuls les utilisateurs autorisés puissent y accéder.

Récupérez le mot de passe avec cat /dir/to/file/with/.passwordau lieu de lire le fichier et d'en stocker le contenu dans une variable.

Rinzwind
la source
Certains outils ont même une option pour lire le mot de passe d'un fichier directement pour cette raison précisément, comme l' --passphrase-fileoption gpg .
2
... et en faire un .dotfile (/dir/to/file/with/.password)
knb
2
chmod 400pour les fichiers (lecture seule). Bien sûr, vous devez sécuriser les principaux répertoires (700 ou 500, voire 100 si vous êtes paranoïaque). Notez que 400 (ou 500 pour les répertoires) sont suffisants, d'autres modes (100) peuvent être considérés comme une sécurité par l'obscurité , tout comme masquer le fichier en mettant un point devant le nom.
Lekensteyn
1

Je sais que c'est une vieille question mais j'ai rencontré ce problème similaire et j'ai utilisé le porte-clés d'Ubuntu pour le résoudre. Voici une solution sur ubuntu 18.04LTS Ouvrez le terminal Notez keyring set {{service}} {{username}} par exemple si vous l'utilisez pour la journalisation des mots de passe de l'école:

keyring set school mohamed

Il vous connectera pour un mot de passe entrez le mot de passe. Maintenant, le mot de passe que vous avez entré est stocké dans le trousseau de clés Ubuntu.

Pour obtenir ce mot de passe, écrivez dans le terminal:

keyring get school mohamed

pour l'utiliser dans le contexte d'un script:

password=$(keyring get school mohamed)

Le mot de passe contient maintenant le mot de passe que vous avez entré précédemment.

Mohamed Ashref
la source