======Verzeichnisstruktur ====== /*(Quelle: http://de.wikipedia.org/w/index.php?title=Datei:Filesystem.svg&filetimestamp=20100727221414 )*/ [{{grundlagen:dateisystem.png?270 |Linux Dateisystem}}] Bevor die Dateirechte behandelt werden, soll hier ein kleiner Überblick über das [[uu>Dateisystem]] gegeben werden. Das Verständnis des Dateisystems ist wichtig, da es die Ordner und Dateien strukturiert und gerade mit denen soll ja nun gearbeitet werden. Im Kapitel [[#Verzeichnisstruktur_erweitern|Verzeichnisstruktur erweitern]] wird die Verzeichnisstruktur nochmal genauer betrachtet. Der oberste Ebene, der Beginn der Verzeichnisstruktur, ist / (auch Root- oder Wurzelverzeichnis genannt). Es ist sehr grob mit dem Verzeichnis //C:// unter Windows zu vergleichen. Im Terminal kann man mit <code terminal> cd / </code> zu diesem Verzeichnis navigieren. Der Befehl ''cd'' steht für //__c__hange __d__irectory// (wechsle Verzeichnis). Alternativ kann man auch im Dateibrowser in der Seitenleiste //Dateisystem// wählen. Die Ordner und Dateien in Wurzelverzeichnis kann man sich auf der Konsole mit <code terminal> dir </code> anzeigen lassen (Abkürzung für //__dir__ectory//, Verzeichnis). Unterhalb des Wurzelverzeichnis findet man Unterordner (s. Abb. rechts). Jeder dieser Ordner hat eine eigene Funktion, d. h. er beinhaltet Dateien und weitere Ordner, die einen bestimmten Zweck erfüllen. Ein Überblick gibt der Artikel [[uu>Verzeichnisstruktur]]. <hidden Übung> - Im Ordner ///bin// (für //binaries//, Binärdateien) liegen die wichtigsten Systemprogramm. Hier findet man z. B. die Datei //dir//. Diese wird ausgeführt wenn der Befehl ''dir'' in der Konsole eingegeben wird. Im Ordner ''/usr/bin'' liegen weitere Anwendung, wie z. B. die Datei //firefox//. Öffne und untersuche den Ordner. Versuche hier Dateien direkt zu öffnen. - Im Ordner ///var/log// liegen die sog. [wikipedia:Logdatei:Logdateien]. In diesen protokollieren das System und einige Programme Meldung, z. B. zu Fehlern. Öffne einige dieser Dateien und untersuche sie. </hidden> ====== Dateirechte ====== [{{ grundlagen:zugriffsrechte.png?400|Zugriffsrechte einer Datei}}] Unter Linux hat jede Datei neben dem Dateinamen und dem Dateityp noch drei weitere Eigenschaften. Sie hat einen Besitzer und gehört einer Gruppe. zusätzlich kennt jede Datei noch die Zugriffsrechte, sie weiß also, wer sie öffnen, verändern, löschen oder ausführen darf. Die Dateirechte unter Linux zeichnen sich durch eine sehr einfache Struktur aus, dennoch kann man damit sehr komplexe Probleme lösen. Nicht zuletzt sind sie einer der wichtigsten Gründe dafür, dass Linux kaum anfällig für Viren und andere Schadsoftware ist. ===== Erstes Beispiel ===== Öffnet man im [[uu>Homeverzeichnis]] mit der rechten Maustaste das Kontextmenü einer Datei, klickt dann auf //Eigenschaften// und wählt den Reiter //Zugriffsrechte// aus, kann man die drei Eigenschaften sehen (s. rechts). In der Situation der Abbildung rechts ist der Benutzer //douglasadams//. Er hat das Recht, die Datei zu öffnen (lesen) und zu verändern (schreiben, und damit auch das Recht sie zu löschen). Dieser Benutzer ist in einer Gruppe, die ebenfalls //douglasadams// heißt. Alle Benutzer dieser Gruppe dürfen die Datei nur lesen. Alle anderen Benutzer dürfen die Datei ebenfalls nur lesen. Über die zugehörigen Auswahlboxen kann man diese Dateirechte nun verändern. Außerdem kann man noch angeben, dass die Datei als Programm ausgeführt werden soll. Dies ist ein wichtiger Sicherheitsaspekt. Unter Windows gibt es diese Einstellung nicht, deswegen ist es für unbedarfte Benutzer recht einfach Programme, die man z.B. aus dem Internet herunterlädt, sofort zu starten. Das ist zwar komfortabel, doch ein gewichtiger Grund dafür, warum Windows so virenanfällig ist, den auch Schadsoftware kann direkt ausgeführt werden. <hidden Übung> - Erzeuge eine Datei im Homeverzeichnis. Lege einen zweiten Benutzer an. Logge dich mit dem neuen Benutzernamen ein. Öffne den Dateibrowser und navigiere in das Homeverzeichnis des ersten Benutzers. Versuche die eben angelegte Datei zu öffnen und zu löschen. - Lege eine Datei im Homeverzeichnis an. Stelle die Zugriffsrechte so ein, dass nur der Benutzer die Datei öffnen kann. Logge dich dann mit einem anderen Benutzernamen ein und versuche die Datei zu öffnen. - Prüfe, welche Zugriffsrechte es für Ordner gibt. - Navigiere im Dateibrowser in den Ordner ///etc//. Wähle irgendeine Datei aus und überprüfe die Zugriffsrechte. - Im letzten Kapitel wurden schon die Ordner ///bin/// und ///usr/bin/// untersucht, in denen die Programmdateien liegen. Prüfe die Zugriffsrechte dieser Dateien. - Prüfe die Rechte der Dateien ///etc/passwd//, in der die Benutzer verwaltet werden. </hidden> ===== Rechte mit ''chmod'' auf der Konsole ändern===== Auf der Konsole kann man mit [[uu>chmod|chmod]] (engl. für //__c__hange __m__ode//) die Dateirechte ändern. Um zu sehen, wie die Dateirechte angegeben werden, kann man sich zunächst von einer bestehenden Datei die Rechte anzeigen lassen. Um sich die Zugriffsrechte des Homeverzeichnis des Benutzer //douglasadams// anzeigen zu lassen, gibt man auf der Konsole <code terminal> ls -l -d -h /home/douglasadams </code> ein. Es wird also der Befehl [[uu>ls|ls]] (von engl. //__l__i__s__t//) mit den Optionen ''-l -d -h'' verwendet. Man erhält die Ausgabe <code terminal> drwxr-x--- 1 douglasadams douglasadams 2G 2012-03-26 21:52 home/douglasadams/ </code> Die Bedeutung der einzelnen Bestandteile zeigt die folgende Tabelle: ^ ''d'' ^ ''rwx'' ^ ''r-x'' ^ ''%%---%%'' ^ ''douglasadams'' ^ ''douglasadams'' ^ ''2G'' ^ ''2012-03-26 21:52'' ^ | Es ist ein Verzeichnis | Benutzer | Gruppe | alle Anderen | Benutzer | Gruppe | Größe | letzte Änderung | | ::: | Zugriffsrechte ||| ::: | ::: | ::: | ::: | Die Rechte werden also in Gruppen von drei Buchstaben angegeben. Dabei steht ''w'' für Schreibrechte (//__w__rite//), ''r'' für Leserechte (//__r__ead//) und ''x'' für Ausführungsrechte (//e__x__ecute//). Sind die Rechte nicht vergeben, wird dieses durch einen Bindestrich (''-'') dargestellt. **Beispiel:** Soll eine Datei für den Benutzer (''u'', //user//) und die Gruppe (''g'', //group//) schreib- und lesbar sein, aber nur für den Benutzer ausführbar und für alle Anderen (''o'', //others//) nur lesbar, so kann man mit <code terminal> chmod u=rwx,g=rw-,o=r-- test.jar</code> diese Rechte vergeben. Es gibt auch die Möglichkeit, nur einzelne Zugriffsrechte zu verändern und nicht alle Zugriffsrechte neu zu setzen. Dieses wird [[uu>chmod#Symbolischer-Modus|hier]] in Beispielen erklärt. <hidden Übung> - Lege eine Datei im Homeverzeichnis an. Setze die Zugriffsrechte dann so, dass nur der Benutzer die Datei verändern kann, alle anderen sie aber lesen können. - Welche Bedeutung haben die Optionen ''-l -h -D'' des ''ls''-Befehls? - Wie unterscheidet sich die Ausgabe von ''ls'' für ein Verzeichnis von der Ausgabe für eine Datei? </hidden> ==== Oktaler Modus ==== Die Zugriffsrechte können auch mit Hilfe von Zahlen angegeben werden, dies ist in den meisten Fällen sehr viel komfortabler und schneller. Dabei wird jedem Recht eine Zahl zugeordnet. ^ Recht ^ Buchstabe ^ Zahl ^ | Lesen | r | 4 | | Schreiben | w | 2 | | Ausführen | x | 1 | Man muss nun für den Benutzer, die Gruppe und die Anderen die zum Zugriffsrecht gehörige Zahl heraussuchen. Diese Zahlen addiert man dann auf. Für das Beispiel von oben sieht dies so aus: * ''rwx'': 4+2+1 = 7 * ''rw-'': 4+2+0 = 6 * ''r<nowiki>--</nowiki>'': 4+0+0 = 4 In diesem Fall kann man dann mit <code terminal> chmod 764 test.jar </code> die Zugriffsrechte setzen. <hidden Übung> - Schreibe die Zugriffrechte ''r-xr-xr--'' in oktaler Schreibweise. - Schreibe die Zugriffsrechte 640 mit Hilfe der Buchstaben. - Lege ein Verzeichnis an und erzeuge darin mehrere Dateien. Mit <code terminal> chmod --help</code> kann man die Hilfe für den Befehl [[uu>chmod|''chmod'']] anzeigen lassen. Finde über die Hilfe heraus, wie man die Zugriffsrechte für alle Dateien in dem Verzeichnis ändern kann. </hidden> ===== Benutzer und Gruppen ändern ===== <hidden Übung>Mit dem Befehl [[uu>chown|chown]] (von engl. //__ch__ange __own__er//) kann man die Benutzer und Gruppen einer Datei oder eines Verzeichnisses ändern. Lese die Beispiele im [[uu>chown|Wikiartikel zu ''chown'']] durch und probiere sie an eigenen Beispielen aus.</hidden> ===== Verzeichnisstruktur erweitern ===== Im Abschnitt [[#Verzeichnisstruktur|Verzeichnisstruktur]] wurde schon die Struktur der Verzeichnisse behandelt. Nun soll die Verzeichnisstruktur erweitert werden. Zum Einen kann man neue Ordner erzeugen, und so die Verzeichnisstruktur erweitern. Wesentlich interessanter ist aber, dass man unter Linux andere Dateisystem in die Verzeichnisstruktur einbinden kann. **Beispiel:** Ein USB-Stick ist so eine "anderes Dateisystem". Unter Windows wird ein erkannter USB-Stick als neues //Laufwerk// angezeigt. Unter Linux ist das Wurzelverzeichnis immer der einzige Beginn der Verzeichnisstruktur. Es ist also nicht möglich, ein Ordner (oder Laufwerk) für den USB-Stick zu erzeugen, dass auf der gleichen Ebene wie das Wurzelverzeichnis (/) liegt. Vielmehr wird das Dateisystem des USB-Sticks in das bestehende Dateisystem [[uu>mount|gemountet]] (engl. für anbauen, aufstecken, einbinden). Ein USB-Stick wird normalerweise automatisch gemountet. Steckt man ihn ein, so findet man danach im Ordner ///media/// einen Ordner mit dem Namen des USB-Sticks. Das Dateisystem des USB-Sticks wurde also in das bestehende Dateisystem //"eingebaut"//. Für den Benutzer macht es also keinen Unterschied, ob sich hinter diesem Ordner ein USB-Stick oder eine Partition auf der Festplatte befindet, oder ob es ein "normaler" Ordner ist, den man dort angelegt hat. ==== Gerätedateien ==== Um mit angeschlossenen Geräten (genauer Schnittstellen) zu kommunizieren, verwendet Linux //Gerätedateien// (wurde nicht schon mal erwähnt, dass unter Linux alles eine Datei ist?). Diese Dateien befinden sich im Ordner [[uu>Verzeichnisstruktur#dev|/dev]]. Es handelt sich um Binärdateien, die schon während der Installation angelegt werden. Diese Dateien sorgen dafür, dass ein Programm direkt über diese Dateien mit dem Kernel kommunizieren kann. Der Kernel kann daraufhin die Hardware ansprechen. Diese Dateien werden wie normale Dateien verwendet: Um mit der entsprechenden Hardware zu kommunizieren, muss man etwas in die entsprechende Datei schreiben. Einen Überblick darüber, welche Gerätedateien es gibt, findet man [[wp>Gerätedatei#Blockorientierte_Ger.C3.A4te|hier]]. ==== Der Befehl ''mount'' ==== === Beispiel === Das Mounten eines USB-Sticks funktioniert normalerweise automatisch. Nun soll gezeigt werden, wie man einen USB-Stick manuell [[uu>mount|mounten]] oder [[uu>mount#umount|unmounten]] kann. Ist der USB-Stick eingehängt, kann man sich über den Befehl (Option ''-l'' für //__l__ist//) <code terminal> mount -l</code> alle eingehängten Dateisystem anzeigen lassen. In der Ausgabe findet man z. B. die Zeile <code> /dev/sdb1 on /media/380D-B8CF type vfat rw,nosuid,nodev,uhelper=udisks,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,flush) </code> Der USB-Stick ist über die Gerätedatei ''/dev/sdb1'' ansprechbar. Einer Wechselfestplatte, also auch einem USB-Stick, wird normalerweise die Gerätedatei ''/dev/sdb'' zugeordnet. Das sich in der Regel eine [[uu>Partitionierung|Partition]] auf dem USB-Stick befindet, kann man diese Partition über die Gerätedatei ''/dev/sdb1'' ansprechen. Nun kann man über den Befehl <code terminal> sudo umount /dev/sdb1 </code> den USB-Stick aushängen. Im nächsten Schritt soll der USB-Stick wieder eingehängt werden. Er soll danach im Ordner [[uu>Verzeichnisstruktur#mnt|/mnt]] zu finden sein. Dazu gibt man auf der Konsole ebenfalls den Befehl ''mount'', gefolgt von der Gerätedatei und dem Einhängepunkt an: <code terminal> sudo mount /dev/sdb1 /mnt </code> Danach kann man über den Ordner ///mnt// auf den USB-Stick zugreifen. === Ein weiteres Beispiel === Mit dem Programm [[uu>gparted]] kann man Partitionen erstellen. Erzeugt man damit auf einem USB-Stick zwei [[uu>Partitionierung:Partitionen]] (dadurch werden alle Daten auf dem USB-Stick gelöscht!), so muss man jede Partition einzeln mounten. Die Partitionen sind dann in der Regel über die Gerätedateien ///dev/sdb1// und ///dev/sdb2// ansprechbar. Im folgenden Beispiel werden mit dem Befehl [[uu>mkdir|mkdir]] zunächst zwei Verzeichnisse im Ordner ///mnt// erzeugt. Danach werden dorthin die beiden Partitionen gemountet. <code terminal> sudo mkdir /mnt/part1 sudo mkdir /mnt/part2 sudo mount /dev/sdb1 /mnt/part1 sudo mount /dev/sdb2 /mnt/part2 </code> ==== Netzwerkfreigaben und NFS ==== {{wiki/icons/places/network-server.png?48 }} Neben dem Aspekt "Alles ist eine Datei" ist der Aspekt "Alles ist eine Client-Server-Anwendung" ebenfalls grundlegend für die Linux-Philosophie. Viele Programme sind so konstruiert, dass sie über Netzwerkverbindungen kommunizieren, auch wenn sie auf demselben Rechner laufen. So können alle Programm auch wahlweise über das Netzwerk genutzt werden. Dieser Aspekt wird nun deutlich, wenn man auf Netzwerkfreigaben zugreifen will. Das Protokoll, d. h. die Regeln mit denen Dateien über das Netzwerk ausgetauscht werden können, heißt [[uu>NFS]]. Um Netzwerkfreigaben über NFS nutzen zu können, muss ggf. die im Artikel [[uu>NFS]] beschriebenen Pakete installiert werden. Der Server ist in diesem Fall der Computer, der etwas freigibt. Der Client ist der Computer, der auf die Freigabe zugreift. Das, was der Server freigibt, wird in der Datei ///etc/exports// eingetragen. Das Vorgehen wird [[uu>NFS#Freigaben|hier]] erklärt. Der Client kann nun diese Freigabe wieder mit dem Befehl [[uu>mount]] in seine Verzeichnisstruktur einbinden. Dies ist im Abschnitt [[uu>NFS#Auf-Freigaben-zugreifen|NFS/Auf Freigaben zugreifen]] beschrieben. <WRAP round info> Um die IP-Adresse eines Rechners herauszufinden, gibt man auf der Konsole <code terminal> ifconfig</code> (von engl. //__i__nter__f__ace __config__urator//) ein. Die IP-Adresse findet man unter dem Abschnitt ''inet Adresse''. Ob ein Computer auch unter seinem Computernamen im Netzwerk zu finden ist, kann man herausfinden, indem man eine Anfrage mittels <code terminal>ping COMPUTERNAME </code> von einem Computer an ihn richtet. Ist der Aufruf erfolgreich, kann man anstatt der IP-Adresse auch den Computernamen verwenden. Ansonsten muss man ggf. die </WRAP> <hidden Übung> - Installiere die beiden [[uu>NFS#Installation:benötigten Pakete]], um das NFS-Protokoll zu nutzen. Gib dann auf einem Rechner einen Ordner frei. Bindet eine Freigabe von einem anderen Rechner ein. Alternativ, kann man auch auf einem Rechner eine Freigabe einrichten und von demselben Rechner darauf zugreifen. - Lies den Abschnitt [[uu>NFS#Auf-Freigaben-zugreifen]] durch und den Artikel zur Datei [[uu>fstab:/etc/fstab]]. Verändere dann die Freigabe so, dass man zwar noch darauf zugreifen kann, sie aber nicht mehr verändern kann. </hidden>

Diskussion

Geben Sie Ihren Kommentar ein. Wiki-Syntax ist zugelassen:
206 -6 = ?
 
 
grundlagen/dateirechte_dateisystem_und_verzeichnisstruktur.txt · Zuletzt geändert: 2012/11/27 19:38 von admin