nfs
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende Überarbeitung | |||
| nfs [2019-09-24 12:00:11] – [Konfiguration] manfred | nfs [2019-09-24 12:00:37] (aktuell) – [Konfiguration] manfred | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== NFS ====== | ||
| + | |||
| + | |||
| + | ===== Allgemein ===== | ||
| + | |||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[https:// | ||
| + | |||
| + | Mit Kerberos ist NFSv4 sicherer als NFSv3 und auch als SMB/CIFS. | ||
| + | Ohne Kerberos (AUTH_SYS => sec=sys) ist NFSv4 genauso unsicher wie NFSv3, | ||
| + | denn die Authentifizierung basiert dann weiterhin auf der IP-Adresse des Clients | ||
| + | und der UID/GID des verwendeten Users. | ||
| + | |||
| + | Einziger Vorteil sind die neu hinzugekommenen ACL's in NFSv4, aber die benutzt ja nicht jeder. | ||
| + | |||
| + | |||
| + | ==== Server (nfsmaster) ==== | ||
| + | |||
| + | # nfsstat | ||
| + | Server rpc stats: | ||
| + | calls badcalls | ||
| + | 31 | ||
| + | | ||
| + | Server nfs v3: | ||
| + | null | ||
| + | 6 21% 6 21% 0 0% 3 10% 3 10% 0 | ||
| + | read | ||
| + | 0 0% 0 0% 0 0% 0 0% 0 0% 0 | ||
| + | remove | ||
| + | 0 0% 0 0% 0 0% 0 0% 0 0% 3 10% | ||
| + | fsstat | ||
| + | 0 0% 7 25% 0 0% 0 | ||
| + | | ||
| + | Client rpc stats: | ||
| + | calls retrans | ||
| + | 0 0 0 | ||
| + | |||
| + | der RPC-Portmapper muss laufen: | ||
| + | # rpcinfo -p | ||
| + | | ||
| + | 100000 | ||
| + | 100000 | ||
| + | 100024 | ||
| + | 100024 | ||
| + | 100021 | ||
| + | 100021 | ||
| + | 100021 | ||
| + | 100021 | ||
| + | 100021 | ||
| + | 100021 | ||
| + | 100003 | ||
| + | 100003 | ||
| + | 100003 | ||
| + | 100003 | ||
| + | 100003 | ||
| + | 100003 | ||
| + | 100005 | ||
| + | 100005 | ||
| + | 100005 | ||
| + | 100005 | ||
| + | 100005 | ||
| + | 100005 | ||
| + | |||
| + | so sieht man was exportiert wird: | ||
| + | # exportfs | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | |||
| + | reexportieren: | ||
| + | # exportfs -r | ||
| + | |||
| + | alle Exports aus "/ | ||
| + | # exportfs -ua | ||
| + | |||
| + | exportieren auf der Kommandozeile: | ||
| + | # exportfs -o async mensch:/tmp | ||
| + | |||
| + | Export wieder aufheben: | ||
| + | # exportfs -u mensch:/tmp | ||
| + | |||
| + | |||
| + | === / | ||
| + | |||
| + | # / | ||
| + | # to NFS clients. | ||
| + | # | ||
| + | # Example for NFSv2 and NFSv3: | ||
| + | # / | ||
| + | # | ||
| + | # Example for NFSv4: | ||
| + | # / | ||
| + | # / | ||
| + | # | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | |||
| + | ^ Parameter in Klammern ^ Bedeutung ^ | ||
| + | | ro | nur Lesen | | ||
| + | | rw | Lesen und Schreiben | ||
| + | | async | Asynchroner Datentransfer | | ||
| + | | secure | nur Ports bis 1024 verwenden | | ||
| + | | insecure | Ports oberhalb 1024 auch verwenden | | ||
| + | | no_root_squash | Bindet man per NFS Verzeichnisse ein, die auf dem Server dem User root gehören, werden diese auf den User nobody gemapped und man kann diese nicht modifizieren. Um dieses Sicherheitsfeature zu umgehen, dient der Parameter no_root_squash (weitere Info mit man 5 exports) | ||
| + | | nohide |Wenn unterhalb eines exportierten Verzeichnisses (z.B. /home/user auf /dev/hda1) ein weiteres Dateisystem eingebunden wurde (z.B. /dev/hdb1 in / | ||
| + | | subtree_check | Wenn nur einzelne Verzeichnisse eines Dateisystems freigegeben wurden, wird hiermit überprüft ob eine vom Client angeforderte Datei in diesen Verzeichnissen des Dateisystems ist. Wurde das komplette Dateisystem freigegeben, | ||
| + | |||
| + | |||
| + | ==== Client (mensch) ==== | ||
| + | |||
| + | # tracepath nfsmaster | ||
| + | |||
| + | # nfsstat | ||
| + | Client rpc stats: | ||
| + | calls retrans | ||
| + | 0 0 0 | ||
| + | |||
| + | der RPC-Portmapper muss laufen: | ||
| + | # rpcinfo -p nfsmaster | ||
| + | | ||
| + | 100000 | ||
| + | 100000 | ||
| + | 100024 | ||
| + | 100024 | ||
| + | 100021 | ||
| + | 100021 | ||
| + | 100021 | ||
| + | 100021 | ||
| + | 100021 | ||
| + | 100021 | ||
| + | 100003 | ||
| + | 100003 | ||
| + | 100003 | ||
| + | 100003 | ||
| + | 100003 | ||
| + | 100003 | ||
| + | 100005 | ||
| + | 100005 | ||
| + | 100005 | ||
| + | 100005 | ||
| + | 100005 | ||
| + | 100005 | ||
| + | |||
| + | so sieht man was exportiert wird: | ||
| + | # showmount -e nfsmaster | ||
| + | Export list for nfsmaster: | ||
| + | /home/welt * | ||
| + | /home/erde mensch | ||
| + | /home/mond 192.168.0.0/ | ||
| + | |||
| + | mounten: | ||
| + | # mount -t nfs -v nfsmaster:/ | ||
| + | |||
| + | |||
| + | === /etc/fstab === | ||
| + | |||
| + | nfsmaster:/ | ||
| + | |||
| + | ^ Parameter ^ Bedeutung ^ | ||
| + | | ro | nur Lesen | | ||
| + | | rw | Lesen und Schreiben | ||
| + | | hard | Bei Unterbrechungen ohne Timeout warten bis der Server wieder normal erreichbar ist | | ||
| + | | soft | Bei Unterbrechungen sofort einen Timeout machen (verhindert ein Einfrieren des Dateimanagers) | | ||
| + | | timeo=< | ||
| + | | bg | Bei einem Timeout, wird der mount im Hintergrund weiter versucht. Ist z.B. bei einem Laptop, dass im Heimnetz automatisch einen NFS-Server mounten soll, nützlich. | | ||
| + | | intr | Erlaubt einem wartenden Programm bei Bedarf dennoch zu unterbrechen/ | ||
| + | | nolock | Deaktiviert das Sperren von Dateien. Wird gelegentlich für die Verbindung zu alten NFS-Servern benötigt | | ||
| + | | rsize=8192, | ||
| + | |||
| + | |||
| + | ===== FreeBSD ===== | ||
| + | |||
| + | siehe: **man mount_nfs** | ||
| + | |||
| + | * [[http:// | ||
| + | |||
| + | | ||
| + | ==== Server ==== | ||
| + | |||
| + | Im Kernel muss die Option //options NFSD// aktiviert worden sein, | ||
| + | die Option //options NFSSERVER// darf nicht aktiviert sein! | ||
| + | |||
| + | Um die ACL's nutzen zu können, müssen die Kernel-Optionen //options NFSCL// und //options NFSD// aktiviert werden. | ||
| + | | ||
| + | # vi / | ||
| + | ### nur lesend | ||
| + | ### Das ganze Klasse-C-Netz kann auf das CDROM zugreifen. | ||
| + | / | ||
| + | ### jeder kann NUR mit seiner UID auf das Verzeichnis zugreifen | ||
| + | ### Nur die Rechner mit den genannten IPs koennen auf das | ||
| + | ### Home-Verzeichnis zugreifen. | ||
| + | /home | ||
| + | ### jeder hat in diesem Verzeichnis die UID " | ||
| + | ### Nur die drei Rechner " | ||
| + | ### auf das Verzeichnis zugreifen. | ||
| + | /public -alldirs -mapall=0: | ||
| + | Nach jeder Aendereung in / | ||
| + | |||
| + | Ich glaube, es muss auch noch in der Datei /// | ||
| + | |||
| + | erstmal sollte die besagte Stelle so aussehen: | ||
| + | # Rpcbind is used for all RPC services; protect your NFS! | ||
| + | # (IP addresses rather than hostnames *MUST* be used here) | ||
| + | #rpcbind : 192.0.2.32/ | ||
| + | #rpcbind : 192.0.2.96/ | ||
| + | rpcbind : ALL : deny | ||
| + | ... | ||
| + | |||
| + | und da setzen wir einfach unsere Zeile vor der Zeile mit " | ||
| + | ... | ||
| + | rpcbind : 192.168.1.1/ | ||
| + | rpcbind : ALL : deny | ||
| + | ... | ||
| + | |||
| + | |||
| + | === FreeBSD 4.x === | ||
| + | |||
| + | # vi / | ||
| + | portmap_enable=" | ||
| + | nfs_server_enable=" | ||
| + | nfs_server_flags=" | ||
| + | mountd_flags=" | ||
| + | |||
| + | Der Rechner kann neu gestartet werden, man kann NFS aber auch manuel starten: | ||
| + | |||
| + | # portmap | ||
| + | # nfsd -u -t -n 4 | ||
| + | # mountd -r | ||
| + | |||
| + | |||
| + | === FreeBSD 5.x === | ||
| + | |||
| + | # vi / | ||
| + | rpc_lockd_enable=" | ||
| + | rpc_statd_enable=" | ||
| + | rpcbind_enable=" | ||
| + | rpcbind_program="/ | ||
| + | nfs_server_enable=" | ||
| + | nfs_server_flags=" | ||
| + | nfs_reserved_port_only=" | ||
| + | mountd_flags=" | ||
| + | weak_mountd_authentication=" | ||
| + | |||
| + | Der Rechner kann neu gestartet werden, man kann NFS aber auch manuel starten: | ||
| + | |||
| + | # rpcbind | ||
| + | # nfsd -u -t -n 4 | ||
| + | # mountd -r | ||
| + | |||
| + | |||
| + | === FreeBSD 8.x === | ||
| + | |||
| + | - FreeBSD 8.0 enthält ZFS in der Version 13 | ||
| + | - FreeBSD 8.1 enthält ZFS in der Version 14 | ||
| + | |||
| + | ZFS enthält in der Solaris-Version einen SMB- und einen NFS-Server. | ||
| + | |||
| + | Man kann mit FreeBSD 8.x auch die " | ||
| + | aber das hier ist natürlich // | ||
| + | |||
| + | == Konfigurieren == | ||
| + | |||
| + | erstmal legen wir uns ein Volumen an: | ||
| + | * [[:: | ||
| + | |||
| + | Den NFS-Server kann man (laut Doku) so aktivieren: | ||
| + | # zfs set sharenfs=on tank/ | ||
| + | |||
| + | ...probieren wir das mal aus: | ||
| + | # zfs set sharenfs=on home/kontor | ||
| + | # cat / | ||
| + | # !!! DO NOT EDIT THIS FILE MANUALLY !!! | ||
| + | | ||
| + | / | ||
| + | |||
| + | # vi / | ||
| + | V4: / -sec=sys | ||
| + | |||
| + | # vi / | ||
| + | mountd_enable=" | ||
| + | nfs_client_enable=" | ||
| + | nfs_server_enable=" | ||
| + | nfsv4_server_enable=" | ||
| + | nfsuserd_enable=" | ||
| + | nfscbd_enable=" | ||
| + | |||
| + | # install -o root -g wheel -m 600 /dev/null / | ||
| + | |||
| + | Damit man über sein ZFS-Laufwerk auch immer informiert ist: | ||
| + | # echo ' | ||
| + | |||
| + | |||
| + | == Start == | ||
| + | |||
| + | # / | ||
| + | # / | ||
| + | # / | ||
| + | # / | ||
| + | # / | ||
| + | # / | ||
| + | |||
| + | |||
| + | == Test == | ||
| + | |||
| + | # mount_newnfs -o nfsv4,acls bsd:/ | ||
| + | # cd / | ||
| + | # getfacl gna | ||
| + | |||
| + | |||
| + | ==== Client ==== | ||
| + | |||
| + | === Konfiguration === | ||
| + | |||
| + | # vi / | ||
| + | nfs_client_enable=" | ||
| + | |||
| + | Der Rechner kann neu gestartet werden, | ||
| + | man kann die Client-Software aber auch manuel starten: | ||
| + | |||
| + | # nfsiod -n 4 | ||
| + | " | ||
| + | |||
| + | # mount 192.168.0.xxx:/ | ||
| + | |||
| + | |||
| + | === bei Problemen === | ||
| + | |||
| + | == UDP == | ||
| + | |||
| + | # mount -t nfs | ||
| + | |||
| + | # vi /etc/fstab | ||
| + | 192.168.9.1:/ | ||
| + | 192.168.9.1:/ | ||
| + | 192.168.9.1:/ | ||
| + | |||
| + | |||
| + | == TCP == | ||
| + | |||
| + | # mount -t nfs -o tcp 192.168.0.xxx:/ | ||
| + | |||
| + | # vi /etc/fstab | ||
| + | 192.168.9.1:/ | ||
| + | 192.168.9.1:/ | ||
| + | 192.168.9.1:/ | ||
| + | |||
| + | oder (bei Problemen / Wenn der Server kein FreeBSD-Rechner ist.): | ||
| + | |||
| + | 192.168.9.1:/ | ||
| + | 192.168.9.1:/ | ||
| + | 192.168.9.1:/ | ||
| + | |||
| + | oder (bei Problemen / Wenn der Client kein FreeBSD-Rechner ist.): | ||
| + | |||
| + | 192.168.9.1:/ | ||
| + | 192.168.9.1:/ | ||
| + | 192.168.9.1:/ | ||
| + | |||
| + | |||
| + | ===== Linux ===== | ||
| + | |||
| + | NFS4 ohne Kerberos mounten; | ||
| + | dabei werden die Originalrechte (uid,gid auf dem NFS4-Server) exportiert | ||
| + | und gelten auch auf den anderen Maschinen! | ||
| + | |||
| + | ==== Server ==== | ||
| + | |||
| + | === Vorbereitungen === | ||
| + | |||
| + | # useradd kontor | ||
| + | # mkdir -p / | ||
| + | # chmod 0775 / | ||
| + | # chown kontor: | ||
| + | |||
| + | |||
| + | === Konfiguration === | ||
| + | |||
| + | # aptitude install nfs-kernel-server nfs-common portmap | ||
| + | |||
| + | # echo " | ||
| + | # echo " | ||
| + | # echo " | ||
| + | # | ||
| + | # mkdir -p / | ||
| + | # echo "/ | ||
| + | # mount / | ||
| + | # #mount --bind / | ||
| + | # | ||
| + | # sed -i -e ' | ||
| + | # sed -i -e ' | ||
| + | |||
| + | # vi / | ||
| + | ... | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | |||
| + | # / | ||
| + | # exportfs -r | ||
| + | # exportfs -v | ||
| + | |||
| + | |||
| + | === Kontrolle === | ||
| + | |||
| + | # exportfs -v | ||
| + | # showmount -e | ||
| + | # rpcinfo -p | ||
| + | # netstat -tunap | ||
| + | |||
| + | |||
| + | ==== Client ==== | ||
| + | |||
| + | === Vorbereitungen === | ||
| + | |||
| + | # useradd kontor | ||
| + | # mkdir -p / | ||
| + | # chmod 0700 / | ||
| + | # chown kontor: | ||
| + | |||
| + | |||
| + | === Konfiguration === | ||
| + | |||
| + | # aptitude install nfs-client nfs-common portmap | ||
| + | |||
| + | > vi /etc/fstab | ||
| + | ... | ||
| + | 192.168.88.218:/ | ||
| + | 192.168.88.170:/ | ||
| + | |||
| + | # mount /mnt | ||
| + | |||
| + | |||
| + | === Test === | ||
| + | |||
| + | # root@nfsclient: | ||
| + | insgesamt 16 | ||
| + | drwxr-xr-x | ||
| + | drwxr-xr-x 23 root | ||
| + | drwx------ | ||
| + | |||
| + | # root@nfsclient: | ||
| + | ls: Öffnen von Verzeichnis / | ||
| + | |||
| + | # root@nfsclient: | ||
| + | # kontor@nfsclient: | ||
| + | # insgesamt 24 | ||
| + | # drwx------ 3 4294967294 4294967294 4096 4. Nov 10:24 . | ||
| + | # drwxr-xr-x 4 4294967294 4294967294 4096 4. Nov 10:12 .. | ||
| + | # -rw------- 1 4294967294 4294967294 | ||
| + | # drwx------ 2 4294967294 4294967294 4096 4. Nov 10:09 .ssh | ||
| + | # -rw-r--r-- 1 4294967294 4294967294 | ||
| + | # -rw------- 1 4294967294 4294967294 | ||
| + | |||
| + | Wir sehen, ohne Kerberos, muss der User auf Server und Client die gleiche UID bzw. GID haben! | ||
| + | |||
| + | Das ist nicht sicher aber einfach! | ||
| + | |||
| + | === Init-Skript zum mounten und umounten von NFS-Shares === | ||
| + | |||
| + | < | ||
| + | # | ||
| + | # | ||
| + | ### BEGIN INIT INFO | ||
| + | # Provides: | ||
| + | # Required-Start: | ||
| + | # Required-Stop: | ||
| + | # Default-Start: | ||
| + | # Default-Stop: | ||
| + | # Short-Description: | ||
| + | ### END INIT INFO | ||
| + | |||
| + | # Author: M.Heins | ||
| + | VERSION=" | ||
| + | |||
| + | PATH=/ | ||
| + | |||
| + | MOUNTPOINT=" | ||
| + | BEFEHL=" | ||
| + | |||
| + | # | ||
| + | |||
| + | . / | ||
| + | |||
| + | # | ||
| + | |||
| + | if [ -z " | ||
| + | echo "${0} MOUNTPOINT BEFEHL" | ||
| + | echo "${0} /mnt status" | ||
| + | exit 2 | ||
| + | fi | ||
| + | |||
| + | if [ -z " | ||
| + | echo "lsof muss installiert sein" | ||
| + | exit 2 | ||
| + | fi | ||
| + | |||
| + | # | ||
| + | |||
| + | KONTROLLE=" | ||
| + | if [ -z " | ||
| + | echo " | ||
| + | exit 2 | ||
| + | fi | ||
| + | |||
| + | if [ ! -d " | ||
| + | echo " | ||
| + | exit 2 | ||
| + | fi | ||
| + | |||
| + | # | ||
| + | |||
| + | PRUEFT=" | ||
| + | |||
| + | case ${BEFEHL} in | ||
| + | status) | ||
| + | if [ -n " | ||
| + | echo " | ||
| + | exit 0 | ||
| + | else | ||
| + | echo " | ||
| + | exit 3 | ||
| + | fi | ||
| + | ;; | ||
| + | start) | ||
| + | if [ -z " | ||
| + | mount ${MOUNTPOINT} | ||
| + | fi | ||
| + | ;; | ||
| + | stop) | ||
| + | while [ -n " | ||
| + | do | ||
| + | echo "Warte bis die noch offenen Datei-Haendler auf ' | ||
| + | sleep 4 | ||
| + | RPIDS=" | ||
| + | if [ -n " | ||
| + | kill ${RPIDS}; | ||
| + | sleep 4 ; | ||
| + | kill -9 ${RPIDS}; | ||
| + | fi; | ||
| + | sleep 4 ; | ||
| + | done | ||
| + | if [ -n " | ||
| + | umount -f ${MOUNTPOINT} | ||
| + | fi | ||
| + | ;; | ||
| + | *) | ||
| + | echo "Der Parameter ' | ||
| + | ;; | ||
| + | esac | ||
| + | |||
| + | exit 0 | ||
| + | </ | ||
| + | |||
