Website-Suche

Einrichten eines NFS-Servers mit Kerberos-basierter Authentifizierung für Linux-Clients – Teil 7


Im letzten Artikel dieser Serie haben wir besprochen, wie man eine Samba-Freigabe über ein Netzwerk einrichtet, das aus mehreren Betriebssystemtypen bestehen kann. Wenn Sie nun die Dateifreigabe für eine Gruppe von Unix-ähnlichen Clients einrichten müssen, denken Sie automatisch an das Network File System, kurz NFS.

In diesem Artikel führen wir Sie durch den Prozess der Verwendung der Kerberos-basierten Authentifizierung für NFS-Freigaben. Es wird davon ausgegangen, dass Sie bereits einen NFS-Server und einen Client eingerichtet haben. Wenn nicht, lesen Sie bitte den Abschnitt NFS-Server installieren und konfigurieren. Dort werden die erforderlichen Pakete aufgelistet, die installiert werden müssen, und erläutert, wie Sie Erstkonfigurationen auf dem Server durchführen, bevor Sie fortfahren.

Darüber hinaus sollten Sie sowohl SELinux als auch Firewalld konfigurieren, um die Dateifreigabe über NFS zu ermöglichen.

Im folgenden Beispiel wird davon ausgegangen, dass sich Ihre NFS-Freigabe in /nfs in box2 befindet:

semanage fcontext -a -t public_content_rw_t "/nfs(/.*)?"
restorecon -R /nfs
setsebool -P nfs_export_all_rw on
setsebool -P nfs_export_all_ro on

(wobei das Flag -P die Persistenz über Neustarts hinweg anzeigt).

Vergessen Sie zum Schluss nicht:

Erstellen Sie eine NFS-Gruppe und konfigurieren Sie das NFS-Freigabeverzeichnis

1. Erstellen Sie eine Gruppe mit dem Namen nfs, fügen Sie den Benutzer nfsnobody hinzu und ändern Sie dann die Berechtigungen von /nfs >-Verzeichnis nach 0770 und dessen Gruppeneigentümer nach nfs. Somit verfügt nfsnobody (das den Client-Anfragen zugeordnet ist) über Schreibberechtigungen für die Freigabe) und Sie müssen no_root_squash nicht in /etc. verwenden /exports-Datei.

groupadd nfs
usermod -a -G nfs nfsnobody
chmod 0770 /nfs
chgrp nfs /nfs

2. Ändern Sie die Exportdatei (/etc/exports) wie folgt, um nur den Zugriff von box1 mit Kerberos zu ermöglichen Sicherheit (sec=krb5).

Hinweis: Der Wert von anongid wurde auf die GID des nfs gesetzt. Gruppe, die wir zuvor erstellt haben:

/nfs box1(rw,sec=krb5,anongid=1004)

3. Exportieren Sie (-r) alle (-a) NFS-Freigaben erneut. Das Hinzufügen von Ausführlichkeit zur Ausgabe (-v) ist eine gute Idee, da es hilfreiche Informationen zur Fehlerbehebung beim Server liefert, wenn etwas schief geht:

exportfs -arv

4. Starten Sie den NFS-Server und die zugehörigen Dienste neu und aktivieren Sie sie. Beachten Sie, dass Sie nfs-lock und nfs-idmapd nicht aktivieren müssen, da diese beim Booten automatisch von den anderen Diensten gestartet werden:

systemctl restart rpcbind nfs-server nfs-lock nfs-idmap
systemctl enable rpcbind nfs-server

Testumgebung und andere Voraussetzungen

In diesem Handbuch verwenden wir die folgende Testumgebung:

  1. Client-Computer [box1: 192.168.0.18]
  2. NFS-/Kerberos-Server [box2: 192.168.0.20] (auch bekannt als Key Distribution Center, kurz KDC).

Hinweis: Der Kerberos-Dienst ist für das Authentifizierungsschema von entscheidender Bedeutung.

Wie Sie sehen, werden der NFS-Server und der KDC der Einfachheit halber auf demselben Computer gehostet. Sie können sie jedoch auch auf separaten Computern einrichten, wenn mehr verfügbar sind. Beide Maschinen sind Mitglieder der Domäne mydomain.com.

Zu guter Letzt erfordert Kerberos, dass sowohl auf dem Client als auch auf dem Server mindestens ein grundlegendes Schema der Namensauflösung und des Network Time Protocol-Dienstes vorhanden ist, da die Sicherheit der Kerberos-Authentifizierung teilweise auf den Zeitstempeln von basiert Tickets.

