Linux Administration

Linux-Befehl chown: Besitzer und Gruppen von Dateien ändern

Mit chown lassen sich unter Linux Besitzer und Gruppen von Dateien und Verzeichnissen ändern. Dieser Beitrag erklärt Syntax, Optionen und typische Praxisbeispiele – vom einzelnen Dokument bis zur rekursiven Anpassung ganzer Verzeichnisstrukturen.

7 min Lesezeit
Grafik: Besitzer und Gruppen richtig ändern

Wer unter Linux mit Dateien, Verzeichnissen, Webservern oder Serverdiensten arbeitet, begegnet früher oder später dem Befehl chown. Das Kommando gehört zu den grundlegenden Werkzeugen der Linux-Administration und entscheidet darüber, wem eine Datei oder ein Verzeichnis gehört.

Gerade nach dem Kopieren von Dateien, beim Einrichten eines Webservers, bei Backups oder beim Betrieb von Anwendungen in unterschiedlichen Benutzerkontexten stimmen die Besitzverhältnisse nicht immer. Mit chown lassen sie sich gezielt korrigieren.

In diesem Beitrag schauen wir uns chown von den Grundlagen bis zu praktischen Beispielen an.

Was ist chown?

Der Name chown steht für:

change owner

Mit dem Befehl können der Besitzer und die zugehörige Gruppe einer Datei oder eines Verzeichnisses geändert werden.

Linux unterscheidet bei klassischen Dateiberechtigungen grundsätzlich zwischen:

  • dem Besitzer einer Datei – User
  • der zugeordneten Gruppe – Group
  • allen anderen Benutzern – Others

Welche Rechte diese drei Kategorien besitzen, wird wiederum über die Dateiberechtigungen festgelegt.

Während chmod die Berechtigungen verändert, kümmert sich chown um die Besitzverhältnisse.

Besitzverhältnisse anzeigen

Bevor wir etwas ändern, sollten wir zunächst herausfinden, wem eine Datei gehört.

Dafür eignet sich:

ls -l

Beispielsweise:

-rw-r--r-- 1 tc users 2480 Sep 1 10:30 dokument.txt

Interessant sind hier insbesondere:

tc users

tc ist der Besitzer der Datei und users die zugeordnete Gruppe.

Die Datei dokument.txt gehört somit dem Benutzer tc und der Gruppe users.

Grundlegende Syntax von chown

Die grundlegende Syntax lautet:

chown [OPTIONEN] BESITZER DATEI

Beispielsweise:

sudo chown max dokument.txt

Damit wird der Benutzer max neuer Besitzer von dokument.txt.

Anschließend lässt sich das Ergebnis kontrollieren:

ls -l dokument.txt

Besitzer und Gruppe gleichzeitig ändern

chown kann nicht nur den Besitzer ändern. Besitzer und Gruppe lassen sich in einem einzigen Befehl setzen.

Die Syntax lautet:

chown BENUTZER:GRUPPE DATEI

Beispielsweise:

sudo chown max:users dokument.txt

Die Datei gehört anschließend dem Benutzer max und der Gruppe users.

Nur die Gruppe ändern

Auch ausschließlich die Gruppenzugehörigkeit kann mit chown verändert werden.

Dazu wird vor dem Gruppennamen ein Doppelpunkt verwendet:

sudo chown :www-data index.html

Der Besitzer bleibt unverändert. Lediglich die Gruppe wird auf www-data gesetzt.

Für reine Änderungen der Gruppenzugehörigkeit existiert außerdem der Linux-Befehl:

chgrp

Mehrere Dateien gleichzeitig bearbeiten

chown kann mehrere Dateien in einem Aufruf verarbeiten.

Beispielsweise:

sudo chown max datei1.txt datei2.txt datei3.txt

Oder Besitzer und Gruppe:

sudo chown max:users datei1.txt datei2.txt datei3.txt

Das ist praktisch, wenn nur eine überschaubare Anzahl bestimmter Dateien angepasst werden soll.

Verzeichnisse mit chown bearbeiten

Natürlich funktioniert chown ebenfalls mit Verzeichnissen.

Beispielsweise:

sudo chown max:users /srv/projekt

Dabei gibt es allerdings einen wichtigen Punkt:

Dieser Befehl verändert zunächst nur die Besitzverhältnisse des Verzeichnisses /srv/projekt.

Die darin enthaltenen Dateien und Unterverzeichnisse werden dadurch nicht automatisch geändert.

Besitzverhältnisse rekursiv ändern

Soll ein komplettes Verzeichnis einschließlich aller Dateien und Unterverzeichnisse angepasst werden, kommt die Option -R zum Einsatz:

sudo chown -R max:users /srv/projekt

-R steht für recursive.

Damit werden die Besitzverhältnisse von /srv/projekt sowie der darunterliegenden Objekte geändert.

Genau hier ist allerdings besondere Vorsicht angebracht.

Ein falsch eingegebener rekursiver chown-Befehl kann die Besitzverhältnisse großer Teile eines Systems verändern.

