[Start] [Computer] [Physik] [Bilder] [Sprüche] [Wiki] [Blog] [Kontakt]
Administration

Hier stehen Dinge, die man nur als Administrator (Root) bzw. Superuser ausführen kann.

  • Administratorrechte bekommen:
    Sitzt man vor einem Linux-Rechner kann man sich sehr einfach(!) Root-Rechte verschaffen. Dazu muß man nur im Bootmanager als Option
     init=/bin/bash 
    eingeben. Das System bootet dann ohne(!!) nach dem Passwort zu fragen in eine bash-shell mit Root-Rechten. Jetzt gibt man einfach
    > passwd
    ein und gibt ein neues Passwort ein. Damit hat man das Root-Passwort neu gesetzt und damit sofort Root-Rechte auf diesem Rechner.
  • Als Administrator/Superuser das Passwort eines anderen Benutzers neu setzen
    Als Superuser kann man sich zwar jederzeit mittels sudo -i -u [Benutzername] als Benutzer [Benutzername] anmelden, aber versucht man dann das Passwort mittels passwd neu zu setzen, wird man nach dem alten Passwort des Benutzers [Benutzername] gefragt, das man wahrscheinlich nicht kennt. Viel einfacher und ohne das Passwort des Benutzers zu kennen, setzt man das Passwort als Administrator/Superuser neu:
    > passwd [Benutzername]
    
  • Passwortänderung beim nächten Login erzwingen:
    Will man, dass ein Benutzer beim nächsten Login sein Passwort neu setzt, so benutzt man
    > passwd -e [Benutzername]
    
    Dies ist auch nützlich, wenn man gerade einen neuen Benutzeraccount angelegt hat und dem Benutzer ein initiales Passwort per Email senden möchte, dass er nur für den ersten Login verwenden soll. Setzt man unmittelbar nach der Erzeugung des Account passwd -e [Benutzername], so ist der Benutzer gezwungen bereits beim ersten Login ein neues Passwort zu setzen. Mehr dazu bei Hakuna Matata:How do I force linux to change (forcefully) user password?.
  • Als Superuser X-Programme ausführen:
    Mit dem üblichen su-Befehl kann man keine X-Programme (Programme mit grafischer Benutzeroberfläche) ausführen, da die entsprechenden Rechte nicht automatisch gesetzt werden. Unter Suse gibt es dafür folgenden Befehl:
    > sux
    Nach Eingabe des Superuserpassworts kann man dann ohne Probleme auch Programme mit grafischer Benutzeroberfläche mit Superuserrechten aus der Kommandozeile starten.
  • Einem Benutzer in die sudoers-Liste aufnehmen:
    Frei nach Wikipedia/Sudo: Man benutzt sudo anstelle von su, um bestimmten Benutzern die Möglichkeit zu geben, gewisse Programme mit den Rechten eines anderen Benutzers (meistens Root) ausführen zu können, ohne das Root-Passwort weitergeben zu müssen. Die Sicherheitsrichtlinien sind bei Linux in der Datei /etc/sudoers gespeichert, die nur vom Superuser root editiert werden darf.
    Um also für einen Benutzer sudo freizuschalten, editiert man als root die sudoers-Datei
    > jpico /etc/sudoers
    
    Folgende Zeilen müssen hinzugefügt werden, um einem Benutzer [username] Zugriff auf alle Befehle mittels sudo zu geben:
    [username] ALL=(ALL) ALL
    
    Unter Suse Linux wird der Benutzer beim Ausführen von sudo jedoch trotzdem standardmäßig nach dem root-Passwort gefragt. Um das zu verhindern muß man zwei Zeilen wie folgt auskommentieren
    #Defaults targetpw    # ask for the password of the target user i.e. root
    #%users ALL=(ALL) ALL # WARNING! Only use this together with 'Defaults targetpw'!
    
    Jetzt fragt sudo wie gewünscht beim Ausführen nach dem Benutzerpasswort und nicht nach dem root-Passwort.
  • sudo benutzen:
    Um sich als anderer Benutzer [username] einzuloggen:
    > sudo -i -u [username] 
    Um sich als root einzuloggen:
    > sudo -i 
    Letzterer Befehl ist äquivalent zu sudo su -. Will man eine Shell mit root-Rechten, jedoch ohne die Umgebungsvariablen der aktuellen Umgebung zu verlieren, so benutzt man
    > sudo -s 
    Letzteres funktioniert jedoch nur, wenn in der Datei /etc/sudoers die eventuell vorhandene Zeile
    Defaults    env_reset
    auskommentiert(!) ist. Mehr zum sudo-Kommando gibt es unter RootSudo(help.ubuntu.com).
  • Graphische (X-Window) Programme ueber sudo aufrufen:
    Das naive Aufrufen graphischer Programme aus einer sudo-Shell scheitert meist, da notwendige Umgebungsvariablen nicht gesetzt sind. Insbesondere wird vom Betriebssystem oft die XAUTHORITY-Variable nicht gesetzt, weswegen auch nach einem sudo -s die X-Window-Ausgabe nicht funktioniert, obwohl sie in der Umgebung des vorherigen Benutzers durchaus funktioniert hat. Man muß daher leider die XAUTHORITY-Variable manuell setzen
    > export XAUTHORITY=$HOME/.Xauthority
    > sudo -s
    > xclock
    
    Will man jedoch eine Login-Shell, so muß man zusaetzlich noch die DISPLAY-Variable setzten und zwar auf den Wert den sie fuer den Benutzer [username] hatte von dem aus man sudo aufgerufen hat
    > echo $DISPLAY
    localhost:11.0
    > echo $HOME
    /home/[username]
    > sudo -i
    > export DISPLAY=localhost:11.0
    > export XAUTHORITY=/home/[username]/.Xauthority
    > xclock
    
  • Daemonen (Dienste) unter Suse Linux neustarten:
    Manchmal hilft ein Neustart eines Hintergrundprozesses (auch Daemon, bzw. Dienst genannt) um die seltsamsten Probleme zu lösen. Den SSH-Server z.B startet man unter Suse 9.3 mit der Kommandozeile
    > rcsshd restart
    
    neu.
  • Eigene MAC Adresse herausfinden:
    > sudo /sbin/ifconfig
    eth0      Link encap:Ethernet  HWaddr [MAC-Adresse]
    ...
    
    wobei [MAC-Adresse] die gesuchte MAC-Adresse der ersten eingebauten Netzwerkkarte ist. Braucht man die WLAN MAC-Adresse steht diese oft unter Punkt eth1.
  • Herausfinden, welche Computer online in einem Subnetz sind:
    > nmap -sP 123.123.123.*
    
    Wird derselbe Befehl nicht als root aufgerufen, findet nmap eventuell nicht alle Computer.
  • Herausfinden, welches Betriebssystem hinter einer bestimmten IP-Nummer steckt:
    > nmap -O 123.123.123.*
    
  • Herausfinden, welcher Benutzer und welcher Prozess auf Dateien in einem Verzeichnis zugreift:
    > lsof /pfad/verzeichnis
    
    lsof steht dabei für "list open files" (siehe auch UnixforAdvancedUsers).
  • Alle Dateien eines bestimmten Benutzers finden:
    > sudo find / -user [user]
    

    Der Befehl funktioniert natürlich nur, wenn der Benutzer [user] existiert. Mehr Infos gibts bei www.cyberciti.biz.

  • Eine Datei schreibschützen (so dass selbst root die Datei nicht verändern kann):
    > chattr +i [readonly]
    

    Mit diesem Befehl kann man sicherstellen, dass die Datei [readonly] niemals überschrieben werden kann, auch nicht von root selbst. Allerdings kann man als root den Schutz natürlich wieder entfernen. Das ist nützlich, um sicherzustellen, dass bestimmte Dateien (z.B. /etc/passwd und andere Systemdateien) auch bei Systemupdates nicht überschrieben werden können. Das ganze funktioniert wohl nur auf ext2/3/4 Dateisystemen. Da der Befehl relativ wenig bekannt ist wird er auch von einigen RootKits benutzt um das Beseitigen des RootKits zu erschweren. Mehr Infos über den Befehl gibts bei linuxhelp.blogspot.com.

  • Bildschirmsperre (mit Passwort) abschalten:
    Manchmal kommt es vor, dass die Bildschirmsperre unter KDE abstürzt oder man das Passwort nicht mehr richtig eingeben kann. Dies passiert z.B. wenn man unter Suse 9.3 und KDE ein Passwort mit lateinischen Zeichen hat, jedoch auf russische Tastaturbelegung umgeschaltet hat kurz bevor die Bildschirmsperre kommt. Da man dann die Tastaturbelegung nicht mehr ändern kann (siehe dazu auch bugs.kde.org), kann man das Passwort mit den lateinischen Buchstaben nicht mehr eingeben und sich auch nicht mehr einloggen. Einzige Möglichkeit ist dann noch die Deaktivierung der Bildschirmsperre als root. Eingeloggt als root findet man die Bildschrimsperre mit
    > ps aux | grep kdesktop_lock
    pechvogel 14161 0.0 0.1 2700 704 pts/11 S 14:35
    
    Mittels
    > kill 14161
    
    kann man jetzt die Bildschirmsperre für den Benutzer pechvogel "abschießen", so dass derjenige wieder mit seiner noch laufenden "Session" weiterarbeiten kann.
  • Computer über Terminalkommando herunterfahren:
    Will man das System sofort herunterfahren, so kann man dass mittels
    > sux
    > halt 
    oder
    > poweroff
    erreichen. Der Befehl halt ist dabei die Abkürzung für shutdown -h now und poweroff steht für halt -p. Wenn man es weniger eilig hat, kann man das System z.B. in 2 Minuten mit dem Befehl
    > shutdown -h +2
    herunterfahren. Will man nur neustarten benutzt man am besten
    > reboot
    
    which is an alias for shutdown -r now.
  • System an einem bestimmmten Tag herunterfahren:
    Mit dem Befehl shutdown allein ist es nicht möglich, den Computer an einem bestimmten Datum herunterzufahren, da shutdown nur Uhrzeitangaben, jedoch keine Datumsangaben (Tage, Monate, Jahre...) erlaubt. Daher muß man at benutzen, z.B.:
    > sux
    > at 05:00 30.08.05
    at> halt
    at> [[Ctrl]]-[[d]]
    >
    
    Dieser Befehl ([[Ctrl]]-[[d]] steht dabei für die abschließende Tastenkombination Ctrl-d ) fährt das System am 30.08.2005 um 5 Uhr früh herunter. Eventuelle Ausgaben werden als Mail an root@computername.domainname geschickt.
  • Scratch-Partition einrichten:
    Um allen Benutzern auf einem Computer die Möglichkeit zu geben temporär Daten auf dem lokalen Computer abzulegen, ist es üblich sogenannte Scratch-Partitionen (oder ein Scratch-Verzeichnis) anzulegen. Um ein Scratch-Verzeichnis anzulegen kann man z.B. folgendermaßen vorgehen:
    > sux
    > cd /
    > mkdir scratch
    > chmod a+rwx scratch
    
    Der letze Befehl gibt dabei allen Benutzern Lese- und Schreibrechte. Das Executable-Bit x zusätzlich ist wichtig, damit auch alle Benutzer in das Verzeichnis mittels cd wechseln können.
  • Windows-Partition unter Linux mounten:
    > mount /dev/hdc1 /mnt -t vfat -o umask=000, exec 
    Dabei steht vfat für das Dateisystem FAT32, umask=000 gibt allen Benutzern Lese- und Schreibrechte und exec erlaubt das Ausführen von Programmen von dem gemounteten Dateisystem. Soll das Laufwerk immer beim booten gemountet werden, sieht ein entsprechender Eintrag in die Datei /etc/fstab folgendermaßen aus:
    /dev/sda7  /windows/E  vfat  users,gid=users, umask=0000,exec,utf8=true  0  0
    
    Erläuterung zum umask-code:
    Die erste 0 zeigt einfach an, dass eine Octal-Zahl folgt, die zweite Zahl steht für die Rechte des user, die dritte für die rechte der group und die vierte für others. Die Kodierung ist dabei folgendermaßen: keine Leserechte r=4, keine Schreibrechte w=2 und keine Ausführbarkeit x=1, sodass z.B. alle Rechte für others ausgeschlossen sind, wenn die entsprechende Zahl 4+2+1=7 ist. Alle möglichen Kombinationen entnehme man folgender Tabelle:
    0 1 2 3 4 5 6 7
    rwxrw-r-xr---wx-w---x---
    Mehr dazu findet man auch auf gentoo-wiki.com und de.opensuse.org.
  • USB-Disk unter Linux als FAT32 formatieren:
    Als root oder Superuser eingeben (siehe auch www.linuxclub.de):
    > mkfs.vfat -F 32 /dev/[laufwerk]
    oder
    > mkdosfs -F 32 /dev/[laufwerk]
    Das Laufwerk bekommt man unter KDE auf Suse Linux heraus, indem man das Icon des USB-Sticks auf dem Desktop rechtsklickt und im Menü->Eigenschaften wählt.
  • Disketten formatieren unter Linux:
    Falls man an einem Computer sitzt der noch ein Diskettenlaufwerk besitzt
    > mformat a:
    Dies formatiert eine Diskette mit dem DOS-FAT Dateisystem. Für weitere Informationen siehe SDB:Disketten formatieren unter Linux.
  • Unterschied zwischen user und users beim mounten:
    Es besteht ein subtiler (und in den man-Pages schlecht erklärter) Unterschied zwischen den Optionen user und users, die man beim mounten von Laufwerken angeben kann:
    Die Option user erlaubt es, dass jeder Benutzer ein Laufwerk mounten darf; aber nur der Benutzer, welcher das Laufwerk gemountet hat, darf es auch wieder unmounten. Die Option users erlaubt es hingegen, dass jeder Benutzer, egal ob er das Laufwerk gemountet hat oder nicht, dieses wieder unmounten darf.
  • Detaillierte Yast2-Fehlermeldungen lesen:
    Sämtliche Fehler, die bei der Benutzung von Yast2 auftreten, werden detailliert im Yast2-Logfile mitprotokolliert. Lesen kann man dieses unter Suse Linux mit
    > less /var/log/Yast2/y2log
    
  • NIS-User mit Yast2 verwalten
    Unter Suse kann man über Yast2 nicht nur die lokalen Benutzer, sondern auf dem NIS-Server auch die NIS-Benutzer verwalten. Dazu muß ein NIS-Server konfiguriert und gestartet sein. Jedoch erkennt das Benutzerverwaltungsmodul von Yast2 nicht immer, wenn ein NIS-Server läuft, so dass es die Verwaltung der NIS-Benutzer nicht erlaubt. Einzige Abhilfe in diesem Fall ist mittels
    > /usr/lib/yp/ypinit -m
    
    im Verzeichnis /var/yp den Server manuell neu zu initialisieren. Erst danach erkennt Yast2 wieder, dass ein NIS-Server läuft und erlaubt die NIS-Benutzerverwaltung.
  • RPM-Pakete von Kommandozeile über Yast2 installieren:
    Obwohl es zunächst unsinnig klingen mag, ist es manchmal von Vorteil
    > kdesu /opt/kde3/share/apps/krpmview/setup_temp_source *.rpm
    Dies entspricht der Aktion "Mit Yast installieren", welche man per Rechtsklick auf ein RPM im Kontextmenü des Konqueror findet. Es funktioniert auch mit mehreren RPMs.
  • RPM-Pakete von Kommandozeile ohne Yast2 installieren:
    > rpm -Uhv [paketname].rpm
    
    Die Option -U steht dabei für Upgrade, welches nach der Installation alle älteren installierten Versionen von [paketname] entfernt. -h steht für "hash marks", welches zur Fortschrittsanzeige beim Installieren 50 "hash marks" anzeigt. Die Option -v steht für "verbose" und sorgt u.a. dafür, dass die "hash marks" etwas schöner angezeigt werden.
  • Herausfinden, welche Version eines Pakets installiert ist:
    > rpm -q [paketname] 
    
  • Herausfinden, wohin die Dateien eines Pakets installiert werden:
    > rpm -q -l [paketname] 
    
