%
% nfs-server.tex
% Last Update: $Id$
%
%%%%%%%%%%%%%%%%%%%%%%%%%%% Kapitel NFS_Sserver %%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\chapter{Das NFS-Server-Paket}
\index{nfs-server}

\section{Die Einleitung}

    Dieser Paket erm"oglicht es Verzeichnisse freizugeben, sodass von anderen
    Rechnern auf diese zugegriffen werden kann. Verwendung findet hierbei das
    Network File System Protokoll, Version 3 oder Version 4


\section{Die Funktionen}

    Das NFS-Server-Paket besteht aus folgenden Komponenten:

    \begin{itemize}
        \item \link{https://kernel.org/pub/linux/utils/nfs-utils}{NFS-Utils}
        - stellt die rpc.Daemons zur Verf"ugung.\\
    \end{itemize}


\section{Die Voraussetzungen}

    Ein lauff"ahiger \eisfair-Server ;-$)$


\section{Die Installation}

    Das nfs-server-Paket wird "uber das Setup-Men"u installiert. Wird eine
    "altere Paketversion vorgefunden, so wird diese deinstalliert bevor
    die neuen Programmdateien installiert werden.


\section{Das Men"u im Setup-Programm}

    Das Men"u im Setup-Programm ist wie folgt aufgebaut:

    \mbox{}

    \begin{tabular}{llll}
    & 1. &  System administration \\
    \end{tabular}
\eline
    \begin{tabular}{p{1cm}llll}
    & x. & Network administration
    \end{tabular}
\eline
    \begin{tabular}{p{2cm}llll}
    & x. & NFS-Server Service
    \end{tabular}
\eline
    \begin{tabular}{p{3cm}llll}
    & 1. &  View documentation \\
    & 2. &  Edit configuration \\
    & 3. &  Advanced configuration file handling \\
    & 4. &  Show status \\
    & 5. &  Stop service \\
    & 6. &  Start service \\
    & 7. &  Show list of NFS shares \\
    & 8. &  Show list of active NFS server mounts \\
    & 9. &  View log file \\
    \end{tabular}

    \mbox{}


\section{Die "Anderung der Konfiguration}

    Die Konfiguration kann "uber den Men"upunkt \glqq{}Edit configuration\grqq{}
    ge"andert werden.
    Nachdem der Editor beendet wurde wird abgefragt, ob die Konfiguration
    aktiviert werden soll. Wird dies best"atigt, werden "uber ein Skript die
    modifizierten "Anderungen umgehend wirksam gemacht.


\section{Die Konfigurationsdatei}

    In der Konfigurationsdatei, die "uber das Men"u zug"anglich ist, sind
    folgende Parameter vorhanden; wer sie von Hand editieren will findet
    sie unter \\
    \texttt{/etc/config.d/nfs-server}

\section{Die Parameter}

\begin{description}

\config{START\_NFS\_SERVER}
{START\_NFS\_SERVER}
{STARTNFSSERVER}
{
    F"ur die Aktivierung des NFS-Servers muss dieser Parameter lediglich
    auf den Wert 'yes' gestellt werden. Die Einstellung 'no' deaktiviert
    den NFS-Server.

    G"ultige Werte: yes, no

    Standardeinstellung: \texttt{START\_NFS\_SERVER='no'}
}


\config{NFS\_SERVER\_SUPPORT\_NFS3}
{NFS\_SERVER\_SUPPORT\_NFS3}
{NFSSERVERSUPPORTNFS3}
{
    Wird dieser Parameter auf den Wert 'yes' gesetzt, so wird die
    NFSv3-Unterst"utzung aktiviert, 'no' deaktiviert sie.

    G"ultige Werte: yes, no

    Standardeinstellung: \texttt{NFS\_SERVER\_SUPPORT\_NFS3='yes'}
}


\config{NFS\_SERVER\_SUPPORT\_NFS4}
{NFS\_SERVER\_SUPPORT\_NFS4}
{NFSSERVERSUPPORTNFS4}
{
    Wird dieser Parameter auf den Wert 'yes' gesetzt, so wird die
    NFSv4-Unterst"utzung aktiviert, 'no' deaktiviert sie.

    G"ultige Werte: yes, no

    Standardeinstellung: \texttt{NFS\_SERVER\_SUPPORT\_NFS4='yes'}
}

\end{description}

\subsubsection{NFS4 Stammverzeichnis}

    Zuerst erfolgen die Einstellungen f"ur das NFS4 Stammverzeichnis
    (BASE\_SHARE), erforderlich bei: \texttt{NFS\_SERVER\_SUPPORT\_NFS4='yes'}


\begin{description}

\config{NFS\_SERVER\_BASE\_SHARE\_HOSTS\_x\_N}
{NFS\_SERVER\_BASE\_SHARE\_HOSTS\_x\_N}
{NFSSERVERBASESHAREHOSTSxN}
{
    "Uber diesen Parameter wird die Anzahl der NFS-Base Freigaben festgelegt.

    G"ultige Werte: Zahl

    Standardeinstellung: \texttt{NFS\_SERVER\_BASE\_SHARE\_N='0'}
}


\config{NFS\_SERVER\_BASE\_SHARE\_HOSTS\_x\_HOST}
{NFS\_SERVER\_BASE\_SHARE\_HOSTS\_x\_HOST}
{NFSSERVERBASESHAREHOSTSxHOST}
{
    "Uber diesen Parameter wird angegeben welcher Host bzw. aus welchem
    Netzwerk auf das BASE\_SHARE Verzeichnis zugegriffen werden darf.

    G"ultige Werte: IP-Adresse oder Netzwerkadresse

    Beispiel:

    \texttt{NFS\_SERVER\_BASE\_SHARE\_HOSTS\_N='2'\\
            NFS\_SERVER\_BASE\_SHARE\_HOSTS\_1\_HOST='192.168.6.10'\\
            NFS\_SERVER\_BASE\_SHARE\_HOSTS\_2\_HOST='192.168.7.0/24'}
}


\config{NFS\_SERVER\_BASE\_SHARE\_HOSTS\_x\_RW}
{NFS\_SERVER\_BASE\_SHARE\_HOSTS\_x\_RW}
{NFSSERVERBASESHAREHOSTSxRW}
{
    Dieser Parameter legt fest, ob auf das freigegebene Verzeichnis schreibend
    und lesend zugegriffen werden darf. Wird der Parameter auf 'no' gesetzt,
    so ist nur lesender Zugriff erlaubt.

    G"ultige Werte: yes, no

    Standardeinstellung: \texttt{NFS\_SERVER\_BASE\_SHARE\_HOSTS\_x\_RW='no'}
}


\config{NFS\_SERVER\_BASE\_SHARE\_HOSTS\_x\_ANONUSER}
{NFS\_SERVER\_BASE\_SHARE\_HOSTS\_x\_ANONUSER}
{NFSSERVERBASESHAREHOSTSxANONUSER}
{
    "Uber diesen Parameter kann ein System-Accountname angegeben werden,
    mit dessen Zugriffsrechten auf das freigegebene Verzeichnis zugegriffen
    werden soll. Die individuellen Rechte des zugreifenden Anwenders werden
    damit "uberschrieben.

    G"ultige Werte: System-Accountname

    Standardeinstellung: \texttt{NFS\_SERVER\_BASE\_SHARE\_HOSTS\_x\_ANONUSER='{}'}
}


\config{NFS\_SERVER\_BASE\_SHARE\_HOSTS\_x\_ANONGROUP}
{NFS\_SERVER\_BASE\_SHARE\_HOSTS\_x\_ANONGROUP}
{NFSSERVERBASESHAREHOSTSxANONGROUP}
{
    "Uber diesen Parameter kann ein System-Gruppenname angegeben werden,
    mit dessen Zugriffsrechten auf das freigegebene Verzeichnis zugegriffen
    werden soll. Die individuellen Rechte des zugreifenden Anwenders werden
    damit "uberschrieben.

    G"ultige Werte: System-Gruppenname

    Standardeinstellung: \texttt{NFS\_SERVER\_BASE\_SHARE\_HOSTS\_x\_ANONGROUP='{}'}
}


\config{NFS\_SERVER\_BASE\_SHARE\_HOSTS\_x\_ROOT\_SQUASH}
{NFS\_SERVER\_BASE\_SHARE\_HOSTS\_x\_ROOT\_SQUASH}
{NFSSERVERBASESHAREHOSTSxROOTSQUASH}
{
    Normalerweise ist es nicht erw"unscht, dass ein root-Benutzer von einem
    Client-Rechner ebenfalls root-Rechte beim Zugriff auf das freigegebene
    Verzeichnis erh"alt. Standardm"a"sig werden deshalb die NFS-Zugriffe mit
    den Zugriffsrechten des nobody-Benutzer durchgef"uhrt. Wird dieser
    Parameter auf 'no' gesetzt, so wird diese Sicherheitsfunktion
    deaktiviert.

    G"ultige Werte: yes, no

    Standardeinstellung: \texttt{NFS\_SERVER\_BASE\_SHARE\_HOSTS\_x\_ROOT\_SQUASH='yes'}
}


\config{NFS\_SERVER\_BASE\_SHARE\_HOSTS\_x\_ALL\_SQUASH}
{NFS\_SERVER\_BASE\_SHARE\_HOSTS\_x\_ALL\_SQUASH}
{NFSSERVERSHAREHOSTSxALLSQUASH}
{
    Normalerweise ist es erw"unscht, dass ein Benutzer von einem Client-Rechner
    mit seinen eigenen Zugriffsrechten auf das freigegebene Verzeichnis
    Zugriff erh"alt. Wird dieser Parameter auf 'yes' gesetzt, so wird diese
    Sicherheitsfunktion aktiviert und alle Zugriffe erfolgen mit den
    Zugriffsrechten des nobody-Benutzers.

    G"ultige Werte: yes, no

    Standardeinstellung: \texttt{NFS\_SERVER\_BASE\_SHARE\_HOSTS\_x\_ALL\_SQUASH='no'}
}


\config{NFS\_SERVER\_BASE\_SHARE\_HOSTS\_x\_OPTION}
{NFS\_SERVER\_BASE\_SHARE\_HOSTS\_x\_OPTION}
{NFSSERVERBASESHAREHOSTSxOPTION}
{
    Optional: "Uber diesen Parameter k"onnen zus"atzliche Optionen
    angegeben werden, die beim das Verhalten einer Freigabe beeinflussen.
    Wird z.B. 'insecure' angegeben so werden auch NFS-Verbindungen
    auf Ports gr"o"ser als 1024 entgegen genommen (OSX verlangt dies z.B.)

    G"ultige Werte: Zul"assige Optionen durch Komma getrennt

    Beispiel: \texttt{NFS\_SERVER\_BASE\_SHARE\_HOSTS\_x\_OPTION='insecure'}
}

\end{description}


\subsubsection{Freigaben}

    Hier erfolgen dann die Einstellungen f"ur die einzelnen Freigaben


\begin{description}

\config{NFS\_SERVER\_SHARE\_N}
{NFS\_SERVER\_SHARE\_N}
{NFSSERVERSHAREN}
{
    "Uber diesen Parameter wird die Anzahl der NFS-Freigaben festgelegt.

    G"ultige Werte: Zahl

    Standardeinstellung: \texttt{NFS\_SERVER\_SHARE\_N='0'}
}


\config{NFS\_SERVER\_SHARE\_x\_NAME}
{NFS\_SERVER\_SHARE\_x\_NAME}
{NFSSERVERSHARExNAME}
{
    An dieser Stelle kann eine Beschreibung hinterlegt werden,
    z. B. welcher Host oder irgend etwas anderes.
    NFS-Server wertet diesen Parameter nicht aus.

    G"ultige Werte: alles

    Standardeinstellung: \texttt{NFS\_SERVER\_SHARE\_x\_NAME='{}'}
}


\config{NFS\_SERVER\_SHARE\_x\_ACTIVE}
{NFS\_SERVER\_SHARE\_x\_ACTIVE}
{NFSSERVERSHARExACTIVE}
{
    Wird dieser Parameter auf den Wert 'yes' gesetzt, so wird die
    zugeh"orige NFS-Freigabe aktiviert, 'no' deaktiviert sie.

    G"ultige Werte: yes, no

    Standardeinstellung: \texttt{NFS\_SERVER\_SHARE\_x\_ACTIVE='no'}
}


\config{NFS\_SERVER\_SHARE\_x\_PATH}
{NFS\_SERVER\_SHARE\_x\_PATH}
{NFSSERVERSHARExPATH}
{
    "Uber diesen Parameter wird das Verzeichnis angegeben welches "uber
    eine NFS-Freigabe zur Verf"ugung gestellt werden soll.

    G"ultige Werte: Pfadangabe

    Beispiel: \texttt{NFS\_SERVER\_SHARE\_x\_PATH='/public'}
}


\config{NFS\_SERVER\_SHARE\_x\_NFS4}
{NFS\_SERVER\_SHARE\_x\_NFS4}
{NFSSERVERSHARExNFS4}
{
    "Uber diesen Parameter wird die NFS4-Freigabe eingeschaltet.

    G"ultige Werte: yes, no

    Standardeinstellung: \texttt{NFS\_SERVER\_SHARE\_x\_NFS4='no'}
}


\config{NFS\_SERVER\_SHARE\_x\_NFS4\_NAME}
{NFS\_SERVER\_SHARE\_x\_NFS4\_NAME}
{NFSSERVERSHARExNFS4NAME}
{
    "Uber diesen Parameter wird ein NFSv4-Freigabename festgelegt, "uber
    welchen auf die freigegebenen Daten zugegriffen werden kann.

    G"ultige Werte: Freigabename

    Beispiel: \texttt{NFS\_SERVER\_SHARE\_x\_NFS4\_NAME='my-public-dir'}
}


\config{NFS\_SERVER\_SHARE\_x\_HOSTS\_N}
{NFS\_SERVER\_SHARE\_x\_HOSTS\_N}
{NFSSERVERSHARExHOSTSN}
{
    "Uber diesen Parameter wird die Anzahl der individuell konfigurierten
    Hosts bzw. Netzwerke festgelegt.

    G"ultige Werte: Zahl

    Standardeinstellung: \texttt{NFS\_SERVER\_SHARE\_x\_HOSTS\_N='0'}
}

\config{NFS\_SERVER\_SHARE\_x\_HOSTS\_x\_HOST}
{NFS\_SERVER\_SHARE\_x\_HOSTS\_x\_HOST}
{NFSSERVERSHARExHOSTSxHOST}
{
    "Uber diesen Parameter wird angegeben welcher Host bzw. aus welchem
    Netzwerk auf das "uber den Parameter \jump{NFSSERVERSHARExPATH}{NFS\_SERVER\_SHARE\_x\_PATH}
    freigegebene Verzeichnis zugegriffen werden darf.

    G"ultige Werte: IP-Adresse oder Netzwerkadresse

    Beispiel:

    \texttt{NFS\_SERVER\_SHARE\_1\_HOSTS\_N='2'\\
            NFS\_SERVER\_SHARE\_1\_HOSTS\_1\_HOST='192.168.6.10'\\
            NFS\_SERVER\_SHARE\_1\_HOSTS\_2\_HOST='192.168.7.0/24'}
}


\config{NFS\_SERVER\_SHARE\_x\_HOSTS\_x\_RW}
{NFS\_SERVER\_SHARE\_x\_HOSTS\_x\_RW}
{NFSSERVERSHARExHOSTSxRW}
{
    Dieser Parameter legt fest, ob auf das angegebene Verzeichnis schreibend
    und lesend zugegriffen werden darf. Wird der Parameter auf 'no' gesetzt,
    so ist nur lesender Zugriff erlaubt.

    G"ultige Werte: yes, no

    Standardeinstellung: \texttt{NFS\_SERVER\_SHARE\_x\_HOSTS\_x\_RW='no'}
}


\config{NFS\_SERVER\_SHARE\_x\_HOSTS\_x\_ANONUSER}
{NFS\_SERVER\_SHARE\_x\_HOSTS\_x\_ANONUSER}
{NFSSERVERSHARExHOSTSxANONUSER}
{
    "Uber diesen Parameter kann ein System-Accountname angegeben werden,
    mit dessen Zugriffsrechten auf das freigegebene Verzeichnis zugegriffen
    werden soll. Die individuellen Rechte des zugreifenden Anwenders werden
    damit "uberschrieben.

    G"ultige Werte: System-Accountname

    Standardeinstellung: \texttt{NFS\_SERVER\_SHARE\_x\_HOSTS\_x\_ANONUSER='{}'}
}


\config{NFS\_SERVER\_SHARE\_x\_HOSTS\_x\_ANONGROUP}
{NFS\_SERVER\_SHARE\_x\_HOSTS\_x\_ANONGROUP}
{NFSSERVERSHARExHOSTSxANONGROUP}
{
    "Uber diesen Parameter kann ein System-Gruppenname angegeben werden,
    mit dessen Zugriffsrechten auf das freigegebene Verzeichnis zugegriffen
    werden soll. Die individuellen Rechte des zugreifenden Anwenders werden
    damit "uberschrieben.

    G"ultige Werte: System-Gruppenname

    Standardeinstellung: \texttt{NFS\_SERVER\_SHARE\_x\_HOSTS\_x\_ANONGROUP='{}'}
}


\config{NFS\_SERVER\_SHARE\_x\_HOSTS\_x\_ROOT\_SQUASH}
{NFS\_SERVER\_SHARE\_x\_HOSTS\_x\_ROOT\_SQUASH}
{NFSSERVERSHARExHOSTSxROOTSQUASH}
{
    Normalerweise ist es nicht erw"unscht, dass ein root-Benutzer von einem
    Client-Rechner ebenfalls root-Rechte beim Zugriff auf das freigegebene
    Verzeichnis erh"alt. Standardm"a"sig werden deshalb die NFS-Zugriffe mit
    den Zugriffsrechten des nobody-Benutzer durchgef"uhrt. Wird dieser
    Parameter auf 'no' gesetzt, so wird diese Sicherheitsfunktion
    deaktiviert.

    G"ultige Werte: yes, no

    Standardeinstellung: \texttt{NFS\_SERVER\_SHARE\_x\_HOSTS\_x\_ROOT\_SQUASH='yes'}
}


\config{NFS\_SERVER\_SHARE\_x\_HOSTS\_x\_ALL\_SQUASH}
{NFS\_SERVER\_SHARE\_x\_HOSTS\_x\_ALL\_SQUASH}
{NFSSERVERSHARExHOSTSxALLSQUASH}
{
    Normalerweise ist es erw"unscht, dass ein Benutzer von einem Client-Rechner
    mit seinen eigenen Zugriffsrechten auf das freigegebene Verzeichnis
    Zugriff erh"alt. Wird dieser Parameter auf 'yes' gesetzt, so wird diese
    Sicherheitsfunktion aktiviert und alle Zugriffe erfolgen mit den
    Zugriffsrechten des nobody-Benutzers.

    G"ultige Werte: yes, no

    Standardeinstellung: \texttt{NFS\_SERVER\_SHARE\_x\_HOSTS\_x\_ALL\_SQUASH='no'}
}


\config{NFS\_SERVER\_SHARE\_x\_HOSTS\_x\_OPTION}
{NFS\_SERVER\_SHARE\_x\_HOSTS\_x\_OPTION}
{NFSSERVERSHARExHOSTSxOPTION}
{
    Optional: "Uber diesen Parameter k"onnen zus"atzliche Optionen
    angegeben werden, die beim das Verhalten einer Freigabe beeinflussen.
    Wird z.B. 'insecure' angegeben so werden auch NFS-Verbindungen
    auf Ports gr"o"ser als 1024 entgegen genommen (OSX verlangt dies z.B.)

    G"ultige Werte: Zul"assige Optionen durch Komma getrennt

    Beispiel: \texttt{NFS\_SERVER\_SHARE\_x\_HOSTS\_x\_OPTION='insecure'}
}

\end{description}

\section{Verschiedenes}

\begin{description}

\config{NFS Version 4-Freigaben}
{NFS Version 4-Freigaben}
{NFSVersion4-Freigaben}
{
    NFS Version 4-Verzeichnisfreigaben unterscheiden sich grunds"atzlich
    von den bisher bekannten NFS-Freigaben, da nun nicht mehr direkt
    Verzeichnisse f"ur den Zugriff freigegeben werden, sondern nur noch
    Verzeichnisse in einer virtuellen Verzeichnisstruktur. Die
    freizugebenden Verzeichnisse werden dazu vom NFS-Server-Paket in diese
    Verzeichnisstruktur eingeh"angt.

    Beispiel:

    Es sollen die folgenden Verzeichnisse freigegeben werden:

\begin{verbatim}
/path/to/share-1
/path/to/share-2
\end{verbatim}

    Im ersten Schritt definiert man dazu die NFSv4-Stammfreigabe

    \texttt{NFS\_SERVER\_SUPPORT\_NFS4='yes'\\
                \\
            NFS\_SERVER\_BASE\_SHARE\_1\_HOSTS\_N='1'\\
            NFS\_SERVER\_BASE\_SHARE\_1\_HOSTS\_1\_HOST='192.168.6.0/24'\\
            NFS\_SERVER\_BASE\_SHARE\_1\_HOSTS\_1\_RW='yes'\\
            NFS\_SERVER\_BASE\_SHARE\_1\_HOSTS\_1\_ANONUSER='{}'\\
            NFS\_SERVER\_BASE\_SHARE\_1\_HOSTS\_1\_ANONGROUP='{}'\\
            NFS\_SERVER\_BASE\_SHARE\_1\_HOSTS\_1\_ROOT\_SQUASH='no'\\
            NFS\_SERVER\_BASE\_SHARE\_1\_HOSTS\_1\_ALL\_SQUASH='no'\\
            NFS\_SERVER\_BASE\_SHARE\_1\_HOSTS\_1\_OPTION='{}'}


    Im zweiten Schrittr definiert man dann die NFSv4-Freigabe


    \texttt{NFS\_SERVER\_SHARE\_1\_NAME='{}'\\
            NFS\_SERVER\_SHARE\_1\_ACTIVE='yes'\\
            NFS\_SERVER\_SHARE\_1\_PATH='/path/to/share-1'\\
            NFS\_SERVER\_SHARE\_1\_NFS4='yes'\\
            NFS\_SERVER\_SHARE\_1\_NFS4\_NAME='my-share-1'\\
            NFS\_SERVER\_SHARE\_1\_HOSTS\_N='1'\\
            NFS\_SERVER\_SHARE\_1\_HOSTS\_1\_HOST='192.168.6.0/24'\\
            NFS\_SERVER\_SHARE\_1\_HOSTS\_1\_RW='yes'\\
            NFS\_SERVER\_SHARE\_1\_HOSTS\_1\_ANONUSER='{}'\\
            NFS\_SERVER\_SHARE\_1\_HOSTS\_1\_ANONGROUP='{}'\\
            NFS\_SERVER\_SHARE\_1\_HOSTS\_1\_ROOT\_SQUASH='no'\\
            NFS\_SERVER\_SHARE\_1\_HOSTS\_1\_ALL\_SQUASH='no'\\
            NFS\_SERVER\_SHARE\_1\_HOSTS\_1\_OPTION='insecure,wdelay,nohide'}



    Falls nun mittels des nfs-client-Paketes von einem anderen Server
    auf die definierten Freigaben zugegriffen werden soll, m"usste die
    Konfiguration etwa wie folgt aussehen:

    \texttt{NFS\_CLIENT\_MOUNT\_1\_NAME='{}'\\
            NFS\_CLIENT\_MOUNT\_1\_ACTIVE='yes'\\
            NFS\_CLIENT\_MOUNT\_1\_REMOTE\_HOST='host name or ip address of NFSv4 server'\\
            NFS\_CLIENT\_MOUNT\_1\_REMOTE\_DIRECTORY='/my-share-1'\\
            NFS\_CLIENT\_MOUNT\_1\_TYPE='nfs4'\\
            NFS\_CLIENT\_MOUNT\_1\_LOCAL\_DIRECTORY='/nfs/my-share-1'\\
            NFS\_CLIENT\_MOUNT\_1\_OPTION='proto=tcp,fg,hard,intr,timeo=7,retrans=4,retry=3,actimeo=3,sec=sys'}
}

\end{description}