Vor Befehlen wie:

sudo chown -R ...

sollte daher immer noch einmal kontrolliert werden, welcher Pfad tatsächlich angegeben wurde.

Praktisches Beispiel: Webserver

Ein klassischer Anwendungsfall sind Webserver.

Angenommen, eine Webanwendung befindet sich unter:

/var/www/meine-webseite

Der Webserver arbeitet unter dem Benutzer und der Gruppe www-data.

Besitzer und Gruppe könnten beispielsweise folgendermaßen gesetzt werden:

sudo chown -R www-data:www-data /var/www/meine-webseite

Das bedeutet allerdings nicht, dass dies für jede Webserver-Konfiguration automatisch die beste Lösung ist.

Gerade bei produktiven Systemen sollte geprüft werden, welche Dateien der Webserver tatsächlich schreiben können muss. Ein Webserver benötigt nicht zwangsläufig Eigentums- oder Schreibrechte auf den gesamten Webroot.

Das Prinzip der minimal erforderlichen Berechtigungen sollte auch hier gelten.

Praktisches Beispiel: Dateien nach einem Kopiervorgang

Ein Administrator kopiert mit Root-Rechten Dateien in das Home-Verzeichnis eines Benutzers:

sudo cp -r /backup/projekt /home/max/

Anschließend können Teile des kopierten Verzeichnisses beispielsweise root gehören.

Das lässt sich korrigieren:

sudo chown -R max:max /home/max/projekt

Danach gehört das Projekt wieder dem vorgesehenen Benutzer.

Besitzer anhand einer Referenzdatei übernehmen

Eine interessante Option ist --reference.

Angenommen, datei1.txt besitzt bereits die korrekten Besitzverhältnisse und datei2.txt soll dieselben erhalten.

Dann kann verwendet werden:

sudo chown --reference=datei1.txt datei2.txt

Damit müssen Benutzer und Gruppe nicht manuell angegeben werden.

Das kann insbesondere bei Skripten und administrativen Arbeiten hilfreich sein.

Änderungen ausführlich anzeigen

Mit -v arbeitet chown im sogenannten Verbose-Modus:

sudo chown -v max:users dokument.txt

Der Befehl informiert dann darüber, was verändert wurde.

Bei mehreren Dateien kann dies die Nachvollziehbarkeit verbessern.

Nur tatsächliche Änderungen anzeigen

Die Option -c beziehungsweise --changes zeigt nur Objekte an, deren Besitzverhältnisse tatsächlich geändert wurden:

sudo chown -c max:users *.txt

Das ist besonders praktisch bei größeren Mengen von Dateien.

Benutzer- und Gruppen-IDs

Linux arbeitet intern nicht primär mit Namen wie max oder www-data, sondern mit numerischen IDs.

Die Benutzer-ID heißt:

UID

Die Gruppen-ID heißt:

GID

Die IDs eines Benutzers lassen sich beispielsweise anzeigen mit:

id max

Eine mögliche Ausgabe lautet:

uid=1001(max) gid=1001(max) groups=1001(max),27(sudo)

Auch chown kann mit numerischen IDs arbeiten.

Beispielsweise:

sudo chown 1001:1001 dokument.txt

In der Praxis sind Namen meist besser lesbar. Numerische IDs spielen jedoch beispielsweise bei Backups, Containern, NFS-Systemen, Migrationen und der Wiederherstellung von Daten eine wichtige Rolle.

chown und symbolische Links

Symbolische Links verdienen bei chown besondere Aufmerksamkeit.

Je nach verwendeten Optionen kann entscheidend sein, ob der symbolische Link selbst oder das Ziel des Links bearbeitet wird.

Für Administratoren gilt deshalb insbesondere bei rekursiven Operationen:

Vorher prüfen, wie symbolische Links innerhalb des Verzeichnisbaums behandelt werden.

Die verfügbaren Optionen der installierten Version zeigt:

chown --help

Weitere Details liefert die Manpage:

man chown

chown und chmod – wo liegt der Unterschied?

Die beiden Befehle werden häufig verwechselt.

chown verändert die Besitzverhältnisse.

Beispielsweise:

sudo chown max:users dokument.txt

chmod verändert dagegen die Zugriffsrechte.

Beispielsweise:

chmod 640 dokument.txt

Beide Mechanismen arbeiten zusammen.

Eine Datei kann beispielsweise dem Benutzer max und der Gruppe users gehören und folgende Berechtigungen besitzen:

-rw-r-----

Damit darf der Besitzer lesen und schreiben, Mitglieder der Gruppe dürfen lesen und alle anderen Benutzer besitzen keine entsprechenden Zugriffsrechte.

Wer darf chown verwenden?

Das Ändern von Dateibesitzern ist unter Linux aus Sicherheitsgründen eingeschränkt.

Normale Benutzer können nicht beliebig Dateien anderen Benutzern überschreiben beziehungsweise deren Besitz übertragen.

Für administrative Änderungen wird deshalb häufig sudo benötigt:

sudo chown ...

