Skip to main content
Home
Schatzchaeschtli 2026

Main navigation

  • Home
User account menu
  • Log in

Breadcrumb

  1. Home

Dateirechte unter Unix / macOS / Linux

By PierreAdmin , 18 September 2026

Das wichtigste zu den Dateirechten unter Unix und wie das funktioniert.

Blitzfix für pull

Wird z.B. die settings.php die versioniert ist geändert, sollten vor git pull kurz die Rechte von /default und settings.php geändert werden, damit der Ordner beschreibbar und die settings überrschreibbar ist.

Rechte freigeben:
Wichtig: aus /public aufrufen

chmod 755 web/sites/default
chmod 644 web/sites/default/settings.php

git pull
drush cr (nur nötig für neue Drupal-Dateien, chmod braucht kein cr)

Rechte zurücksetzen:

chmod 555 web/sites/default
chmod 444 web/sites/default/settings.php

Basics

Dateien und Verzeichnisse haben Rechte für drei Benutzergruppen:

u = user   = Eigentümer
g = group  = Gruppe
o = others = alle anderen

Die Rechte werden mit drei Buchstaben dargestellt:

r = read    = lesen
w = write   = schreiben
x = execute = ausführen

Bei einem Verzeichnis bedeutet x insbesondere, dass das Verzeichnis betreten bzw. durchlaufen werden darf.

Jedem Recht entspricht eine Zahl:

r = 4
w = 2
x = 1

Die Werte werden pro Benutzergruppe addiert:

rwx = 4 + 2 + 1 = 7
rw- = 4 + 2     = 6
r-x = 4 + 1     = 5
r-- = 4         = 4

Beispiele:

755 = rwxr-xr-x
     │  │  └─ others: lesen + betreten
     │  └──── group:  lesen + betreten
     └─────── user:   lesen + schreiben + betreten
     
775 = rwxrwxr-x
     │  │  └─ others: lesen + betreten
     │  └──── group:  lesen + schreiben + betreten
     └─────── user:   lesen + schreiben + betreten
     
777 = rwxrwxrwx
     alle dürfen alles; normalerweise vermeiden.
     
Typische Dateirechte:
644 = rw-r--r--
664 = rw-rw-r--

Typische Verzeichnisrechte:
755 = rwxr-xr-x
775 = rwxrwxr-x


Rechte anzeigen

Symbolic Notation (rwx rwx rwx)

Wenn es sich um ein Verzeichnis handelt wird das d davor gesetzt.

Verzeichnis: drwxr-xr-x
File:         rwxr-xr-x
ls -ld private private/tmp

Output:
drwxr-xr-x  5 pierre  staff  160 Sep 18 16:14 private
drwxr-xr-x  2 pierre  staff   64 Sep 18 16:14 private/tmp

Oktale Notation (755)
Eine kürzere Schreibweise, die darauf aufbaut, dass die Werte
4 = read
2 = write
1 = execute

stat -f '%Lp' private 
Output
755

Auf dem Mac kann man beide Werte ausgeben:
stat -f '%Sp %OLp %Su:%Sg %N' private private/tmp

Output
drwxr-xr-x 755 pierre:staff private
drwxr-xr-x 755 pierre:staff private/tmp

Rechte ändern

chmod 775 private
chmod 775 private/tmp

Output:

Rekursiv ändern:

chmod -R 775 private

Achtung: Rekursives chmod nicht gedankenlos verwenden, insbesondere nicht auf Produktionsservern. Dateien und Verzeichnisse benötigen nicht zwingend dieselben Rechte.

Eigentümer und Gruppe

ls -ld private

oder ausführlicher unter macOS:

stat -f '%Sp %OLp %Su:%Sg %N' private

Output:
drwxr-xr-x 755 pierre:staff private

pierre = Eigentümer
staff  = Gruppe

Welcher Benutzer greift auf Drupal-Dateien zu?

Bei Dateirechten muss unterschieden werden zwischen:

  • Lokal bei mir: welcher Benutzer greift im Terminal auf die Daten zu
    z.B. pierre
  • Webserver: Benutzer, unter dem PHP bzw. der Webserver Drupal ausführt

