142 lines
3.9 KiB
Markdown
142 lines
3.9 KiB
Markdown
# Rotation de mot de passe SSH/sudo
|
|
|
|
Petit projet Ansible pour changer le mot de passe d'un compte Linux existant
|
|
sur un ou plusieurs serveurs.
|
|
|
|
Le playbook demande le nouveau mot de passe au lancement et l'applique sur les
|
|
hotes cibles avec `chpasswd` via `sudo`. Le mot de passe n'est pas stocke dans
|
|
les fichiers du depot et la tache de changement est masquee avec `no_log: true`.
|
|
|
|
## Fichiers principaux
|
|
|
|
- `ansible.cfg` : configuration Ansible du projet.
|
|
- `inventories/hosts.yml` : inventaire principal et variables de connexion.
|
|
- `playbooks/change_password.yml` : playbook de changement de mot de passe.
|
|
|
|
## Configuration
|
|
|
|
Les variables communes sont definies dans `inventories/hosts.yml`, sous
|
|
`all.vars` :
|
|
|
|
```yaml
|
|
all:
|
|
vars:
|
|
ansible_user: admin
|
|
password_target_user: admin
|
|
```
|
|
|
|
- `ansible_user` est l'utilisateur SSH utilise pour se connecter aux serveurs.
|
|
- `password_target_user` est le compte dont le mot de passe sera change.
|
|
|
|
Gardez `password_target_user` identique a `ansible_user` lorsque le compte SSH
|
|
et le compte sudo sont les memes.
|
|
|
|
L'inventaire separe les serveurs en deux familles :
|
|
|
|
```yaml
|
|
linux_servers:
|
|
hosts:
|
|
linux-server-01.example.com:
|
|
linux-server-02.example.com:
|
|
ansible_host: 192.0.2.10
|
|
|
|
ssh_key_servers:
|
|
vars:
|
|
ansible_ssh_private_key_file: ~/.ssh/id_ed25519
|
|
hosts:
|
|
test-server.example.com:
|
|
linux-server-01.example.com:
|
|
|
|
ssh_password_servers:
|
|
hosts:
|
|
linux-server-02.example.com:
|
|
```
|
|
|
|
- `ssh_key_servers` regroupe les serveurs accessibles avec une cle SSH. Le
|
|
chemin de la cle privee est factorise dans les variables du groupe.
|
|
- `ssh_password_servers` regroupe les serveurs accessibles avec un mot de passe
|
|
SSH. Utilisez `--ask-pass` pour ces hotes.
|
|
- `linux_servers` reste le groupe de rollout principal. Un hote peut appartenir
|
|
a la fois a `linux_servers` et a une famille d'authentification.
|
|
|
|
Si un serveur avec cle SSH utilise une cle differente, placez l'exception sur
|
|
l'entree de l'hote :
|
|
|
|
```yaml
|
|
ssh_key_servers:
|
|
vars:
|
|
ansible_ssh_private_key_file: ~/.ssh/id_ed25519
|
|
hosts:
|
|
special-server.example.com:
|
|
ansible_ssh_private_key_file: ~/.ssh/special_server_key
|
|
```
|
|
|
|
## Utilisation
|
|
|
|
Lancez le playbook avec demande du mot de passe `sudo` :
|
|
|
|
```bash
|
|
ansible-playbook playbooks/change_password.yml --ask-become-pass
|
|
```
|
|
|
|
Le playbook demandera ensuite le nouveau mot de passe du compte cible, avec
|
|
confirmation.
|
|
|
|
## Deploiement progressif
|
|
|
|
Commencez par un petit groupe de test :
|
|
|
|
```bash
|
|
ansible-playbook playbooks/change_password.yml --ask-become-pass --limit test
|
|
```
|
|
|
|
Puis ciblez le groupe complet lorsque le test est valide :
|
|
|
|
```bash
|
|
ansible-playbook playbooks/change_password.yml --ask-become-pass --limit linux_servers
|
|
```
|
|
|
|
Pour cibler seulement les serveurs avec cle SSH :
|
|
|
|
```bash
|
|
ansible-playbook playbooks/change_password.yml --ask-become-pass --limit ssh_key_servers
|
|
```
|
|
|
|
Si la cle privee SSH est protegee par une passphrase, le playbook ne la demande
|
|
pas directement. Cette passphrase est geree par OpenSSH. Le plus fiable est de
|
|
charger la cle dans `ssh-agent` avant de lancer Ansible :
|
|
|
|
```bash
|
|
ssh-add ~/.ssh/id_ed25519
|
|
ansible-playbook playbooks/change_password.yml --ask-become-pass --limit ssh_key_servers
|
|
```
|
|
|
|
Pour cibler les serveurs avec mot de passe SSH, ajoutez `--ask-pass` :
|
|
|
|
```bash
|
|
ansible-playbook playbooks/change_password.yml --ask-pass --ask-become-pass --limit ssh_password_servers
|
|
```
|
|
|
|
## Verification
|
|
|
|
Verifier que l'inventaire est lisible :
|
|
|
|
```bash
|
|
ansible-inventory --list
|
|
```
|
|
|
|
Verifier la syntaxe du playbook :
|
|
|
|
```bash
|
|
ansible-playbook playbooks/change_password.yml --syntax-check
|
|
```
|
|
|
|
## Regles de securite
|
|
|
|
- Ne commitez jamais de mot de passe en clair.
|
|
- Utilisez `vars_prompt`, `ansible-vault` ou une source externe pour les secrets.
|
|
- Conservez `no_log: true` sur les taches qui manipulent un mot de passe ou un
|
|
hash de mot de passe.
|
|
- Testez toujours sur un groupe restreint avant de cibler tous les serveurs.
|
|
- Ne modifiez pas la politique SSH pendant une rotation de mot de passe.
|