Zusammenfassung
Dieser Artikel behandelt das Problem der 16-Gruppen-Beschränkung in NFS-Authentifizierung und zeigt auf, wie diese durch moderne Kernel- und Server-Einstellungen umgangen werden kann. Wir erklären die technischen Hintergründe, demonstrieren die Lösung mit praktischen Beispielen und zeigen, wie man den GID-Cache verwaltet.
Einleitung
In Linux-Umgebungen mit NFS-Dateisystemen tritt häufig das Problem auf, dass Benutzer nicht mehr als 16 Gruppen gleichzeitig authentifizieren können. Diese Beschränkung entsteht durch die Implementierung der NFS-Authentifizierung, bei der bei jeder Authentifizierungsanfrage die Gruppeninformationen im Authentifizierungsprotokoll übertragen werden. Die Anzahl der Gruppen, die in diesen Paketen untergebracht werden können, ist begrenzt auf 16.
Die 16-Gruppen-Beschränkung ist besonders problematisch in Projekten mit komplexen Zugriffskontrollen, bei denen Benutzer in vielen Gruppen enthalten sind – sowohl lokalen als auch Netzwerkgruppen. In solchen Umgebungen kann es schnell passieren, dass die Gruppenanzahl den Limit überschreitet.
Hintergrund
NFS-Authentifizierungsmechanismus
NFS (Network File System) unterstützt verschiedene Authentifizierungsprotokoll, um den Zugriff auf Dateien zu steuern. Bei der einfachen Unix-Authentifizierung (auth_sec) wird bei jeder Anmeldung die Liste der Gruppen, zu denen ein Benutzer gehört, in das Authentifizierungsprotokoll eingefügt.
Die Gruppeninformationen werden als GID (Group Identifier) übertragen. In der Standardimplementierung ist die maximale Anzahl von Gruppen, die in einer Authentifizierungsanfrage übertragen werden können, auf 16 begrenzt. Diese Beschränkung wurde in der frühen NFS-Implementierung festgelegt und ist weiterhin in vielen Systemen gültig.
GID-Cache und Serverseitige Gruppenauflösung
Praktisch alle aktuellen Linux-Kernelversionen und NFS-Server bieten die Möglichkeit, die Gruppenmitgliedschaft serverseitig zu ermitteln. Dies reduziert die Anzahl der Gruppen, die vom Client an den Server übertragen werden müssen, da nur die GID des Benutzers übertragen wird, und die Gruppenmitgliedschaft auf dem Server nachgeschlagen wird.
Praktische Umsetzung
Schritt-für-Schritt-Anleitung
1. Serverseitige Konfiguration aktivieren
Um die serverseitige Gruppenauflösung zu aktivieren, muss der rpc.mountd mit der Option --manage-gids gestartet werden. Diese Option wird in der Konfigurationsdatei /etc/default/nfs-kernel-server gesetzt:
# /etc/default/nfs-kernel-server
RPCMOUNTDOPTS="--manage-gids"
2. NFS-Server neu starten
Nach der Konfigurationsänderung muss der NFS-Server neu gestartet werden:
sudo systemctl restart nfs-kernel-server
Anwendung bei Synology Server
Bei Synology ist natürlich wieder alles ein wenig anders. Hier muss die Datei /usr/lib/systemd/system/nfs-mountd.service verändert werden, und die Option --manage-gids unten in die Zeile ExecStart hinzugefüht werden.
[Unit]
Description=NFS Mount Daemon
Requires=proc-fs-nfsd.service
After=proc-fs-nfsd.service
Wants=network-online.target
After=network-online.target
After=local-fs.target rpcbind.service
BindsTo=nfs-server.service
[Service]
Type=forking
ExecStart=/usr/sbin/mountd -p 892 --manage-gids
Slice=nfs_service.slice
Ergebnis
Nach der Aktivierung der serverseitigen Gruppenauflösung:
- Die Anzahl der Gruppen, die vom Client übertragen werden, ist auf die GID des Benutzers begrenzt
- Die Gruppenmitgliedschaft wird serverseitig aufgelöst
- Die 16-Gruppen-Beschränkung wird umgangen
Cache-Überprüfung
Nach dem Start des Servers kann man den Cache überprüfen:
$ cat /proc/net/rpc/auth.unix.gid/content
0 3: 0 2 19
1000 0:
992 0:
997 0:
33 0:
10000 26: 10000 10001 10002 10003 10006 10007 10009 10021 10100 10110 10200 10201 10202 10203 10204 10205 10206 10207 10208 10209 10210 10211 10212 10213 10300 10600
999 0:
998 0:
126 0:
Dies zeigt die aktuellen GID-Zuordnungen an, die im Cache gespeichert sind.
4. GID-Cache leeren (falls erforderlich)
Der Cache kann bei Bedarf auch manuell geleert werden, z.B. wenn Gruppenzugehötigkeiten sich verändert haben. Dies geht einfach mit dem folgenden Befehl:
$ date +%s > /proc/net/rpc/auth.unix.gid/flush
Danach sollte der cache wieder leer sein, was sich einfach überprüfen lässt:
$ cat /proc/net/rpc/auth.unix.gid/content
uid gid
Fazit
Die Umgehung des 16-Gruppen-Limits in NFS ist ein wichtiges Thema in Umgebungen mit komplexen Zugriffskontrollen. Durch die serverseitige Gruppenauflösung können moderne NFS-Server die Beschränkung effektiv umgehen.
Wichtige Punkte:
- Die Lösung funktioniert auf jedem halbwegs modernen Linux Kernel
- Die Option
--manage-gidsmuss imrpc.mountdaktiviert werden - Serverseitige Gruppenauflösung kennt keine Begrezung
- Der GID-Cache auf dem Server kann bei Bedarf manuell geleert werden