Das ist ein wichtiger Bestandteil des Linux-Sicherheitsmodells.

Häufiger Fehler: chown -R auf das falsche Verzeichnis

Eine der gefährlichsten Situationen entsteht durch eine Kombination aus Root-Rechten und rekursiver Verarbeitung.

Ein Administrator möchte beispielsweise Folgendes ausführen:

sudo chown -R max:users /srv/projekt

Ein Tippfehler beim Pfad kann jedoch dazu führen, dass wesentlich mehr Dateien als vorgesehen verändert werden.

Deshalb gilt:

Rekursive Änderungen mit Root-Rechten immer besonders sorgfältig kontrollieren.

Vorher kann beispielsweise geprüft werden:

ls -la /srv/projekt

oder:

find /srv/projekt -maxdepth 2 -ls

Erst wenn eindeutig feststeht, dass der Pfad korrekt ist, sollte die rekursive Änderung erfolgen.

chown mit find kombinieren

Nicht immer sollen sämtliche Dateien eines Verzeichnisbaums geändert werden.

Angenommen, nur Dateien mit der Endung .log sollen einen anderen Besitzer erhalten:

find /var/log/meine-app -type f -name "*.log" -exec chown max:adm {} +

Damit lassen sich Besitzverhältnisse wesentlich gezielter verändern als mit einem pauschalen:

chown -R

Gerade auf produktiven Servern kann diese präzisere Vorgehensweise sinnvoll sein.

Besitzverhältnisse kontrollieren

Nach einer Änderung sollte das Ergebnis überprüft werden:

ls -l dokument.txt

Für ein Verzeichnis:

ls -la /srv/projekt

Bei größeren Strukturen kann find helfen:

find /srv/projekt -maxdepth 2 -ls

Oder man sucht gezielt nach Dateien eines bestimmten Benutzers:

find /srv/projekt -user max

Nach einer Migration kann beispielsweise nach Dateien gesucht werden, die noch root gehören:

find /srv/projekt -user root

chown in Skripten

Auch in Shell-Skripten wird chown regelmäßig eingesetzt.

Beispielsweise:

#!/bin/bash

BACKUP="/srv/restore/projekt"

chown -R max:users "$BACKUP"

Bei Variablen ist es wichtig, Pfadangaben sauber zu quotieren:

"$BACKUP"

Das verhindert unter anderem Probleme mit Leerzeichen in Pfaden.

Bei automatisierten Skripten sollte ein rekursiver chown außerdem niemals leichtfertig auf ungeprüfte Variablen angewendet werden.

Typische chown-Befehle aus der Praxis

Besitzer ändern:

sudo chown max datei.txt

Besitzer und Gruppe ändern:

sudo chown max:users datei.txt

Nur Gruppe ändern:

sudo chown :users datei.txt

Ganzes Verzeichnis rekursiv ändern:

sudo chown -R max:users /srv/projekt

Änderungen anzeigen:

sudo chown -v max:users datei.txt

Nur tatsächliche Änderungen melden:

sudo chown -c max:users *.txt

Besitzverhältnisse einer Referenzdatei übernehmen:

sudo chown --reference=datei1.txt datei2.txt

Numerische UID und GID verwenden:

sudo chown 1001:1001 datei.txt

Sicherheitsaspekte

chown sieht zunächst wie ein einfacher Verwaltungsbefehl aus. Falsche Besitzverhältnisse können jedoch erhebliche Auswirkungen auf die Sicherheit eines Linux-Systems haben.

Besonders kritisch sind unter anderem:

  • Konfigurationsdateien
  • SSH-Schlüssel
  • Webserver-Verzeichnisse
  • Systemdienste
  • ausführbare Dateien
  • Backup-Verzeichnisse
  • Logdateien
  • Anwendungskonfigurationen
  • Dateien mit Zugangsdaten oder Secrets

Ein Dienst sollte grundsätzlich nur auf diejenigen Dateien schreibend zugreifen können, die er für seine Aufgabe tatsächlich verändern muss.

Besitzverhältnisse sind damit ein wichtiger Bestandteil des Least-Privilege-Prinzips.

Fazit

chown gehört zu den grundlegenden Werkzeugen jeder Linux-Administration. Der Befehl ist schnell verstanden, kann aber weitreichende Auswirkungen haben.

Die wichtigste Syntax lässt sich auf eine Zeile reduzieren:

chown BENUTZER:GRUPPE DATEI

Besonders mächtig wird der Befehl durch die rekursive Option:

chown -R BENUTZER:GRUPPE VERZEICHNIS

Genau diese Mächtigkeit verlangt allerdings Vorsicht. Wer chown mit sudo und -R verwendet, sollte den Zielpfad vor dem Ausführen immer noch einmal überprüfen.

Wer den Unterschied zwischen Besitzer, Gruppe und Berechtigungen verstanden hat und chown gemeinsam mit Werkzeugen wie chmod, ls, id und find beherrscht, hat bereits einen wesentlichen Teil des klassischen Linux-Berechtigungsmodells verstanden.