DebOps-Projekt mit LXC

Seit Kurzem darf ich an einem neuen Projekt mitwirken, das unter Verwendung von DebOps einen Verbund von Debian-Servern automatisiert und konfiguriert.

Ich verwende Debian und DebOps seit Jahren in verschiedensten Projekten, was hier neu und anders ist, ist die Verwendung von LXC als Virtualisierungs-Technologie.

LXC bietet Linux-Virtualisierung, die schlanker ist als etwa KVM oder VirtualBox. Die Container (hier vermischen sich die Begriffe: mit “Containern” assoziiert man meistens Docker. Ich supporte im Übrigen auch Docker) entstehen als eine erweiterte chroot-Umgebung, teilen sich aber Ressourcen wie Storage und RAM mit dem Host-System, genauso wie den laufenden Kernel.

Die Ansible-Rolle “debops.lxc” erlaubt es, derartige Container im Ansible-Inventory zu definieren und im Zuge des DebOps-Deployments auszurollen. Sobald die Container existieren und laufen, sind sie als Hosts per ansible/debops ansprechbar und konfigurierbar, wie eine andere Debian-Instanz.

So kann man einen kompletten Stack aus LXC-Host und LXC-Containern aufbauen, der zB Web-Applikationen samt Datenbanken und sonstige Hilfs-Containern bereitstellen kann.

Multi-Tenant-Betrieb von LXC

Es wird von vielen als eine Designschwäche von LXC gesehen, dass alle entstehenden Container per Default mit derselben User- und Group-ID betrieben werden. Im Falle des Ausbruchs aus einem Container könnte ein Angreifer sodann auf die Prozesse der anderen Container, bzw. deren Ressourcen zugreifen.

Im vorliegenden Projekt gelingt es mir, durch Verwendung separater ID-Maps pro Container (selbstverständlich definiert als DebOps-Variablen) die Container mit verschiedenen IDs zu betreiben. Dies verringert dieses Angriffs-Risiko erheblich.

Features

Ziel ist es, sämtliche Eigenschaften dieses Stacks in DebOps-Konfigurationen abzubilden:

  • Netzwerk-Config
  • System-User
  • Root-Account
  • Paket-Verwaltung (apt)
  • Firewall (ferm)
  • Datenbanken
  • PHP-FPM
  • Webserver (nginx)
  • tcpwrappers
  • fail2ban
  • Backups
  • cronjobs
  • LXC-Container
  • ssh-keys, sshd-config
  • und einiges mehr …. !

Security

Zentrales Anliegen von DebOps ist Sicherheit. Die Rollen unterstützen mit sinnvollen Defaults und vielfältigen Parametern ein sicheres und zeitgemäßes Setup.

Unter diesen Punkt fällt auch das Management von vertraulichen Infos wie Passwörtern und private keys im git-Repository des Projekts. Hier kann zB git-crypt eingesetzt werden, um solche Secrets verschlüsselt und versioniert im Repo abspeichern zu können.