| Home Profil Fun |
#30 Linux 03.06.2007
Dateirechte Besitzer und Gruppen bearbeitenMit dem Shell-Kommando chmod kann man grundsätzlich drei Dinge einstellen: -Für wen die Rechte geändert werden sollen (Besitzer, Gruppe, Andere) -Welche Rechte (Lesen, Schreiben, Ausführen) -Für welche Objekte (Dateien, Verzeichnisse, usw.) Die Rechte von symbolischen Links (soft links) werden von Linux nicht verwendet und ignoriert. Wird chmod auf einem symbolischen Link angewendet wirkt sich dies auf das Zielobjekt aus. Rechte ändern Einzelne Rechte hinzufügen oder entfernen (alle anderen Rechte bleiben unverändert) Fügt das Schreiberecht für Andere zur Datei test.txt hinzu. chmod o+w test.txt Fügt alle Rechte für diese Datei für alle (Besitzer, Gruppe und Andere) hinzu (chmod a+rwx text.txt wäre das selbe) chmod ugo+rwx test.txt Entfernt das Recht zu lesen für den Besitzer des Ordners. chmod u-r folder1/ Entfernt das Leserecht der Gruppe für die angegebenen Dateien. chmod g-r test1.txt test2.txt Absolutes Setzen von Rechten (alle anderen Rechte gehen verloren) Setzt das Recht zu lesen für den Besitzer. chmod u=r test.txt Setzt das Recht zu Lesen und Schreiben für den Besitzer und die Gruppe chmod ug=rw test.txt Setzt das Recht für den Besitzer, die Gruppe und alle Anderen für alle .pl-Dateien auf Lesen und Ausführen. chmod a=rx *.pl Man kann auch Ziffern zum Setzen der Rechte verwenden: Leserecht(4), Scheiberecht(2), Ausführungsrecht(1). Diese Werte werden addiert, um das gewünschte Resultat zu erzielen. Die folgenden Kommandos tun das gleiche wie die vorher beschriebenen. Leserecht setzen für den Besitzer chmod 400 test.txt Lese- und Schreiberecht für den Benutzer und die Gruppe setzen chmod 660 test.txt Setzt die Rechte für alle Perlskripte auf Lesen und Ausführen für den Besitzer, die Gruppe und alle anderen. chmod 555 *.pl Setzen des SUID- und SGID-Bits !!! SUID-Bit und SGID-Bit wirken sich nur auf ausführbare Binaries aus, nicht auf Skripte !!! Wenn man dies z.B. mit einem Perlskript, Bashskript, Java-Skript oder PHP-Skript testet, sollte man sich nicht wundern wenn sich rein garnichts an den Rechten ändert. Man kann zwar das SUID-Bit und das SGID-Bit setzen, aber das Skript wird weiterhin mit der UID und GID des aufrufenden Prozesses laufen. Der Grund hierfür ist, dass für jedes dieser Skripte der entsprechende Interpreter als eigentlich ausführendes Binary gestartet wird. Das kann man sich mit "ps -ax" anschauen. Ein aufgerufenes Perlskript sieht beispielsweise so aus: /usr/bin/perl ./perltest.pl SUID-Bit Setzen des SUID-Bits für test. Sobald test ausgeführt wird, läuft es nun mit der UID der Datei und damit mit den Rechten des Besitzers der Datei und nicht mehr mit den Rechten desjenigen der es aufruft! chmod u+s test SGID-Bit Setzen des SGID-Bits für test. Sobald test ausgeführt wird, läuft es nun mit der GID der Datei und damit mit den Rechten der Gruppe der Datei und nicht mehr mit den Rechten der Gruppe von der es aufgerufen wird! chmod g+s test Wird das SGID-Bit auf einem Verzeichnis gesetzt passiert folgendes: Alle darin neu erstellten Dateien bekommen die GID des Verzeichnisse, statt der GID desjenigen der die Datei erstellt. Hierzu ein Beispiel. Nehmen wir an das SGID-Bit ist für den Ordner "folder1" gesetzt und dieser Ordner hat die GID des www-Benutzers. Wenn nun root eine Datei darin erstellt bekommt diese Datei nicht die GID root wie es normalerweise der Fall ist sondern die GID des www-Benutzers. Das SUID-Bit und das SGID-Bit können auch gleichzeitig gesetzt sein. Setzen des Sticky-Bits Dies betrifft nur Verzeichnisse. Setzen des Sticky-Bits für den Ordner testfolder. chmod +t testfolder/ Deaktivieren des Sticky-Bits für den Ordner testfolder. chmod -t testfolder/ Wozu ist das gut? Zum Beispiel ist dieses Bit meist für /tmp gesetzt. Dies erlaubt beliebigen Anwendungen nach /tmp zu schreiben aber nur ihre eigenen Dateien zu löschen. Normalerweise wäre es so, dass alle die in /tmp schreiben dürfen auch die Dateien von anderen Benutzer darin löschen können. So kann jeder darin nur seine eigenen Objekte ändern oder löschen. Auch diese 3 Bits können wiederum mit Nummern gesetzt werden: SUID-Bit(4), SGID-Bit(2), Sticky-Bit(1). Eine vierte Ziffer muss dafür vor den anderen 3 Ziffern ergänzt werden. Setzt das SUID-Bit(z.B. chmod 4711 test) chmod 4xxx test Setzt das SGID-Bit chmod 2xxx test Setzt das Sticky-Bit chmod 1xxx testfolder/ Das Sticky-Bit wieder deaktivieren chmod 0xxx testfolder/ Setzen von SGID-Bit und Sticky-Bit gleichzeitig chmod 3xxx test/ Was bedeuten eigentlich die Großbuchstaben die manchmal erscheinen wenn "ls -l" aufgerufen wird? t (Sticky-Bit) und s (SUID-Bit oder SGID-Bit) werden als Großbuchstaben ausgegeben falls das Ausführungsrecht an dieser Position(Besitzer, Gruppe, Andere) nicht gesetzt ist. Der Grund dafür ist, dass das SUID-Bit und das SGID-Bit und das Ausführungsrecht die selbe Position haben. Dies dient gleichzeitig als Warnung. So eine Konfiguration ist zumindest seltsam. SUID-Bit, SGID-Bit und Sticky-Bit machen keinen Sinn ohne das Ausführungsrecht. Hierzu ein Beispiel: Im ersten Teil ist das Bit für das Ausführungsrecht des Besitzers nicht gesetzt und das Ergebnis ist somit ein großes S. Im zweiten Teil ist es jedoch gesetzt und wir erhalten dadurch ein kleines s. ls -l d-----x--x ... chmod u+s folder1/ ls -l d--S--x--x ... ls -l d--x--x--x ... chmod u+s folder1/ ls -l d--s--x--x ... Was bedeuten Leserecht, Schreiberecht und Ausführungsrecht bei Verzeichnissen? -Das Leserecht für einen Ordner bedeutet, dass ein Prozess den Inhalt des Verzeichnisses auslesen darf (sofern er den Ordner betreten darf, siehe dritter Punkt) -Das Schreiberecht für einen Ordner bedeutet, dass ein Prozess darin Objekte erstellen, bearbeiten und löschen darf (sofern er den Ordner betreten darf, siehe dritter Punkt) -Das Ausführungsrecht für einen Ordner bedeutet, dass ein Prozess den Ordner betreten darf, aber nicht mehr (also nicht lesen etc.) Ohne das Ausführungsrecht kann der Prozess den Ordner nicht betreten. Das bedeutet, das Recht auf Lesen und Schreiben allein reicht nicht. Das gleiche triff auf das Ausführungsrecht zu. Alleine gesetzt kann er keine Liste des Inhaltes bekommen oder schreibend einwirken. Das ganze gilt nicht für root, root hat immer alle Rechte auch wenn 0000 gesetzt wurde. Änderung des Besitzers und der Gruppe Ändert den Besitzer auf ftp. chown ftp text.txt Ändert die Gruppe auf www. chgrp www text.txt Ändert beides gleichzeitig. chown ftp:www test.txt Noch ein paar Tips Bei chmod und chown/chrgp kann man mit -R rekursiv absteigend die Eigenschaften ändern. Der folgende Befehl ändert die Rechte von testfolder und aller darunter sich befindenden Dateien und Verzeichnisse. chmod -R 755 /testfolder Dieser Befehl setzt den Besitzer auf ftp und die Gruppe auf www. Beides wird wiederum auf alle Dateien und und Unterverzeichnisse unterhalb von testfolder angewendet. chown -R ftp:www /testfolder Wie geht's nun weiter? Bei Bedarf kann man sich die folgenden Sachen mal anschauen: umask access control lists (acl) sudo su chattr lsattr SELinux |