Kopieren für Fortgeschrittene

Wer jemals ein komplettes Home-Verzeichnis für z.B. Backup-Zwecke mittels cp -R kopiert hat, wird erstaunt feststellen, dass nicht alle Dateien kopiert wurden und auch die Rechte der Dateien eventuell nicht den ursprünglichen Rechten entsprechen. Ein ziemliches Desaster, wenn man diese Kopie für Backup-Zwecke verwenden wollte. Die Lösung dafür ist

> sudo cp -a -T source dest

Die Option -a ist equivalent zu -r -p -d, kopiert also rekursiv, erhält dabei die Rechte und erhält auch Links. Die Option -T behandelt das Ziel dest wie eine Datei, d.h. falls dest noch nicht existiert, wird es angelegt (mehr zu dieser Option unter http://www.gnu.org/software/coreutils) . Eine vergleichbare Lösung ist (siehe superuser.com):

> sudo cp -a source/. dest

Für den Fall, dass man auf einem sehr alten Unix-System arbeitet, das vielleicht nicht alle genannten cp-Optionen unterstützt, gibt es auch noch die Möglichkeit das Quellverzeichnis in eine tar-Datei zu packen und am Zielort wieder zu entpacken (das ganze funktioniert auch über ssh), siehe www.tech-recipes.com. Will man nur versteckte Dateien (.*) kopieren, stößt man mit dem Standardpatternmatching an Grenzen, denn .* gilt auch für ... Auch dabei kann tar helfen, siehe serverfault.com.

Netzwerkinterface unter Suse/Ubuntu konfigurieren

Unter Suse konfiguriert man Netzwerkarten usw. am besten über Yast2. Will man dennoch über die Kommandozeile arbeiten wird man feststellen, dass die unter Debian/Ubuntu verbreitete Konfigurationsdatei /etc/network/interfaces unter Suse nicht existiert (siehe openSUSE-HOWTO) . Unter Suse wird für jedes Netzwerkinterface eine eigene Datei der Form ifcfg-* unter /etc/sysconfig/network/ angelegt. Informationen über das Format dieser Datei gibt es mit man ifcfg und z.B. bei www.fibel.org. Wie man unter Ubuntu eine Netzwerkarte einrichtet wird bei Ubuntu Server Guide und in den Ubuntu ManPages erklärt. Für eine Netzwerkarte mit dynamischer IP-Adresse schreibt man in /etc/network/interfaces:

auto eth0
iface eth0 inet dhc

Für eine Netzwerkarte mit statischer IP-Adresse z.B.:

auto eth0
iface eth0 inet static
address 123.456.10.225
netmask 255.255.255.0
gateway 123.456.10.254
Init-Skripte für Suse Linux schreiben

Init-Skript sind bash-Skripten, die benutzt werden sollten um einen Hintergrund-Dienst (Dämon,Service) zu kontrollieren (starten, stoppen,neustarten). Sie werden auch vom Betriebsystem genutzt um einen Dienst beim Start des System automatisch zu starten. Normalerweise werden sie in /etc/init.d als ausführbare Dateien ohne Suffix (z.B. /etc/init.d/sshd) gespeichert. Mit Suse wird ein Beispiel-Init-Skript mitgeliefert, das als Ausgangspunkt für eigene Init-Skripte dienen kann. Es liegt unter

/etc/init.d/skeleton

Eine ausführliche Anleitung zum Erstellen eigener Init-Skripten findet man bei Novell Developer - Writing_Init_Scripts. Mit

> sudo /sbin/chkconfig -a newservice

kann man einen Dienst beim Betriebssystem registrien, so dass er automatisch gestartet wird. In welchen Runlevels er gestartet wird, wird im Init-Skript definiert. Eine Übersicht über alle Dienste bekommt man mit

> sudo /sbin/chkconfig -l

Mehr über chkconfig steht bei easyLinux - Mit den Dienern reden.

Umgang mit ISO-Images unter Linux

Ein ISO-Image einfach zu dekomprimieren wie unter Windows scheint unter Linux nicht möglich zu sein. Stattdessen muss man als root(!)-User das Image als virtuelles Laufwerk mounten

> mkdir /mnt/iso
> mount -r -t iso9660 -o loop Datei.iso /mnt/iso

Dabei bedeutet -r, dass von diesem Laufwerk nur gelesen werden kann und die Angabe -t iso9660 spezifiziert das genaue Dateisystem, kann aber oft auch weggelassen werden.

Jetzt kann man auch als normaler Benutzer das Iso-Image Verzeichnis z.B. ins aktuelle Verzeichnis kopieren

> cp -v -r /mnt/iso .

Jetzt hat man die Daten vom aktuellen Verzeichnis ausgehend im Unterverzeichnis iso. Von dort aus kann man die Daten weiterverarbeiten oder auch das iso-Verzeichnis anders komprimieren. Allerdings kann man das kopierte Verzeichnis iso nicht unmittelbar löschen, da es von einer (virtuellen) CD kopiert wurde und die Rechte noch einer nichtbeschreibbaren CD entsprechen. Daher muss man erst mit

> chmod -R a+w iso

die Rechte entsprechend anpassen, dann kann man das Verzeichnis wieder löschen mit

> rm -r iso

Um das ISO-Image wieder zu unmounten muss man als root eingeben

> umount /mnt/iso
> rm -r /mnt/iso

Kommt bei umount der Fehler

umount: /mnt/iso: device is busy

so muss man sicherstellen, dass kein anderer Benutzer oder Programm gerade auf das Laufwerk zugreift (z.B. ein Terminal-Fenster, welches gerade auf /mnt/iso verweist). Dies kann man mit dem lsof-Kommando (siehe oben) überprüfen.

Aber eine Frage nach dieser ganzen Prozedur bleibt: Warum nur kann man ein ISO-Image unter Linux nicht einfach wie ein Archiv als normaler Benutzer entpacken? Aber das wäre wahrscheinlich zu einfach.

NFS-Server unter Suse Linux 9.3 einrichten

Ein Network File System (NFS) Server einzurichten ist unter Suse 9.3 nicht schwer. Jedoch kann es einige Probleme mit der Suse Firewall geben die einen viel Zeit kosten können, daher hier diese Kurzanleitung zur NFS-Server-Installation:

  1. Yast2 aufrufen und unter Network Services das NFS-Server-Modul aufrufen.
  2. Den NFS-Server durch anklicken von Start NFS-Server aktivieren und Open Port in Firewall auswählen. Ansonsten funktioniert später garnichts. Dann weiter zum nächsten Dialog gehen.
  3. Im nächsten Dialog muß man nun durch Auswahl von Add directory das per NFS zu verteilende Verzeichnis angeben. Im darauffolgenden Eingabefenster kann man als Host wildcard * übernehmen, aber damit erlaubt man wirklich jedem, dass NFS-Laufwerk zu mounten. Es ist sicherer dies z.B. nur für Rechner des eigenen Subnetzes zu erlauben. Man sollte daher für Host wildcard z.B.
    192.168.0.0/255.255.255.0
    
    eintragen. Als Optionen sollte man
    ro,root_squash,async
    
    setzen. Die Option ro erlaubt dabei nur lesenden Zugriff auf das freigegebene Verzeichnis, root_squash (wörtl. "Wurzel zerquetschen") verhindert, dass jemand mit Rootrechten auf einem fremden Rechner, der das NFS-Laufwerk eingebunden hat, diese Rootrechte auch auf dem NFS-Laufwerk hat und async erlaubt einen schnelleren Zugriff und Datentransfer (ist allerdings etwas anfälliger für Fehler als sync).
  4. Durch Anklicken von Finish wird der NFS-Server gestartet.

Die Clientrechner sollten nun in der Lage sein, dass freigegebene Verzeichnis zu sehen und einzubinden. Oft ist dies jedoch noch nicht der Fall. Dann sollte man zunächst mit Rootrechten vom Client aus überprüfen, ob der Portmapper Daemon auf dem Server läuft:

> rpcinfo -p servername
Dieser Befehl sollte eigentlich eine Liste anzeigen, die so ähnlich aussieht:
program vers proto   port
...
100003    2   udp   2049  nfs
100003    3   udp   2049  nfs
100003    2   tcp   2049  nfs
100003    3   tcp   2049  nfs
...
Passiert jedoch garnichts, so handelt es sich um ein Problem mit der Firewall auf dem Server. Vermutlich wurde Open Port in Firewall vergessen auszuwählen. Wenn stattdessen die Fehlermeldung
RPC: Program not registered
erscheint, so sollte man die Dateien /etc/hosts.allow bzw. /etc/hosts.deny überprüfen. In /etc/hosts.allow sollte man folgende Dienste erlauben, falls man ansonsten in /etc/hosts.deny alle Dienste erst einmal generell verboten hat:
portmap: 192.168.0.0/255.255.255.0 :ALLOW
mountd: 192.168.0.0/255.255.255.0 :ALLOW
lockd: 192.168.0.0/255.255.255.0 :ALLOW
rquotad: 192.168.0.0/255.255.255.0 :ALLOW
statd: 192.168.0.0/255.255.255.0 :ALLOW

Mehr dazu findet man auch in der Linux-NFS-HOWTO Funktioniert der rpcinfo-Befehl jedoch ohne Probleme und der Clientrechner findet die Freigaben immer noch nicht, so hilft es häufig die Suse Firewall auf dem Server ab- und dann wieder anzuschalten. Dann funktioniert seltsamerweise oft alles wieder wie es soll.
Mehr zum Thema NFS findet man abgesehen vom oben erwähnten Linux-NFS-HOWTO auch auf deutsch unter linuxwiki.de.

Subversion (SVN) einrichten

Das Versionskontrollsystem Subversion (SVN) einzurichten lohnt sich nicht nur für Gruppen von Entwicklern sondern auch für den einzelnen Programmierer, denn mit SVN hat man praktisch eine Zeitmaschine (wie es die SVN Entwickler selbst ausdrücken), die es einem erlaubt sämtliche(!) Änderungen (d.h. auch das Überschreiben und Umbenennen von Dateien und Verzeichnissen u.ä.) an einem Projekt transparent zu verfolgen und gegebenenfalls rückgängig zu machen. Wäre jedes Filesystem ein Versionskontrollsystem gäbe es nie mehr Datenverlust durch das unbeabsichtigte Überschreiben von Dateien, vor dem auch Techniken wie die Verwendung von "Trashcans" in modernen Betreibsystemen nicht schützen. Aber es soll hier nicht diskutiert werden, warum es sowas nützliches wieder nicht gibt, sondern die Installation von SVN dargestellt werden.
Die Installation von SVN ist im Prinzip in der ausführliche offiziellen Onlineanleitung zu SVN beschrieben. Jedoch liegt der Schwerpunkt eher auf der Installation im Zusammenhang mit dem WebDAV-Module für Apache. Will man jedoch nicht extra Apache laufen lassen und stattdessen SVN einfach über SSH bedienen sind einige Fallstricke bezüglich Benutzerrechten zu umschiffen. Dies wird recht übersichtlich bei Linux-fuer-alle erklärt und soll hier nochmal zusammengefasst und ergänzt werden:

  1. Zunächst muß man Subversion auf dem Server installieren, auf dem man das Repository (die Ablage für die Dateien, die versionskontrolliert werden sollen) anlegen möchte. Dies macht man am besten mit Yast2.
  2. Dann sollte man eine neue Benutzergruppe (Name z.B. svn) im System anlegen. Alle Benutzer, die später Subversion verwenden wollen, müssen Mitglieder dieser Gruppe werden. Am einfachsten erledigt man das wieder mit Yast2 indem man unter "Security and Users" das Module "Edit and create groups" aufruft (Ob man das "lokal" auf dem Rechner macht, auf dem das Repository liegt, oder "global" auf dem eventuell vorhandenen NIS-Server ist eigentlich egal, aber mit einer globalen Gruppe ist es später leichter, das Repository auf einen anderen Rechner zu verschieben). Nach Aufruf von "Add" (eventuell sollte man vorher unter "Set Filter" "NIS Groups" oder "System Groups" auswählen, damit man später auch die "globalen" Benutzer sieht) gibt man "Group Name" und "Group ID" (diese sollte > 500 sein, andernfalls gibts Probleme) und wählt die zugehörigen Mitglieder aus. Danach kann man das ganze durch Drücken von "Accept" und "Finish" abschließen.
  3. Damit sich die verschiedenen Benutzer nicht gegenseitig aussperren, weil die gesendeten Dateien die falschen Benutzungsrechte haben, muß man auf dem Repository-Server den Befehl /usr/bin/svnserve durch ein Wrapper-Skript ersetzen, welches automatisch die richtigen Rechte für alle empfangenen Dateien setzt. Dazu sollte man den Orginalbefehl umbenennen:
    > mv svnserve svnserv
    
    und stattdessen folgendes Skript anlegen:
    > pico svnserve
    #!/bin/bash
    umask 002            #Everything is allowed for user and the group,
                         #nothing is allowed for others.
    /usr/bin/svnserv $*
    
    Nicht vergessen, dass Skript für alle ausführbar zu machen:
    > chmod a+x svnserve
    
  4. Jetzt muß man das Repository anlegen, z.B. kann man mit Rootrechten ein neues Verzeichnis im Wurzelverzeichnis des Repository-Servers anlegen:
    > cd /
    > mkdir subversion
    
    Will man erlauben, dass auch Benutzer der Gruppe svn neue Repositories innerhalb des Verzeichnises subversion anlegen können, so muß man noch die Gruppenzugehörigkeit und die Schreibrechte dieses Verzeichnisses anpassen:
    > chown root.svn subversion/
    > chmod g+w subversion/
    
    Hat man den letzten Schritt getan, kann man die folgenden mit einem Benutzer aus der Gruppe svn durchfuehren, ansonsten muß man weiter mit Root-Rechten arbeiten.
    > cd subversion
    > mkdir projektname
    
    Das Unterverzeichnis projektname ist nur zur Übersicht, da man sicher mehr als nur ein Projekt mit Subversion verwalten möchte. Dieses Unterverzeichnis muß man nun zu einem Repository erklären (subversion legt dazu dort einige Unterverzeichnisse und Dateien an):
    > svnadmin create --fs-type fsfs projektname
    
    Die Option --fs-type fsfs stellt dabei sicher, dass Subversion als Speichersystem einfach das Filesystem verwendet und nicht die veraltete Berkley Database (DB), die eigentlich nur Nachteile hat (siehe Repository Administration im Online Manual). Ich wundere mich, warum sie immer noch in der Defaulteinstellung verwendet wird.
  5. Nun muß man die Zugriffsrechte auf das Repository so anpassen, dass später alle Mitglieder der angelegten Gruppe svn Zugriff darauf haben:
    > chgrp -R svn projektname
    
    Alle anderen haben im Repository nichts verloren:
    > chmod -R o-rwx projektname
    
    Die Gruppenmitglieder sollen natürlich auch schreiben dürfen:
    > chmod -R g+rw projektname
    
    Um sicherzustellen, dass die Logfiles, welche Subversion anlegt auch problemlos geschrieben werden können ist noch folgende Rechteänderung nötig:
    > chmod g+s projektname/db
    
  6. Nun muss man nur noch die Konfiguration des Repositories etwas anpassen. Dazu sollte man in der Datei /subversion/projektname/conf/svnserve.conf folgendes eintragen:
    [general]            #Diese Zeile darf nicht weggelassen werden.
    anon-access = none
    auth-access = write
    realm = projektname
    
  7. Falls noch nicht geschehen kann man jetzt Subversion mit Yast2 auch auf den Clientrechnern installieren. Von einem Clientrechner aus kann man jetzt, wenn man zur Benutzergruppe svn gehört, das Repository mit Daten füllen:
    svn import dirname svn+ssh://[svnserver]/subversion/projektname/dirname -m "Original Version"
    
    Dabei steht dirname z.B. für das Verzeichnis in dem das Projekt (inklusive Sourcecode, Makefiles, Bilder, Readme usw., Subversion verwaltet alles!) bisher auf dem Clientrechner lag. [svnserver] steht für die Adresse des Servers, auf dem das Repository eingerichtet wurde und mit der Option -m hat man die Möglichkeit kurze Notizen zu dem gerade eingerichtet Projekt zu geben. Noch ein Tipp zum Schluß: Falls aus unerfindlichen Gründen beim Datenimport plötzlich vim startet, so kann man diesen mit Eingabe von :quit[[Enter]] beenden. Die darauf folgende Frage muß man dann mit c(ontinue) beantworten. Dann startet der Datenimport aber wirklich.