Landlock LSM: Sandbox-Linux ohne Root-Rechte sichern

Landlock LSM: Sandbox-Linux ohne Root-Rechte sichern

Landlock LSM: Securing Linux Sandboxes Without Root Privileges

Landlock LSM: Anwendungs-Sandboxing direkt im Linux-Kernel ohne Root Landlock LSM: Application Sandboxing directly in the Linux Kernel without Root

Stellen Sie sich vor, Sie öffnen eine unbekannte PDF-Datei oder starten ein skriptartiges Tool aus einem verdächtigen Repository. Normalerweise müsste man entweder den gesamten Host infizieren riskieren oder aufwändige Virtualisierung (VMs, LXC) aufsetzen. Was wäre, wenn der Linux-Kernel jede beliebige Anwendung in einen Käfig sperren könnte – und das alles ohne Root-Rechte und komplizierte Profile? Imagine you open an unknown PDF file or launch a script-like tool from a suspicious repository. Normally, you would have to risk infecting the entire host or set up complex virtualization (VMs, LXC). What if the Linux kernel could lock any application into a cage – all without root privileges or complicated profiles?

Willkommen in der Welt von Landlock. Ich habe jahrelang AppArmor-Profile für Distributions-Packages geschrieben, nur um bei jedem Update zu beten, dass die Pfade nicht wechseln. Landlock löst dieses Problem elegant und bringt echte Sicherheit für Endnutzer und Server-Admins in den Alltag. In diesem Artikel zeige ich Ihnen praxisnah, warum Landlock ein Gamechanger ist, wie Sie es sofort testen können und welche Fallstricke es gibt. Wir werfen einen Blick hinter die Kulissen des Linux Security Modules (LSM), schauen uns konkrete Befehle an und beleuchten reale Einsatzszenarien. Vergessen Sie komplexe SELinux-Policies oder statische Whitelists – Landlock setzt moderne Grenzen für Ihren Datenzugriff. Welcome to the world of Landlock. I spent years writing AppArmor profiles for distribution packages, only to pray with every update that the paths wouldn’t change. Landlock solves this problem elegantly and brings real security to the daily lives of end-users and server admins. In this article, I will show you practically why Landlock is a game-changer, how you can test it immediately, and what the pitfalls are. We will take a look behind the scenes of the Linux Security Module (LSM), examine concrete commands, and highlight real-world use cases. Forget complex SELinux policies or static whitelists – Landlock sets modern boundaries for your data access.

Das Problem: Warum traditionelles Sandboxing oft versagt The Problem: Why traditional sandboxing often fails

Bisher gab es unter Linux zwei Hauptwege, Anwendungen einzuschränken: Entweder nutzte man Capabilities (capsh), die grobe Systemrechte entziehen, oder man setzte komplexe Mandatory Access Control (MAC)-Systeme wie SELinux oder AppArmor ein. Letztere sind mächtig, erfordern aber fast immer privilegierten Zugriff zur Konfiguration und haben eine steile Lernkurve. Eine AppArmor-Policy schreiben bedeutet, jeden möglichen Dateipfad einer Anwendung vorherzusehen. Ändert ein Update den Pfad eines Config-Files oder eines Cache-Verzeichnisses, bricht die Anwendung hart ab (AVC denial). Für lokale Testläufe oder temporäre Skripte ist dieser Aufwand kontraproduktiv. Wer schon einmal versucht hat, schnell ein isoliertes Verzeichnis für ein Python-Skript bereitzustellen, kennt diese Hürde. Until now, there were two main ways to restrict applications on Linux: either using capabilities (capsh), which strip away broad system privileges, or using complex Mandatory Access Control (MAC) systems like SELinux or AppArmor. The latter are powerful but almost always require privileged access for configuration and have a steep learning curve. Writing an AppArmor policy means anticipating every possible file path of an application. If an update changes the path of a config file or a cache directory, the application crashes hard (AVC denial). For local test runs or temporary scripts, this effort is counterproductive. Anyone who has tried to quickly set up an isolated directory for a Python script knows this hurdle.

Persönliche Einschätzung: Die Stärke von MAC-Systemen liegt im Schutz des Host-Betriebssystems gegen kompromittierte Standard-Dienste (wie den Webserver). Doch sie eignen sich schlecht als dynamische Sandbox für individuelle User-Aktionen. Hier brauchen wir etwas Agiles, das vom User selbst gesteuert werden kann, ohne den Administrator zu involvieren. Personal Assessment: The strength of MAC systems lies in protecting the host operating system against compromised standard services (like the web server). However, they are poorly suited as a dynamic sandbox for individual user actions. Here, we need something agile that can be controlled by the user themselves without involving the administrator.

Landlock erklärt: Minimalistische Einschränkungen maximaler Wirkung Landlock Explained: Minimalist restrictions with maximum impact

Landlock ist ein LSM (Linux Security Module), das im Kernel 5.13 eingeführt wurde. Es erlaubt es einem Prozess, seine eigenen Zugriffsrechte auf Dateien und Netzwerkobjekte streng einzuschränken. Einmal eingeschränkt, kann der Prozess diese Rechte weder erweitern noch durch Child-Prozesse umgehen. Die Magie dabei: Landlock nutzt keine komplexen Policies, sondern arbeitet mit einfachen Regeln (Pfade, Rechte-Masken) und erfordert für den eigentlichen Aufruf keine Root-Rechte. Lediglich das Laden des LSM-Moduls benötigt Root; danach arbeiten normale Nutzer eigenständig. Landlock is an LSM (Linux Security Module) introduced in kernel 5.13. It allows a process to strictly restrict its own access rights to files and network objects. Once restricted, the process can neither expand these rights nor bypass them through child processes. The magic here: Landlock does not use complex policies but works with simple rules (paths, permission masks) and requires no root privileges for the actual call. Only loading the LSM module requires root; after that, normal users work independently.

