Zugriffsrechte allgemein
Maiko
- php
0 Eidgenosse0 fastix®
Hi zusammen,
ich habe viele Beiträge zu dem Thema Zugriffsrechte (CHMOD) bei unix/linux sowohl bei Google als auch hier gefunden, aber ich blicke einfach nicht durch. Es geht dabei nicht darum, wie sich 777 o.ä. zusammensetzt oder welche Zahl für welche 'Gruppe' steht, denn dazu gibt es ja haufenweise erklärungen, sondern mir geht es quasi um die Basics...
Mir sind einige Dinge schleierhaft, vielleicht kann es ja jemand ein für allemal erklären, denn ich denke, das dies sehr vielen anderen Benutzern hier auch weiterhilft. Oder vielleicht einen Link, bei dem das verständlich dargestellt wird?
Also ich fang mal an.
In meiner deutschen Version von WS_FTP werden 3 ähh 'Gruppen' angezeigt.
Eigentümer
Gruppe
Sonstige
Die ersten 3 meiner Probleme:
Wer ist der Eigentümer?
Wer die Gruppe?
Wer Sonstige?
Die nächsten 3:
Lesen/Ausführen/Schreiben
Lesen ist klar, Schreiben auch, aber was ist Ausführen? Wenn ein PHP Script aufgerufen wird, wird dann ein Ausführenrecht oder ein Leserecht oder beides gebraucht?
Was bedeutet das Ausführenrecht bei einem Verzeichnis? Dieses Recht kann ich ja auch ändern.
Wenn ich in PHP eine Datei erstelle (fopen()), ist das Script dann der Eigentümer?
Wenn ich per FTP eine Datei hochlade, wie sind dann die Rechte vergeben? Also wer ist der Eigentümer, wer die Gruppe, etc.?
Wenn per HTTP auf ein Bild zugegriffen wird um dieses im Bwoser eines beliebigen Benutzers anzuzeigen, welche Rechte muss das Bild dann haben? Lesezugriff für Sonstige? Ausführen für weiß ich nicht?
Das sind eine Menge Fragen, aber ich denke das sind absolut nötige Grundkenntnisse, wenn es um das Thema Zugriffsrechte geht.
Was nützt es mir, wenn ich weiß, wie ich die Zugriffsrechte einer Datei einstellen kann, aber nicht weiß, was da im Hintergrund eigentlich abläuft bzw. von Nöten ist.
Ich (und sicher auch viele viele andere) wäre wirklich sehr dankbar, wenn sich mal jemand die Mühe machen kann.
Vielen Dank im voraus!
In einigen Punkten kann ich Dir weiterhelfen. Nach meinem Kenntnisstand gilt:
Wer ist der Eigentümer?
Der User, unter dem Du Dich angemeldethast
Wer die Gruppe?
Die Usergruppe, zu der Dein User gehört (können auch mehrere
sein) - man kann so z. B. mehrere User zu einem Team
zusammenfassen, die dann die gleichen Rechte haben.
Wer Sonstige?
alle anderen, die eine Zugriffsberechtigung auf den
Rechner haben.
Zum Ausführen einer Datei brauchts Du nur das Recht, diese ausführen zu dürfen. Es ist jedoch zu beachten, daß beim Zugriff auf Module (z. B. Perl), diese nicht ausgeführt werden, sondern gelesen werden (hier ist also Leserecht notwendig).
Machst Du ein Verzeichnis ausführbar, erlaubst Du, dieses Verzeichnis zu betreten. Der Lesezugriff (Verzeichnisinhalt anzeigen) ist hierbei nicht notwendig.
Der Besitzer eines Prozesses überträgt sich i. A. auf die Kindprozesse.
Die Rechte bei Webinhalten sind so zu setzen, dass der Webserver-Owner mit diesen umgehen kann (z. B. httprun o. ä.). Dieser ist häufig nicht in Deiner Usergruppe, so daß Du immer alle relevanten Rechte für Sonstige garantieren mußt. D. h. Dokumente lesbar, CGI-Scripte ausführbar (nicht zwingend lesbar), und Verzeichnisse betretbar (=ausführbar).
MfG
Eidgenosse
Wenn ich in PHP eine Datei erstelle (fopen()), ist das Script dann der Eigentümer?
Nein, sondern derjenige, der das Script gestartet hat. In diesem Fall ist dies vermutlich der Starter des Webserverprozesses. Der Serverprozess hat meist einen ihm zugewiesenen User, der nichts anderes macht, als den Webserver zu starten.
Moin!
Also, wss der Eidgenosse geschrieben halt stimmt soweit.
Also ich fang mal an.
In meiner deutschen Version von WS_FTP werden 3 ähh 'Gruppen' angezeigt.
Aha. Du arbeitest unter Windows und hast mit Linuy/Unix noch keine Erfahrung. Ok.
Die ersten 3 meiner Probleme:
Wer ist der Eigentümer?
In der Regel der Benutzer, der eine Datei erstellt hat. Man kann aber unter UNIX/LINUX auch mit dem Befehl chown den Eigentümer ändern.
Wer die Gruppe?
Alle jene Benutzer welche auch einer Gruppe angehören der der Eigentümer angehört.
Im speziellen Fall: Die Datei
Wer Sonstige?
Alle anderen.
Du kannst erkennen, wem eine Datei gehört: ls -l hilft Dir.
fastix@trainer:~/Desktop> ls -l apfel.gif
-rw-r--r-- 1 fastix users 24043 2004-09-14 18:17 apfel.gif
Die Ausgabe von links nach rechts gelesen -> von oben nach unten erklärt:
r ~ Der Benutzer darf die Datei lesen
w ~ Der Benutzer darf die Datei schreiben
r ~ Der Angehörige der Gruppe darf die Datei lesen
r ~ Jeder darf die Datei lesen
1 ~ Anzahl der Links auf die Datei - Unix/linux- Systeme kennen eine Art von Link wobei der Dateiname auf die gleiche Stelle im Dateisystem verweist wie ein anderer und haben einen Linkzähler.
fastix ~ Autor/Eigentümer/Benutzer
users ~ Die Gruppe, der der Autor bei Erstellung angehört hat
24043 ~ Dateigröße in Bytes
2004-09-14 18:17 ~ Datum Urzeit
apfel.gif ~ Dateiname
Die nächsten 3:
Lesen/Ausführen/SchreibenLesen ist klar, Schreiben auch, aber was ist Ausführen?
Ausführen:
Starten eines binären Programmes oder Skriptes (Programm in einer Interpretersprache).
Wenn ein PHP Script aufgerufen wird, wird dann ein Ausführenrecht oder ein Leserecht oder beides gebraucht?
Jein. Das hängt von einigem ab.
Prinzipiell sind PHP-Skripte menschen- und maschinenlesbare Textdateien.
Wenn diese in der ersten Zeile eine Shebang (" #! /usr/bin/php ")beinhalten (wie z.B. Perl- Skripte) dann würde bei einem direkten Aufruf des PHP Skriptes z.B. am Prompt diese Shebang geprüft und der Interpreter (/usr/bin/php) aufgerufen um das Skript auszuführen. Dann müsstest Du Ausführen und Leserechte für das Skript setzen.
Dies ist die gängige Methode für Perl und Shellskripte, also *.pl, .sh.
Es geht aber auch anders.
Man kann Skripte auch so starten: # interpreter [Optionen) < skript
z.B. sh < test.txt
z.B. perl -W test.pl
Man ruft also den Interpreter selbst und übergibt ihm den Inhalt des Skriptes. Dazu wird für das Skript weder eine Shebang noch das Ausführen- Recht benötigt. Nur Leserechte für den aktuellen Benutzer.
Gerade bei PHP als Apache- Modul wird in etwa die zweite Methode verwendet (Das ist hier so am einfachsten erklärt, stimmt aber nicht ganz mit der Realiät überein.)
Dazu braucht das Skript keine Ausführen- Rechte für den Benutzer.
Was bedeutet das Ausführenrecht bei einem Verzeichnis? Dieses Recht kann ich ja auch ändern.
Bei Verzeichnissen berechtigt das "Ausführen" zum Betreten des Verzeichnisses.
Z.B. mit cd verzeichnis
Wenn ich in PHP eine Datei erstelle (fopen()), ist das Script dann der Eigentümer?
Nein, derjenige, der das Skript startet.
Wenn ich per FTP eine Datei hochlade, wie sind dann die Rechte vergeben? Also wer ist der Eigentümer, wer die Gruppe, etc.?
Das ist jetzt nicht ganz einfach erklärt. Prinzipiell der Benutzer unter dem der FTP-Server gestartet wird. Aber, da dies keine gute Idee ist versehen viele FTP- Server die Dateien entweder mit den Rechten des Benutzers, den sie bei der Anmeldung am Server erkennen oder anhand einer "Maske" des Verzeichnisses.
Dieses Verfahren trifft z.B. auch beim Fileserver wie z.B. den Samba- Server zu. Näheres dazu in der Dokumentation Deines FTP-Servers.
Wenn per HTTP auf ein Bild zugegriffen wird um dieses im Bwoser eines beliebigen Benutzers anzuzeigen, welche Rechte muss das Bild dann haben? Lesezugriff für Sonstige? Ausführen für weiß ich nicht?
Der Benutzer unter dem der Webserver läuft muss das Bild lesen dürfen. Also: Leserechte für alle.
Der Webserver "liest" das Bild und gibt die binären Daten einfach weiter. Das ist alles.
Vielen Dank im voraus!
Bitte.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Moin!
Wenn ich in PHP eine Datei erstelle (fopen()), ist das Script dann der Eigentümer?
Nein, derjenige, der das Skript startet.
Das muss ich noch mal erklären. Wenn das PHP-Skript via Web, also z.B. vom Apache (mit PHP- Modul) gestartet wird, dann ist der "Ausführende" der Apache- Webserver (Respektive dessen Kindprozess, aber lassen wir das, hier kann man sich in eine Doktorarbeit verlieren). Folglich wäre dann auch regelmäßig ein Benutzer 'www' oder 'wwwrun' (oder unter welchem Benutzername der Apache auch immer läuft) der Eigentümer. Praktisch (oder praktischerweise) ist das alles beinflussbar, so dass sich zu verschieden konfigurierten Systemen auch verschiedene Aussagen treffen lassen.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Danke erstmal für Deine verständliche und ausführliche Hilfestellung!
Hast mir schon enorm weitergeholfen.
Wer ist der Eigentümer?
In der Regel der Benutzer, der eine Datei erstellt hat. Man kann aber unter UNIX/LINUX auch mit dem Befehl chown den Eigentümer ändern.
Also, wenn der Indianer z.B. unter dem Usernamen 'Apache' angemeldet ist, ist der Eigentümer einer durch PHP erstellten Datei (was für eine auch immer das sein mag) 'Apache' - folglich: für die durch PHP erstellte Datei, sind nur die Rechte des Eigentümers von Belang, sofern das PHP Script die erstellte Datei weiterverwenden will (was auch immer) -> wenn ich das richtig verstanden habe.. ;-)
Möchte ich, das die erstellte Datei (sagen wir mal ein HTM-Dokument) aber auch über das Internet erreichbar bzw. aufrufbar ist, muss ich der Datei das 'Lesen'-Recht geben. OK. Verstanden.
Ich habe das gerade mal nachvollzogen.
Seltsamerweise reicht es bei mir aus (bin bei Domainfactory), der Gruppe das Lesen-Recht zu geben. Sonstige benötigt bei mir überhaupt keine Rechte. Aber das ist wohl ne Sache, wie der Indianer konfiguriert wurde. Denke ich mir jedenfalls mal.
Wer die Gruppe?
Alle jene Benutzer welche auch einer Gruppe angehören der der Eigentümer angehört.
Im speziellen Fall: Die Datei
Hmmm, ne, das kapier ich nicht.
Wenn ein PHP Script aufgerufen wird, wird dann ein Ausführenrecht oder ein Leserecht oder beides gebraucht?
Jein. Das hängt von einigem ab.Prinzipiell sind PHP-Skripte menschen- und maschinenlesbare Textdateien.
Wenn diese in der ersten Zeile eine Shebang (" #! /usr/bin/php ")beinhalten (wie z.B. Perl- Skripte) dann würde bei einem direkten Aufruf des PHP Skriptes z.B. am Prompt diese Shebang geprüft und der Interpreter (/usr/bin/php) aufgerufen um das Skript auszuführen. Dann müsstest Du Ausführen und Leserechte für das Skript setzen.Dies ist die gängige Methode für Perl und Shellskripte, also *.pl, .sh.
Ich glaube, das versteh ich. Wenn ein Script eine Shebang benötigt (wie Perl), wird anhand dessen explizit der Interpreter aufgerufen, was wiederrum ein Ausführenrecht erfordert.
Im anderen Fall (z.B. PHP als Apachemodul) wird direkt der Interpreter aufgerufen und ihm nur das zu übersetzende Script übergeben, was nur Leserechte erfordert (das wiederum versteh ich nicht, ist aber auch nicht so wichtig..).
Was bedeutet das Ausführenrecht bei einem Verzeichnis? Dieses Recht kann ich ja auch ändern.
Bei Verzeichnissen berechtigt das "Ausführen" zum Betreten des Verzeichnisses.
Z.B. mit cd verzeichnis
Was bedeutet das bezogen auf das Internet? Stichwort 'Verzeichnisbrowsing" - also 'Ausführen' ist erforderlich, wenn der Wevserver den Verzeichnisinhalt ausgeben soll?
Wenn ich per FTP eine Datei hochlade, wie sind dann die Rechte vergeben? Also wer ist der Eigentümer, wer die Gruppe, etc.?
Das ist jetzt nicht ganz einfach erklärt. Prinzipiell der Benutzer unter dem der FTP-Server gestartet wird. Aber, da dies keine gute Idee ist versehen viele FTP- Server die Dateien entweder mit den Rechten des Benutzers, den sie bei der Anmeldung am Server erkennen oder anhand einer "Maske" des Verzeichnisses.
Dieses Verfahren trifft z.B. auch beim Fileserver wie z.B. den Samba- Server zu. Näheres dazu in der Dokumentation Deines FTP-Servers.
Ok, wenn ich z.B. eine Datei per FTP hochlade, erhält diese die Rechte 740. Dann ist das also eine Sache, die im FTP-Server konfiguriert wurde.
Gruß
Maiko
Moin!
Im speziellen Fall: Die Datei
Hmmm, ne, das kapier ich nicht.
Nö. Das hatte ich nicht fertiggeschrieben.
Die Datei kennt nicht nur einen Eigentümer, zu dem sie gehört, sondern auch eine Gruppe.
Die Gruppenrechte beziehen sich also auf alle jene Mitglieder der Gruppe, zu der die Datei gehört.
Was bedeutet das Ausführenrecht bei einem Verzeichnis? Dieses Recht kann ich ja auch ändern.
Bei Verzeichnissen berechtigt das "Ausführen" zum Betreten des Verzeichnisses.
Z.B. mit cd verzeichnis
Was bedeutet das bezogen auf das Internet? Stichwort 'Verzeichnisbrowsing" - also 'Ausführen' ist erforderlich, wenn der Wevserver den Verzeichnisinhalt ausgeben soll?
Also. Da ist eine Schrank (=Verzeichnis). Der Schrank hat ein Schloss. Für das Schloss hast Du keinen Schlüssel, Du bist also nicht berechtigt die Tür zu öffnen.
Im Schrank ist ein Kasten (=Datei). An dem ist ein Schloss. Für das Schloss hast Du einen Schlüssel.
Du kommst dennoch nicht an den Kasten, weil Du den Schrank nicht öffnen (betreten) kannst. Du kannst nicht mal sehen, was im Schrank ist.
Das "Ausführen" für das Verzeichnis ist also Voraussetzung.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hello,
Du kommst dennoch nicht an den Kasten, weil Du den Schrank nicht öffnen (betreten) kannst. Du kannst nicht mal sehen, was im Schrank ist.
Man kann immer dann sehen, was das Verzeichnis enthält, wenn man LÖeserechte für das Verzeichnis hat. Die Leserechte beziehen sich nicht auf den Inhalt, sondern auf die Namen des Inhaltes, also auf das Verzeichnisblatt selber.
Man kann bei allen Verzeichnissen die Leserechte entfernen und kommt trotzdem an den Inhalt, wenn man weiß, wie die Dateien heißen.
Das X-Recht steht bei Verzeich issen dafür, dass der Verzeichnisname in den Pfad aufgenommen werden darf. Das hatte Fastix ja schon mit anderen Worten erklärt.
Interessant ist noch, dass man auch mit einem Link nicht an dieser Einstellung vorbeikommt. Der Link wird vom System erst aufgelöst in den realen Pfad, dann werden die Rechte geprüft und dann erst der Zugtiff erteilt (oder eben abgelehnt)
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hello,
Ich habe das gerade mal nachvollzogen.
Seltsamerweise reicht es bei mir aus (bin bei Domainfactory), der Gruppe das Lesen-Recht zu geben. Sonstige benötigt bei mir überhaupt keine Rechte. Aber das ist wohl ne Sache, wie der Indianer konfiguriert wurde. Denke ich mir jedenfalls mal.
gib mal ein am Prompt, sofern Du einen Shell-Zugang zum Server hast:
groups apache
Dann werden die Gruppen angezeigt, in denen der Apache Mitglied ist.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom