pimtools quickstart DE
======================
Frank Bergmann
:Author Initials: FWB

Diese Schnellstartanleitung zeigt die Anwendung der pimtools und gibt die
wichtigsten Infos.


chownu
------

`chownu` steht für "chown user" oder "chown μ" ("μ" wie "klein"). Zweck des
Tools ist, den Eigentümer von Dateien zu ändern, auch wenn man keine root-Rechte
hat. In der praktischen Anwendung wird es beim Deployment verwendet, wenn z.B.
der User `puppet` Dateien von `pim1` wieder sich selbst zuweisen will. Die
Anwendung ist ähnlich `chown` und wird von der eingebauten Hilfe erklärt:

  $ tools/chownu -h
  usage:
    chownu [option(s)] user file [file(s)]
  options:
    -R             directory recursive mode
    -d max_depth   specify the maximum recursion depth (default: 50)
  change the owner of one or more files, uid and file owners below 500 are ignored

Damit das Ändern des Owners funktioniert, *benötigt `chownu` die
Capability CAP_CHOWN*. Die weist man `chownu` mittels `setcap` zu:

  setcap cap_chown=ep chownu

Zur Sicherheit macht `chownu` keine Änderungen an Dateien, die "root"
gehören. Es startet auch nicht, wenn der beim Aufruf angegebene neue
Eigentümer die UID 0 hat. Diese Einschränkung ist im Code verankert.
Zusätzlich kann bei der Übersetzung noch ein weiteres Limit angegeben
werden: Als Default ist MINUID auf 500 gesetzt. Damit muss der angegebene
User eine UID größer oder gleich 500 haben und Dateien einen Eigentümer mit
UID >= 500. Dieser Wert kann mit `make menuconfig` konfiguriert werden.

Der beim Aufruf angegebene Account muss in der `/etc/passwd` vorhanden sein.


check-nfs
---------

Da das Systemmonitoring des Providers keine Prüfung der NFS-Mounts auf
tatsächliche Verfügbarkeit beinhaltet, muss dies auf Applikationsebene
erfolgen. `check-nfs` ist ein dafür geeignetes Hilfsmittel. Es versucht
eine Datei mittels `open()` zu öffnen. Wenn dies gelingt, beendet es sich
mit 0 als Rückgabewert. Wenn der Zugriff per `open()` aber blockt, weil
z.B. der NFS-Server, auf dem die Datei liegt, plötzlich nicht mehr
verfügbar ist, dann beendet sich das Tool nach 5 Sekunden mit einem
Rückgabewert von 1.

Da das Öffnen mittels `O_NONBLOCK` hier nicht angewendet werden kann und
andere Methoden auch Nachteile haben, wird intern ein Kindprozess
verwendet, der nach den 5 Sekunden per `kill()` beendet wird.


user-wrapper/shell-wrapper
--------------------------

Der Wrapper dient dazu, Programme unter einem anderen User-Account
ausführen zu lassen. Dazu muss das setuid-Bit gesetzt sein und die
Ausführung auf die Gruppe beschränkt sein:

  [frank@muffin tools]$ ls -l user-wrapper-pim1
  -rwsr-x---. 1 pim1 puppet 129 Jul  4 10:39 user-wrapper-pim1

In obigem Beispiel dürfen Mitglieder der Gruppe `puppet` (und `pim1` selbst)
den Wrapper ausführen. Er wird dann als User `pim1` ausgeführt. Dabei wird
sowohl die EUID (durch das setuid-Bit) passend gesetzt, als auch die UID.
Dadurch ist es beispielsweise auch möglich, Shells zu nutzen, die aus
Sicherheitsgründen nicht mit einem einfachen Start per setuid-Bit
funktionieren (da EUID != UID).

Das zu startende Programm muss mit vollem Pfad angegeben werden. Optionen und
Argumente werden einfach nach dem Programm aufgeführt. Beispiel:

  user-wrapper-pim1 /bin/bash -c id

