Ich versuche derzeit, einen NFSv4-Server unter FreeBSD einzurichten. Ich habe umfangreiche Erfahrung damit auf anderen Unices (Solaris und Linux), aber ich bin ziemlich neu in FreeBSD.
Mein Ziel ist es, Folgendes zu erreichen:
- Vom FreeBSD-System bereitgestellte Dateien
- Das einzige Sicherheitsmodell sollte krb5p sein
- Clients sind Linux (Ubuntu) und OSX
Derzeit habe ich es geschafft, die Dinge so einzurichten, dass ich ein gültiges TGT benötige, um auf das Dateisystem zugreifen zu können. Nach dem Versuch, auf diese Dateien zuzugreifen, kann ich klist
auf dem Client ausgeführt werden und feststellen, dass der nfs/domainname
Principal abgerufen wurde. Dies deutet darauf hin, dass der Kerberos-Teil des NFS-Mount korrekt ist.
Mein Problem ist, dass alle Clientzugriffe weiterhin über den nobody
Benutzer ausgeführt werden. Ich kann die Berechtigungen sehen, wenn ich es tue ls -l
. Sogar die Benutzerzuordnung funktioniert ordnungsgemäß, aber wenn nobody
ich keine Berechtigung habe, etwas mit den Dateien zu tun, wird mir eine Berechtigung verweigert.
Hier ist eine Beispielinteraktion vom Client (in diesem Fall Ubuntu, aber dasselbe passiert unter OSX). In diesem Beispiel /export/shared/testshare
ist das freigegebene Verzeichnis vom FreeBSD-Server:
(Ich habe den tatsächlichen Domainnamen in domain
und den Kerberos-Realmnamen in geändert. REALM
)
$ kinit
Password for elias@REALM:
$ klist
Ticket cache: FILE:/tmp/krb5cc_1000_GBjtDP
Default principal: elias@REALM
Valid starting Expires Service principal
09/02/2013 09:40:47 10/02/2013 09:40:44 krbtgt/REALM@REALM
$ sudo mount -t nfs4 -osec=krb5p,vers=4 lion:/export/shared/testshare /mnt
$ ls -l /mnt
total 4
-rw-r--r-- 1 nobody nogroup 5 Feb 7 18:17 bar.txt
-rw------- 1 elias nogroup 4 Feb 5 23:09 foo.txt
$ cat /mnt/bar.txt
blah
$ echo foo >>/mnt/bar.txt
bash: /mnt/bar.txt: Permission denied
$ cat /mnt/foo.txt
cat: /mnt/foo.txt: Permission denied
$ klist
Ticket cache: FILE:/tmp/krb5cc_1000_GBjtDP
Default principal: elias@REALM
Valid starting Expires Service principal
09/02/2013 09:40:47 10/02/2013 09:40:44 krbtgt/REALM@REALM
09/02/2013 09:41:56 10/02/2013 09:40:44 nfs/lion.domain@REALM
Serverkonfiguration
Ich hatte einige Probleme, einen umfassenden Leitfaden zum Einrichten von NFSv4 unter FreeBSD zu finden. Dies ist an sich schon etwas überraschend, da ich festgestellt habe, dass Informationen darüber, wie man Dinge in FreeBSD macht, sehr gut sind.
Hier sind die relevanten Zeilen in /etc/rc.conf
:
rpcbind_enable="YES"
nfs_server_enable="YES"
nfsv4_server_enable="YES"
nfsuserd_enable="YES"
nfscbd_enable="YES"
mountd_enable="YES"
gssd_enable="YES"
rpc_lockd_enable="YES"
rpc_statd_enable="YES"
zfs_enable="YES"
Hier ist der Inhalt von /etc/exports
:
/export/shared/testshare -sec=krb5p
V4: / -sec=krb5p
Ein weiterer interessanter Aspekt ist, dass ich tcpdump
beim Aufzeichnen des NFS-Netzwerkverkehrs zwischen Client und Server NFS3- Pakete zusammen mit den NFS4- Paketen gesehen habe. Beide Pakettypen enthielten verschlüsselte Daten, daher denke ich immer noch, dass Kerberos verwendet wurde, aber angesichts der obigen Konfiguration hätte ich erwartet, dass es nur NFS4-Verkehr gibt.
Einfach ausgedrückt muss es eine Möglichkeit geben, Benutzernamen zwischen den Systemen zuzuordnen. Führen Sie idmapd sowohl auf dem Server als auch auf dem Client aus? Ldap?
Versuchen Sie zumindest als Test, bestimmte Zuordnungen zwischen Namen vorzunehmen ... außer zunächst root.
quelle
Ich habe das Problem gelöst. Nachdem ich den Code durchgesehen hatte, stellte ich fest, dass die Ursache ein Fehler in der GSS-Bibliothek war. Das Problem wurde durch einen
getpwnam_r
zu kleinen Puffer verursacht .Alle Details finden Sie in der Diskussion auf der Mailingliste
quelle