Wie funktioniert das konkret? Der Kernel bietet eine neue Syscall-Schnittstelle (landlock_add_restrictions). Über diese Schnittstelle legt eine Anwendung oder ein Wrapper fest, welche Verzeichnisse gelesen, geschrieben oder ausgeführt werden dürfen. Alles, was nicht explizit erlaubt ist, wird blockiert. Sogar der Zugriff auf /proc oder /sys lässt sich filtern, obwohl hier Vorsicht geboten ist (mehr dazu später). How does this work in practice? The kernel provides a new syscall interface (landlock_add_restrictions). Through this interface, an application or a wrapper defines which directories may be read, written, or executed. Everything not explicitly allowed is blocked. Even access to /proc or /sys can be filtered, although caution is advised here (more on this later).

Beispiel 1: Den Browser einsperren Example 1: Locking down the browser

Eine typische Anwendung ist das Starten eines Webbrowsers in einer Sandbox, damit Malware kein Homeverzeichnis plündern kann. Stellen Sie sich vor, Sie nutzen firefox. Ohne Landlock könnte ein schadhafter JavaScript-Code versuchen, Dateien unter ~/.ssh zu lesen. Mit Landlock definieren wir einen Regelbund (Rule Set), der Firefox ausschließlich das Download-Verzeichnis und sein eigenes Profil-Verzeichnis zugreift. Wenn der Browser nun versucht, auf ~/.bash_history zuzugreifen, schlägt der Öffnungsversuch fehl, und der Angreifer bleibt leer aus. Diese Art der Isolation ist besonders wertvoll für Benutzer, die regelmäßig ungetesteten Code ausführen müssen, etwa Entwickler beim Testen von Third-Party-Bibliotheken. A typical application is starting a web browser in a sandbox so that malware cannot plunder a home directory. Imagine you are using Firefox. Without Landlock, malicious JavaScript code could attempt to read files under ~/.ssh. With Landlock, we define a rule set that grants Firefox access exclusively to the download directory and its own profile directory. If the browser now tries to access ~/.bash_history, the open attempt fails, and the attacker comes up empty-handed. This type of isolation is particularly valuable for users who regularly have to run untested code, such as developers testing third-party libraries.

Persönliche Einschätzung nach Erklärung: Landlock fühlt sich an wie AppArmor, nur dass der Admin entfällt. Es ist das perfekte Werkzeug für den defensiven Admin, der seinen Leuten mehr Freiheit geben will, ohne das Gesamtsystem zu gefährden. Die Einarbeitungszeit beträgt Stunden, nicht Monate wie bei SELinux. Personal Assessment after explanation: Landlock feels like AppArmor, only without the need for an admin. It is the perfect tool for the defensive admin who wants to give their people more freedom without endangering the overall system. The learning curve is measured in hours, not months like with SELinux.

Praxis-Einstieg: Ihre erste Landlock-Sandbox bauen Practical Start: Building your first Landlock sandbox

Um Landlock wirklich zu verstehen, reicht Theorie nicht. Glücklicherweise stellt die Community ein praktisches Kommandozeilen-Werkzeug namens firejail bereit, das seit Version 0.9.68 vollständige Landlock-Unterstützung integriert hat. Aber noch direkter geht es mit dem Referenz-Tool landlocked, das Teil des linux-api-docs Projekts oder separat als kleines Utility verfügbar ist. Da wir hier echte Befehle sehen wollen, nutzen wir firejail in Kombination mit der Option —landlock, um den Effekt sofort sichtbar zu machen. To truly understand Landlock, theory is not enough. Fortunately, the community provides a practical command-line tool called firejail, which has integrated full Landlock support since version 0.9.68. But it is even more direct with the reference tool landlocked, which is part of the linux-api-docs project or available separately as a small utility. Since we want to see real commands here, we will use firejail in combination with the --landlock option to make the effect immediately visible.

Zuerst prüfen wir, ob Ihr Kernel Landlock unterstützt. Führen Sie einfach folgenden Befehl aus: First, we check if your kernel supports Landlock. Simply run the following command:

sudo sysctl kernel.landlock=1

Wenn dieser Fehlerfrei läuft, ist der Weg frei. Falls Sie permission denied erhalten, muss Landlock vielleicht in der Kernel-Konfiguration aktiviert sein (CONFIG_SECURITY_LANDLOCK=y). Nun zum ersten echten Testlauf. Wir erstellen ein einfaches Shell-Skript test.sh, das versucht, eine Datei im Wurzelverzeichnis zu schreiben: If this runs without errors, you are good to go. If you receive “permission denied,” Landlock might need to be enabled in the kernel configuration (CONFIG_SECURITY_LANDLOCK=y). Now for the first real test run. We create a simple shell script test.sh that attempts to write a file in the root directory:

#!/bin/bash
# test.sh
if touch /tmp/testdatei_landlock; then
  echo "Erfolg: Schreibzugriff auf /tmp gewährt"
else
  echo "Fehler: Schreibzugriff verweigert"
fi

Starten wir dieses Skript normal, funktioniert alles. Starten wir es nun innerhalb einer Firejail-Umgebung, die Landlock aktiviert: If we run this script normally, everything works. Now, let’s run it within a firejail environment that has Landlock enabled:

firejail --landlock=full ./test.sh

Aha! Je nach genauer Firejail-Version und Konfiguration erhalten wir hier meist eine Ablehnung (Permission denied) beim Versuch, /tmp zu beschreiben. Aha! Depending on the exact firejail version and configuration, we usually receive a “Permission denied” here when attempting to write to /tmp.