Thread Best practice zu Dateiberechtigungen
(21 answers)
Opened by bianca at 2020-04-03 09:39 2020-04-03T07:39:45 biancaDa gleich mal eine Warnung: Linux und Windows sind völlig verschieden, und es hängt auch noch vom verwendeten Dateisystem ab. Über Windows nur soviel: Es gibt Perl-Module zum Steuern der Zugriffsrechte wie Win32::FileSecurity, aber wenn Du nicht schon mit anderen Windows-APIs sowas bearbeitet hast, dann wird Dir deren knappe Dokumentation wohl kaum ausreichen. 2020-04-03T07:39:45 biancaDas kann ich nachvollziehen. Für mich waren Oktalzahlen schon immer ziemlich hoch auf der Nerdometer-Skala, insbesondere die Schreibweise mit der führenden Null. 2020-04-03T07:39:45 biancaNicht ganz in dieser Weise, aber analog zu O_RDWR kann man - ebenfalls mit Fcntl - mysteriöse benannte Konstanten verwenden. Diese Konstanten importierst Du mit use Fcntl qw/:mode/; und Du kannst sie dann für den ganzen Zirkus der Funktionen verwenden. Auch hier gleich ein Hinweis: Unter Windows gibt's weniger Konstanten als unter Linux, und sie funktionieren auch nur sehr eingeschränkt. Die ganze MODE-Logik ist eine Unix-Erfindung - und da kommt Perl nun mal her. Die Konstanten sind nun nicht wirklich in Perl dokumentiert (bei chmod gibt es ein Beispiel), deswegen habe ich mal ein Programm geschrieben, das sie zusammen mit ihren Oktalwerten ausgibt: Code (perl): (dl
)
1 2 3 4 5 6 use Fcntl; my @constants = grep { /^S_I/ && eval { Fcntl->$_ } } keys %Fcntl::; my %values = map { $_ => Fcntl->$_ } @constants; for (sort { $values{$a} <=> $values {$b} } keys %values) { printf "%-8s = %07o\n", $_, $values{$_}; } Die Ausgabe beginnt nun mit folgenden Werten: Code: (dl
)
1 S_IXOTH = 0000001 Alle fangen mit S_I an, danach kommt (meistens) der Buchstabe, um welches Recht es sich handelt (R, W, X), und danach USR für den Benutzer, GRP für die Gruppe, und OTH für den Rest der Welt. Daneben gibt's noch die mit RWX als Abkürzungen. Ein Anwendungsbeispiel: berechtigung('rwxrwsr-x') kannst Du schreiben als S_IRWXU | S_IRWXG | S_IROTH | S_XOTH | S_ISGID. Und dazu nochmal eine Warnung: S_ISGID (setgid) tut bei Perl-Skripten nicht das, was Du vielleicht erwartest. Das liegt daran, dass das ausführbare Programm /usr/bin/perl ist, Dein Skript ist nur eine Input-Datei dafür. Da müsste also Dein Provider für jeden seiner Kunden einen kleinen binären Wrapper schreiben, der dann dem jeweiligen Kunden gehört und das S-bit trägt. Es gab Provider, die haben das so gemacht - aber Dein Perl-Skript braucht das Bit auch in diesem Fall nicht. Dass Du Deine Dateien so restriktiv wie möglich einstellen willst, ist Teil der Best Practice in einer Umgebung, in der Sicherheit eine Rolle spielt. Aber auch das hängt davon ab, wie Dein Provider sein Shared Hosting anbietet. Sicheres Shared Hosting mit CGI ist ja schon etwas anspruchsvoll, wenn die einzelnen Nutzer eines Apache Virtual Host (oder was auch immer als Webserver eingesetzt wird) voneinander einigermaßen abgeschottet werden sollen. Wenn da z.B. FastCGI läuft, kann jeder Kunde seinen eigenen CGI-Prozess haben, der unter seiner eigenen Benutzerkennung läuft. Dass für eine sinnvolle Einstellung umask eine Rolle spielt, hat ja Raubtier schon erläutert. umask schaltet bei allen erzeugten Objekten die angegebenen Zugriffsrechte aus ("maskiert" sie). Wichtig ist, das umask als Perl-Funktion verfügbar ist und somit für alle Dateien und Verzeichnisse gilt, die der Prozess danach (bis zur nächsten Änderung der Umask) anlegt. Mit umask S_IRWXG | S_IRWXO kannst Du sicherstellen, dass neu angelegte Dateien und Verzeichnisse nur von Deiner eigenen Benutzerkennung gelesen und geschrieben werden können. Auch der MODE, den Du bei sysopen und mkdir angeben kannst, wird damit noch eingeschränkt! Unabhängig von der umask kannst Du die Zugriffsrechte nur nachträglich mit chmod ändern. Nun kann man sich mit diesen Funktionen prima selbst ein Bein stellen. Wenn Du Software schreibst, die unter unterschiedlichen Hosting-Szenarien läuft, dann sollte die umask-Einstellung konfigurierbar sein. Ob Du zusätzlich noch eine Konfigurationsdatei mit individuellen Einstellungen pro Datei brauchst, musst Du selbst beurteilen, aber eben dabei berücksichtigen, dass umask auch auf sysopen und mkdir wirkt. |