Gérer des identifiants
Ligne 37 : | Ligne 37 : | ||
===Script de création d'identifiant=== | ===Script de création d'identifiant=== | ||
Le script suivant, nommé, par exemple, <code>create_credentials.ps1</code>, est utilisable de façon interactive : | Le script suivant, nommé, par exemple, <code>create_credentials.ps1</code>, est utilisable de façon interactive : | ||
− | <syntaxhighlight lang="powershell" line | + | <syntaxhighlight lang="powershell" line highlight="7"> |
#!/usr/bin/pwsh | #!/usr/bin/pwsh | ||
Version actuelle datée du 22 janvier 2021 à 14:26
Sommaire
Présentation
Cette page a pour objet de décrire comment gérer des identifiants avec PowerShell.
Contexte
Dans le cadre de rédaction de scripts PowerShell, ils peuvent être amenés à être joués de façon automatique et récurrente.
A ce titre, s'ils doivent utiliser des identifiants pour se connecter à des ressources, il est bien évidemment fortement déconseillé de stocker des mots de passe en clair dans les scripts.
Une des solutions pour éviter l'usage de mots de passe en clair est d'utiliser un objet Credential (identifiant). Cet objet, au travers de la méthode Export-Clixml, permet de stocker le mot de passe :
- de façon cryptée sur les système Windows
- sous forme de tableau de caractères Unicode sur les systèmes non-Windows.
"Export-Clixml exporte uniquement les informations d'identification cryptées sous Windows. Sur les systèmes d'exploitation non Windows tels que macOS et Linux, les informations d'identification sont exportées sous forme de texte brut stocké sous forme de tableau de caractères Unicode. Cela fournit un certain obscurcissement mais ne fournit pas de chiffrement."[1]
La solution présentée ici est une solution parmi d'autres, et ne fait pas autorité en la matière.
Mise en œuvre
Dans l'idée, il faudra avoir 3 fichiers :
- un fichier dans lequel stocker le mot de passe
- un script permettant de créer les identifiants
- un script lambda ayant besoin d'utiliser un des mots de passe stockés
Fichier pour mot de passe
La gestion des mots de passe au travers de la méthode Export-Clixml ne permet pas de stocker plusieurs utilisateurs. En effet, un identifiant correspond à un objet et la méthode Export-Clixml stocke un objet dans un fichier.
Il va donc falloir respecter une convention de nommage afin de pouvoir organiser les mots de passe. Par exemple : <serveur>_<utilisateur>.xml
.
Il faudra également stocker ces fichiers dans un répertoire dont l'accès sera sécurisé. Par exemple : <chemin_du_dossier>/<mon_dossier_caché>
.
Ainsi, nous pourrions avoir, par exemple, un dossier /data/scripts/.credentials
qui contiendrait les fichiers suivants :
/data/scripts/.credentials/myserver1_root.xml /data/scripts/.credentials/myserver2_www.xml /data/scripts/.credentials/mybackupserver_admin.xml
Script de création d'identifiant
Le script suivant, nommé, par exemple, create_credentials.ps1
, est utilisable de façon interactive :
1 #!/usr/bin/pwsh
2
3 ## Script pour créer des credentials
4
5 ## Initialisation des variables
6 # Stockage des fichiers de credentials
7 $location = "/data/scripts/.credentials"
8
9 # Demande du serveur concerné par les credentials
10 $server = Read-Host -Prompt 'Veuiller renseigner le serveur '
11
12 # Demande du nom d'utilisateur et du mot de passe
13 $cred = Get-Credential -Message "Veuillez renseigner l'utilisateur et le mot de passe :"
14
15 # Fichier dans lequel enregistrer les credentials
16 $file = $($location + "/" + $server + "_" + $cred.UserName + "_ps.xml")
17
18 # Enregistrement des credentials dans un fichier
19 $cred | Export-Clixml -Path $file
20
21 # Sécurisation du fichier en modifiant ses droits d'accès
22 chmod 0600 $file
23
24 Write-Host "Fichier de credentials $file créé avec succès !"
La seule contrainte sera de penser à renseigner la ligne 7
pour indiquer dans quel dossier sera enregistré le fichier d'identifiant.
Script appelant un identifiant
Une fois le ou les fichier(s) d'identifiant créé(s), il(s) devra/devront être appelé(s) de la façon suivante :
#!/usr/bin/pwsh
# Penser à utiliser le script create_credentials.ps1 pour créer les credentials
## Initialisation variables
# Dossier des identifiants
$CredsFileLocation="/data/scripts/.credentials"
# Serveurs et utilisateurs à utiliser
$serverA="myserver"
$serverB="mybackupserver"
$userA="root"
$userB="admin"
# Construction des fichiers d'identifiants à utiliser
$FileCredsA=$($CredsFileLocation + "/" + $serverA+ "_" + $userA+ "_ps.xml")
$FileCredsB=$($CredsFileLocation + "/" + $serverB+ "_" + $userB+ "_ps.xml")
# Importation des credentials
$CredsA=Import-Clixml -Path $FileCredsA
$CredsB=Import-Clixml -Path $FileCredsB
# Exemple d'utilisation d'un objet d'identifiant
New-SSHSession -ComputerName $serverA -Credential $CredsA
# Exemple d'utilisation avec récupération en clair du mot de passe de l'utilisateur B
$PasswdB=$CredsB.GetNetworkCredential().Password
Références
- ↑ Documentation officielle PowerShell de l'applet Export-Clixml (https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/export-clixml#example-3--encrypt-an-exported-credential-object-on-windows)