Wenn Drupal über den Browser Dateien anlegt, ist für die Dateirechte der PHP-/Webserver-Benutzer entscheidend.

1. Eigenen Terminal-Benutzer prüfen

whoami

Output:
pierre

Dieser Benutzer gilt für Befehle, die ich selbst im Terminal ausführe.


2. Welcher Benutzer steuert Drupal

 

Dieses Kapitel nochmal durcharbeiten und Beschreibung klarer formulieren...

Um herauszufinden, wie der User heisst, der Drupal bzw. PHP steuert, kann man ein kleines PHP Script ins Webroot legen und diese Seite aufrufen. 

Im Drupal-Webroot temporär eine Datei anlegen:

public/whoami.php

mit folgendem Inhalt:

<?php
header('Content-Type: text/plain');
echo 'Effective UID: ' . posix_geteuid() . PHP_EOL;
$user = posix_getpwuid(posix_geteuid());
echo 'PHP User: ' . ($user['name'] ?? 'unknown') . PHP_EOL;
echo 'PHP Group ID: ' . posix_getegid() . PHP_EOL;

Seite aufrufen > 

Output Lokal

Effective UID: 501
PHP User: pierre
PHP Group ID: 4294967295

Output Metanet:

Effective UID: 11455
PHP User: kommpakt-ftp
PHP Group ID: 10001

Damit wird der Benutzer angezeigt, unter dem PHP den Webrequest ausführt.

Lokal bei mir pierre (Admin), bei Metanet z.B. kommpakt-ftp. Das dürfte der Nutzer sein, der beim Erstellen eines neuen Acounts automatisch erzeugt wird.

WICHTIG: Die Testdatei danach sofort wieder löschen:


3. Warum nicht einfach Drush verwenden?

Ein Befehl wie

drushh php:eval "..."

läuft normalerweise als der Benutzer, der Drush im Terminal gestartet hat.

Bei mir lokal wäre das z. B. pierre.

Das sagt deshalb nicht zwingend aus, unter welchem Benutzer PHP läuft, wenn
Drupal über MAMP im Browser aufgerufen wird.


4. Dasselbe auf Stage / Live prüfen

Die gleiche temporäre whoami.php kann auch auf Stage oder Live kurz aufgerufen
werden.

Damit lässt sich feststellen, welcher Benutzer dort PHP ausführt.

Danach die Datei unbedingt wieder löschen.


5. Dateirechte mit PHP-Benutzer vergleichen

Rechte, Eigentümer und Gruppe anzeigen:

ls -ld private private/tmp

Unter macOS zusätzlich numerisch:

stat -f '%Sp %OLp %Su:%Sg %N' private private/tmp

Beispiel:

drwxr-xr-x 755 pierre:staff private

Bedeutung:

- Eigentümer: pierre
- Gruppe: staff
- Rechte: 755 / rwxr-xr-x

Wenn PHP nicht als pierre läuft und auch nicht über eine passende Gruppe
Schreibrechte besitzt, kann PHP bei 755 nicht in dieses Verzeichnis schreiben.


Merke:

whoami
= Wer bin ich im Terminal?

whoami.php über den Browser
= Als welcher Benutzer führt der Webserver/PHP Drupal aus?

ls / stat
= Wem gehört das Verzeichnis und welche Rechte besitzt es?

Erst diese drei Informationen zusammen erklären, ob Drupal schreiben darf.

  • unix
  • dateirechte
  • rechte
  • chmod
Unix

Tag Suche

Categories (Taxonomie-Menu)

  • Drupal
    • Module
    • Theming
    • Views
  • Webentwicklung
    • Composer
    • CSS/SCSS
    • Deployment
    • Drush
    • Git
    • HTML
    • JavaScript
    • PHP
    • SSH
    • SVG
    • VS Code
  • Datenbank
    • mySQL
  • Server
    • Apache
    • DNS
    • Domains
    • Plesk
    • SSL/TLS
  • System
    • Mac
    • Unix
    • Windows