Co-authored-by: DerLinkman <derlinkman@gmail.com> Reviewed-on: #1
119 lines
4.7 KiB
Markdown
119 lines
4.7 KiB
Markdown
# Rolle `bootstrap`
|
||
|
||
Ersteinrichtung (Provisioning) eines frischen Debian-Hosts. Die Rolle legt den
|
||
Admin-User an, installiert Basispakete, härtet die SSH-Konfiguration, verteilt
|
||
autorisierte SSH-Keys, konfiguriert Tastaturlayout, MOTD, Bash-Aliase und
|
||
sysctl, und bindet optional die Rollen `docker` und `monitoring` ein.
|
||
|
||
> Siehe auch das Top-Level-Playbook `bootstrap.yml` sowie die
|
||
> [Repo-README](../../README.md).
|
||
|
||
## Voraussetzungen
|
||
|
||
- Debian-Ziel-Host
|
||
- SSH-Zugang als Benutzer, der `become` darf (Playbook nutzt `user: admin`)
|
||
- `ansible.posix` Collection (für `sysctl`-Modul)
|
||
|
||
## Einbindung
|
||
|
||
Die Rolle wird normalerweise über das Top-Level-Playbook `bootstrap.yml`
|
||
aufgerufen, kann aber auch direkt per `include_role`/`import_role` eingebunden
|
||
werden:
|
||
|
||
```yaml
|
||
- hosts: all
|
||
become: true
|
||
user: admin
|
||
roles:
|
||
- role: bootstrap
|
||
```
|
||
|
||
```bash
|
||
ansible-playbook -i inventory/dmc12.yml --vault-password-file .vault_pass bootstrap.yml
|
||
```
|
||
|
||
## Funktionsweise
|
||
|
||
`tasks/main.yml` reiht die Subtasks nacheinander aus und bindet am Ende
|
||
bedarfsabhängig die Rollen `docker` und `monitoring` ein:
|
||
|
||
1. `install-basicpackages.yml` – Basispakete installieren
|
||
2. `create-admin-user.yml` – Admin-User anlegen + sudoers
|
||
3. `set-motd.yml` – MOTD via fastfetch (`tags: motd`)
|
||
4. `set-keyboardlayout.yml` – QWERTZ-Layout
|
||
5. `install-openssh.yml` – OpenSSH Server/Client (`tags: ssh`)
|
||
6. `configure-ssh.yml` – sshd_config härtbar (`tags: ssh`)
|
||
7. `add-ssh-keys.yml` – authorized_keys verteilen (`tags: ssh`)
|
||
8. `setup-bashrc.yml` – nützliche Aliase (`tags: bashrc`)
|
||
9. `configure-sysctl.yml` – vm.swappiness = 10 (`tags: sysctl`)
|
||
10. `import_role: docker` (sofern nicht `skip_docker`)
|
||
11. `import_role: monitoring` (sofern nicht `skip_monitoring`)
|
||
|
||
### Installierte Basispakete
|
||
|
||
`fastfetch`, `htop`, `curl`, `wget`, `git`, `sudo`, `console-setup`,
|
||
`qemu-guest-agent`, `cron`, `net-tools`, `tcpdump`, `locales-all`.
|
||
|
||
### SSH-Härtung
|
||
|
||
Die Vorlage `templates/sshd.conf.j2` deaktiviert Root-Login und
|
||
Passwort-Authentifizierung, erlaubt ausschließlich Publickey-Auth und setzt
|
||
restriktive Forwarding-/Logging-Optionen. Nach Änderung wird der sshd via
|
||
Handler neu gestartet.
|
||
|
||
## Variablen
|
||
|
||
| Variable | Typ | Default | Beschreibung |
|
||
|-------------------------|----------|-------------------|-----------------------------------------------------|
|
||
| `admin_authorized_keys` | list | siehe `defaults/` | Liste von `{ key, comment }`-Einträgen für `admin` |
|
||
| `admin_password` | string | siehe `defaults/` | SHA-512-Hash des Admin-Passworts |
|
||
|
||
### Steuer-Variablen (keine Defaults, optional setzen)
|
||
|
||
| Variable | Typ | Default | Beschreibung |
|
||
|--------------------|--------|---------|-----------------------------------------------------------|
|
||
| `skip_docker` | bool | `false` | Wenn `true`, wird die `docker`-Rolle übersprungen |
|
||
| `skip_monitoring` | bool | `false` | Wenn `true`, wird die `monitoring`-Rolle übersprungen |
|
||
| `ssh_service_name` | string | `sshd` | Name des SSH-Service (überschrieben bspw. für `ssh`) |
|
||
|
||
`admin_authorized_keys` wird auch pro Inventory in `group_vars/external.yml`
|
||
überschrieben. Der Handler `Restart sshd` verwendet `ssh_service_name`, sofern
|
||
gesetzt (z. B. `ssh` für `gitea`/`ipam` in `inventory/dmc12.yml`).
|
||
|
||
## Templates
|
||
|
||
| Template | Ziel |
|
||
|------------------------|------------------------------------------------|
|
||
| `sshd.conf.j2` | `/etc/ssh/sshd_config` (validiert via `sshd -T`) |
|
||
| `authorized_keys.j2` | `/home/admin/.ssh/authorized_keys` |
|
||
| `sudoers-admin.j2` | `/etc/sudoers.d/10-admin` (validiert via `visudo -cf`) |
|
||
| `keyboard.j2` | `/etc/default/keyboard` |
|
||
|
||
## Handler
|
||
|
||
| Handler | Auslöser |
|
||
|-------------------------|-------------------------------------------|
|
||
| `Restart sshd` | Änderung an `sshd_config` |
|
||
| `Reload keyboard layout`| Änderung an `/etc/default/keyboard` |
|
||
|
||
## Tags
|
||
|
||
`motd`, `ssh`, `bashrc`, `sysctl` – ermöglichen das gezielte Re-Apply einzelner
|
||
Teile, z. B.:
|
||
|
||
```bash
|
||
ansible-playbook bootstrap.yml -i inventory/dmc12.yml -t ssh
|
||
```
|
||
|
||
## Abhängigkeiten
|
||
|
||
- `docker` (optional, via `import_role`)
|
||
- `monitoring` (optional, via `import_role`)
|
||
|
||
## Hinweise
|
||
|
||
- `configure-sysctl.yml` wird auf LXC-Containern übersprungen
|
||
(`virtualization_type != "lxc"`).
|
||
- `setup-bashrc.yml` legt Aliase für alle regulären User inkl. root an.
|
||
- `install-openssh.yml` entfernt ggf. das Meta-Paket `ssh` vor der
|
||
Installation von `openssh-server`/`openssh-client`. |