Raketenrechtevorleser: Über Unix-Rechte. Heute: Lesen in Verzeichnissen und Dateien

Beitrag lesen

Wenn keine Dateien lesbar wären, würde glob() ein leeres Ergebis bringen. Da aber Dateien gefunden werden, aus denen auch der Zeitstempel extrahiert werden können (durch das Echo "Daten mit dem Zeitstempel..." bewiesen), ist der Lesezugriff durch PHP schonmal gewährleistet

Nein. Dir hat noch niemand die Sache mit den Unix-Rechtem richtig erklärt. Ich nehm statt glob() mal ls.

Es sei das Verzeichnis "ver", Rechte wie folgt:

user~ ls -ld ver

drwxr-xr-x 2 user group 4096 Nov 21 09:47 ver

Darin die Dateien "keine", "lesen", "lesen+schreiben", "lesen+execute". Inhalt ist jeweils gelesen\n Wir machen damit mal "ls -l":

user$ ls -l ver

-rw-r----- 1 user group 8 Nov 21 09:50 keine
-rw-r--r-- 1 user group 8 Nov 21 09:48 lesen
-rwxr-xr-x 1 user group 8 Nov 21 09:49 lesen+execute
-rw-rw-rw- 1 user group 8 Nov 21 09:49 lesen+schreiben

Und sehen jetzt mal nach, ob der www-data das Verzeichnis und dann die Dateien lesen kann

Zuerst werden wir mal 'www-data', was eine kleine Vorbereitung erfordert, die Ihr zu Hause bitte nicht nachmacht:

user$ su
root# usermod -s www-data /bin/bash
root# su www-data

Und dann:

www-data$ ls -l

-rw-r----- 1 user group 8 Nov 21 09:50 keine
-rw-r--r-- 1 user group 8 Nov 21 09:48 lesen
-rwxr-xr-x 1 user group 8 Nov 21 09:49 lesen+execute
-rw-rw-rw- 1 user group 8 Nov 21 09:49 lesen+schreiben

www-data$ for file in `ls`; do echo "${file}:"; cat $file; done
keine:
cat: keine: Keine Berechtigung
lesen:
gelesen
lesen+execute:
gelesen
lesen+schreiben:
gelesen

Fazit:

  1. Für glob() (ls benutzt, wie das glob() von PHP, glob aus der C-Lib) muss man Leserechte am Verzeichnis haben.
  2. Um den Dateiinhalt lesen zu können muss man Leserechte an der Datei haben. Beides hat niteinander nichts zu tun.

Wer meine obige Warnung überging darf Folgendes nicht vergessen:

www-data$ exit
root# usermod -s /usr/sbin/nologin www-data
exit