Um die Namensauflösung einzurichten, verwenden wir die Datei /etc/hosts sowohl auf dem Client als auch auf dem Server:

192.168.0.18    box1.mydomain.com    box1
192.168.0.20    box2.mydomain.com    box2

In RHEL 7 ist chrony die Standardsoftware, die für die NTP-Synchronisierung verwendet wird:

yum install chrony
systemctl start chronyd
systemctl enable chronyd

Um sicherzustellen, dass chrony die Zeit Ihres Systems tatsächlich mit Zeitservern synchronisiert, können Sie den folgenden Befehl zwei- oder dreimal ausführen und sicherstellen, dass der Offset näher an Null liegt:

chronyc tracking

Kerberos installieren und konfigurieren

Um das KDC einzurichten, installieren Sie die folgenden Pakete sowohl auf Server als auch auf Client (lassen Sie das Serverpaket im Client weg):

yum update && yum install krb5-server krb5-workstation pam_krb5

Bearbeiten Sie nach der Installation die Konfigurationsdateien (/etc/krb5.conf und /var/kerberos/krb5kdc/kadm5.acl) und ersetzen Sie alle Instanzen von example.com (Klein- und Großbuchstaben) mit mydomain.com wie folgt.

Erstellen Sie nun die Kerberos-Datenbank (bitte beachten Sie, dass dies eine Weile dauern kann, da dafür ein gewisses Maß an Entropie in Ihrem System erforderlich ist). Um die Sache zu beschleunigen, habe ich ein anderes Terminal geöffnet und ping -f ausgeführt localhost für 30–45 Sekunden):

kdb5_util create -s

Aktivieren Sie als Nächstes Kerberos über die Firewall und starten/aktivieren Sie die zugehörigen Dienste.

Wichtig: nfs-secure muss auch auf dem Client gestartet und aktiviert sein:

firewall-cmd --permanent --add-service=kerberos
systemctl start krb5kdc kadmin nfs-secure   
systemctl enable krb5kdc kadmin nfs-secure       

Erstellen Sie als Nächstes mit dem Tool kadmin.local einen Admin-Principal für Root:

kadmin.local
addprinc root/admin

Und fügen Sie den Kerberos-Server zur Datenbank hinzu:

addprinc -randkey host/box2.mydomain.com

Das Gleiche gilt für den NFS-Dienst sowohl für Client (box1) als auch für Server (box2). Bitte beachten Sie, dass ich im Screenshot unten vergessen habe, dies vor dem Beenden für box1 zu tun:

addprinc -randkey nfs/box2.mydomain.com
addprinc -randkey nfs/box1.mydomain.com

Und beenden Sie, indem Sie quit eingeben und die Eingabetaste drücken:

Rufen Sie dann das Kerberos-Ticket-Granting-Ticket für Root/Administrator ab und speichern Sie es zwischen:

kinit root/admin
klist

Der letzte Schritt vor der tatsächlichen Verwendung von Kerberos besteht darin, die Prinzipale, die zur Verwendung der Kerberos-Authentifizierung berechtigt sind, in einer Keytab-Datei (auf dem Server) zu speichern:

kadmin.local
ktadd host/box2.mydomain.com
ktadd nfs/box2.mydomain.com
ktadd nfs/box1.mydomain.com

Hängen Sie abschließend die Freigabe ein und führen Sie einen Schreibtest durch:

mount -t nfs4 -o sec=krb5 box2:/nfs /mnt
echo "Hello from linux-console.net" > /mnt/greeting.txt

Lassen Sie uns nun die Freigabe unmounten, die keytab-Datei im Client umbenennen (um zu simulieren, dass sie nicht vorhanden ist) und versuchen, die Freigabe erneut zu mounten:

umount /mnt
mv /etc/krb5.keytab /etc/krb5.keytab.orig

Jetzt können Sie die NFS-Freigabe mit Kerberos-basierter Authentifizierung verwenden.

Zusammenfassung

In diesem Artikel haben wir erklärt, wie man NFS mit Kerberos-Authentifizierung einrichtet. Da es viel mehr zu diesem Thema gibt, als wir in einem einzigen Leitfaden behandeln können, schauen Sie sich gerne die Online-Kerberos-Dokumentation an. Und da Kerberos, gelinde gesagt, etwas knifflig ist, zögern Sie nicht, uns über das untenstehende Formular eine Nachricht zu senden wenn Sie auf ein Problem stoßen oder Hilfe beim Testen oder bei der Implementierung benötigen.