Inhaltsverzeichnis
Freigaben
Rechteverwaltung allgemein
Unix-Rechte setzt man allgemein mit chmod. Anzeigen lassen kann man sie sich mit
ls -la
. Dabei ist das Format der Einträge auf die folgende Reihenfolge festgelegt:
- Zuerst wird der Typ des Objekts durch ein Zeichen angegeben. Dabei steht d für Verzeichnisse (directories), l für symbolische Verweise (symbolic link), und - für Dateien.
- Es folgt ein Block von drei Zeichen für die Rechte der besitzenden Person (User).
- Der Block besteht aus folgenden Zeichen:
- Hat die nutzende Person das Leserecht (r) oder nicht (-)?
- Hat die nutzende Person das Schreibrecht (w) oder nicht (-)?
- Kann die nutzende Person die Datei ausführen (x) oder nicht (-)?
Wichtig: Falls ein Verzeichnis nicht über das x verfügt, kann es auch nicht gelesen werden, da hierzu ja ein Befehl (ls, cp, …) im Verzeichnis ausgeführt werden muss.
- Der nächste Dreierblock umfasst die gleichen Rechte für die zugeordnete Gruppe (rwx, siehe eben).
- Der dritte Dreierblock schließlich gibt die Rechte für alle nutzenden Personen an (ebenfalls rwx, siehe eben).
- Ein Beispiel:
ls -la /home/myuser/test total 10 drwxr-xr-x 3 myuser student 512 2005-02-18 14:29 . drwxr-xr-x 124 myuser student 6656 2005-02-18 14:28 .. drwxr-xr-x 2 myuser student 512 2005-02-18 14:29 somedir -rw-rw-r-- 1 myuser student 0 2005-02-18 14:29 somefile lrwxrwxrwx 1 myuser student 8 2005-02-18 14:29 somelink -> somefile
Hier gehören alle Objekte der nutzenden Person myuser und der Gruppe student, wobei die Datei somefile und damit auch der Symlink somelink von jedem Mitglied der Gruppe geschrieben werden dürfen. Alle dürfen alles lesen, aber nur dann, wenn alle Verzeichnisse in der Verzeichnishierarchie bis zum aktuellen für die jeweils nutzende Person les- und ausführbar sind. Will man diese Rechte auf eine bestimmte Gruppe von nutzenden Personen einschränken, bieten sich ACLs an.
Das Setzen und Verändern der Rechte geschieht in der Form Wem, Entziehen/Verleihen (+/-), Was:
chmod go-r /home/myuser/test/somefile chmod g+w /home/myuser/test/somedir
Diese Befehle entziehen erst Gruppe und Rest die Leserechte auf die Datei somefile und vergeben dann Schreibrechte für die Gruppe auf somedir. Rechte können auch per Angabe von Zahlenwerten gesetzt werden:
chmod 644 /home/myuser/test/somefile chmod 755 /home/myuser/test/somedir
Obige Befehle setzen die Rechte für somefile auf Lesen/Schreiben für die besitzende Person und Lesen für alle anderen sowie Lesen/Schreiben/Ausführen für den Besitzer von somedir und Lesen/Ausführen für alle anderen. Die Angabe der Werte erfolgt über Oktalzahlen. Die Reihenfolge ist: besitzende Person, Gruppe, Rest, wobei sich die Werte für Lesen (4), Schreiben (2) und Ausführen (1) (oktal) addieren.
Im Gegensatz zu Windows-Systemen ist eine Datei genau dann ausführbar, wenn der entsprechende nutzende Person das Unix-Recht dazu hat, unabhängig von der Dateierweiterung.
ACLs
Neben den Unix-Rechten spielen in der Praxis (bei den Poolrechnern) jedoch auch noch ACLs eine Rolle.
Bei Verzeichnissen bedeutet das Recht zum Ausführen, dass man in das Verzeichnis wechseln darf. Symlinks (anzulegen mit ln -s) haben alle Rechte „gesetzt“, da sich ihre Rechte von den Rechten des verlinkten Objekts ableiten. ACLs
Access Control Lists (ACLs) erlauben eine feinkörnigere Rechtevergabe als die klassischen Unix-Rechte. So können einzelnen nutzenden Personen Rechte für Dateien und Verzeichnisse verliehen und entzogen werden.
ACLs finden sich z.B. als Teil von Microsofts Dateisystem NTFS, aber auch bei Sparc/Solaris in Form von UFS. Dort heißen die beiden nötigen Befehle getfacl und setfacl.
Für eine generelle Einführung in ACLs (sowie eine kurze Beschreibung zur Einrichtung eines CVS-Repositories wie unten beschrieben) siehe z.B. EiSE ACL Einführung. Um bestimmten anderen nutzenden Personen den Zugriff auf das eigene Home-Verzeichnis zu gewähren (wie für CVS nötig), geht man für jeden einzelnen nutzenden Personen des Projekts wie folgt vor, wobei someuser der jeweilig nutzenden Person ist:) und überprüft das Ergebnis schließlich mit getfacl:
setfacl -m u:someuser:rx ~ setfacl -m u:someuser:rwx ~/myproject getfacl ~
Notiz: Wobei die Welle od. Tilde ~ für das eigene Heimatverzeichnis steht.
Der erste Befehl ermöglicht es dem User „someuser“ das Heimatverzeichnis zu betreten, der zweite ermöglichen ihm auch den Schreibzugriff auf „myproject“.
Möchte man, dass neu angelegte Dateien und Verzeichnisse ebenfalls die Rechte vom jeweiligen Verzeichnis erben, so muss der setfacl Befehlt mit einer kleinen Modifikation erneut ausgeführt werden:
Mit
setfacl -d u:someuser project
werden die per ACL eingeräumten Rechte someuser auf project wieder gelöscht.
Dateien oder Verzeichnisse, zu denen ein ACL-Eintrag existiert, werden bei ls -al mit einem + markiert:
-rw-rw-r--+ 1 myself mygroup [...] project -rw-r----- 1 myself mygroup [...] some_private_stuff
Will man die Rechte für neu anzulegende Dateien in einem Verzeichnis festlegen (default permissions), kann man das beispielsweise so tun (exklusiver Zugriff für die besitzende Person):
setfacl -d -m u:someuser:rwx ~/myproject
Für weitere Fragen empfiehlt sich
man setfacl
.
CVS - SVN - Git
Mit dem Concurrent Version System (CVS) kann man mit mehreren Leuten gemeinsam an einem Projekt arbeiten. Durch den Vorgang des Ein- und Auscheckens erfolgt dabei automatisch eine Versionskontrolle, d.h. Änderungen können verfolgt und ggf. rückgängig gemacht werden. Checkins können mit Kommentaren versehen werden, so dass man gleich sieht, was sich getan hat.
Einrichten
Über RBG/ISP SVN Server
Die RBG/ISP stellt seit dem August 2011 SVN/GIT Server für Studierende mit RBG/ISP Account zur Verfügung. Eine Kurzeinführung findet sich auf der Seite svn-git
Über User Account
Auf den Poolrechnern erfolgt das Einrichten in zwei Teilen: Erst einmal muss den Projektteilnehmende Zugriff auf das eigene Home-Verzeichnis gewährt werden - das geht, wie oben beschrieben, mit ACLs. Das ist nötig, weil die Unix-Rechtevergabe fordert, dass alle Verzeichnisse in der Verzeichnishierarchie bis zum aktuellen les- und ausführbar sein müssen.
Um CVS nutzen zu können, braucht man dann ein sogenanntes Repository. Das ist erst einmal ein ganz normales Verzeichnis, das mittels mkdir leer angelegt wird. Mit ACLs gibt man dieses dann für alle Projektmitglieder les-, schreib- und ausführbar frei (s.o., ersetze ~ durch den Pfad zu dem leeren Verzeichnis).
Anschließend lässt man das Verzeichnis als CVS-Repository initialisieren:
mkdir /home/myuser/cvsrep setfacl -R -m u:someuser:rwx /home/myuser/cvsrep cvs -d /home/myuser/cvsrep init
Als Ergebnis erhält man ein Unterverzeichnis CVSROOT, dass die Metadaten enthält. Das Repository ist damit fertig eingerichtet und benutzbar. Wenn das Repository im eigenen Home-Verzeichnis eingerichtet wird, wirkt sich das natürlich auf die eigene Quota aus.
Für den externen Zugriff bietet sich SSH an.
Unter EiSE CVS Einführung findet sich eine kurze Beschreibung der Einrichtung von CVS mit Eclipse.
Benutzen
Unter Unix/Linux gibt es diverse Clients zum Zugriff auf CVS. Auf der Kommandozeile natürlich cvs, grafisch z.B. cervisia als Teil von KDE.
Unter Windows gibt es zum einen WinCVS als grafische Oberfläche, aber auch Erweiterungen für das Kontextmenü wie TortoiseCVS.
Für den Zugriff über die Kommandozeile sei hier auf eine Kurzeinführung in CVS verwiesen. Alternative Oberflächen benutzen aber if i.A. dieselben Begriffe, so dass sich die Lektüre auf jeden Fall lohnt. Subversion
Neben CVS kann man auch Subversion für die Versionsverwaltung nutzen. Die Bedienung ist absichtlich sehr ähnlich zu CVS; z.B. lauten die Kommandos zum Ein- und Auschecken auch hier commit und checkout.
- Repository anlegen:
Subversion-Repositories können auf verschiedenen Datenbank-Backends aufsetzen. Standardmäßig wird seit Version 1.2 FSFS genommen (vorher BerkeleyDB):
svnadmin create repository_name
Beim Anlegen kann man das Backend auch explizit vorgeben (fsfs oder bdb):
svnadmin create --fs-type bdb repository_name
BerkeleyDB funktioniert jedoch nicht in NFS-gemounteten Verzeichnissen wie das Nutzenden-Homeverzeichnis.
Um anderen benutzenden Personen, z.B. Projektmitgliedern, Zugriff zu gewähren, muss man diesen Rechte per ACLs einräumen (s.o.):
setfacl -R -m u:someuser:rwx repository_name
Unter Debian funktioniert die rekursive Vergabe von Rechten per ACL für Unterverzeichnisse so:
find Verzeichnis/ -exec setfacl -R -m u:someuser:rwx {} \;
Wie auch im Falle von CVS wirkt sich ein Repository im Home-Verzeichnis auf die Quota aus.
- Einrichten:
In einer lokal ausgecheckten Version:
mkdir trunk branches tags svn add trunk branches tags svn commit -m "initial checkin"
- Remote auschecken:
Zuerst muss für jede zugreifende Person sicher gestellt werden, dass das Programm svnserve, installiert in /usr/bin/, von ssh gefunden werden kann. Dafür muss die Datei .bashrc (angenommen, die Login-Shell ist bash) erstellt oder angepasst werden; relevant ist hierbei folgende Zeile:
export PATH="/usr/bin:$PATH"
Dann kann ausgecheckt werden:
svn co svn+ssh://user@clientssh1.rbg.informatik.tu-darmstadt.de/home/user/repository_name
(für Checkin etc. analog)
Da der Zugriff über SSH erfolgt, muss das Passwort immer angegeben werden (oder Public-Key-Authentifizierung benutzt werden, was hier nicht beschrieben wird).
Neben dem Zugriff über die Kommandozeile gibt es natürlich auch grafische Clients wie TortoiseSVN.
Falls es beim Zugriff per ssh zu einer Fehlermeldung kommt, dass svnserve (oder andere Komponenten) nicht gefunden werden konnten, langt die Einfügung der folgenden Zeile in die Datei $HOME/.bashrc:
export PATH="/usr/local/bin:$PATH"
Eine weitere hilfreiche Anleitung und Einführung findet sich im Fachschafts-Forum für Eclipse Nutzende im Team.