Dans Linux moderne, les mots de passe stockés dans / etc / shadow
etc. sont cryptés avec SHA-512. Par exemple, dans un Dockerfile, lors de la création d'un utilisateur normal dans un conteneur, évitez d'avoir un mot de passe simple dans le fichier.
Dockerfile
RUN useradd -p 'encrypted_password' accountname
Ou
Dockerfile
RUN echo 'accountname:encrypted_password' | chpasswd -e
Je souhaite également définir un mot de passe tel que. Dans ce cas, il est nécessaire de crypter le mot de passe avec SHA-512 à l'avance, et plusieurs méthodes sont répertoriées.
Cependant, il semble que ** laquelle des différentes méthodes peut être utilisée dépend beaucoup de l'environnement d'exécution **.
Par exemple, selon la version de macOS de l'hôte, la fonction crypt
de python
ou perl
ne prend pas en charge SHA-512, ou ʻopenssl,
htpasswd le prend en charge dans la nouvelle version, mais
CentOS7` Il semble que les standards ne soient pas supportés, et il est nécessaire de les utiliser correctement selon les cas. Je ne pense pas qu'il soit possible de trouver et de changer la méthode une par une en fonction de l'environnement dans lequel l'image est construite, j'ai donc créé un script qui essaie plusieurs méthodes une par une. L'emplacement du fichier est le suivant
L'utilisation suivante est supposée.
Exemple de réglage initial de Wasward
# useradd -p "$(./passwd_sha512encrypt -u worker)" worker
Enter password for worker:
Enter password again for check. :
Exemple de configuration pour un compte créé
# ./passwd_sha512encrypt -f -u worker | chpasswd -e
Enter password for worker:
Enter password again for check. :
Pour ces exemples, vous serez invité à taper à partir de l'entrée standard. Puisque les informations requises sont différentes pour ʻuseradd, uniquement le mot de passe chiffré, et pour
chpasswd, la paire de nom de compte et de mot de passe chiffré, la sortie est commutée avec l'option
-f`.
Cependant, je ne pense pas qu'il soit possible de taper plusieurs fois au clavier dans les versions de conteneur. Il est réaliste de l'utiliser pour stocker des éléments chiffrés. J'ai également défini un argument optionnel (-o output-file
) pour sortir dans un fichier. L'utilisation détaillée est ci-dessous.
affichage d'aide
% ./passwd_sha512encrypt -h
[Usage] % passwd_sha512encrypt [options] [username] [rawpassword]
[Options]
-o output : Set outputfile (default: stdout)
-u username : Set username
-p rawpassword : Set destenation
-f : Output username:encrupted_password
(Default output is encrupted_password only)
-q : Skip type-miss check
-v : verbose output
-d : debug output
-h : Show Help (this message)
En interne, dans l'ordre ʻopenssl,
htpassword,
PHP,
Python (version 3 → Version 2),
perl, recherchez les répertoires inclus dans la variable d'environnement
PATH` dans l'ordre, Déterminez s'il prend en charge SHA-512 et exécutez.
Si aucun d'entre eux n'est pris en charge, cela échouera. dans ce cas. ** Le fichier de sortie spécifié avec l'option -o
n'est pas créé **, donc le comportement est différent de la redirection de la sortie de ce script avec un shell. Puisqu'un fichier de taille 0 n'est pas créé, je pense qu'il est facile d'arrêter le traitement en utilisant les dépendances de fichiers avec Makefile
.
Recommended Posts