Website-Suche

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


Im letzten Artikel dieser Serie haben wir uns mit der Einrichtung einer Samba-Freigabe über ein Netzwerk befasst, 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, in dem die erforderlichen Pakete aufgelistet sind, die installiert werden müssen, und erklärt wird, wie die Erstkonfigurationen auf dem Server durchgeführt werden, bevor Sie fortfahren.

Darüber hinaus sollten Sie sowohl SELinux als auch firewalld so konfigurieren, dass die Dateifreigabe über NFS möglich ist.

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 schließlich nicht:

Erstellen einer NFS-Gruppe und Konfigurieren des NFS-Freigabeverzeichnisses

1. Erstellen Sie eine Gruppe mit dem Namen nfs und fügen Sie den Benutzer nfsnobody hinzu, dann ändern Sie die Berechtigungen des Verzeichnisses /nfs in 0770 und dessen Gruppenbesitzer in nfs. Daher hat nfsnobody (das den Client-Anforderungen zugeordnet ist) Schreibberechtigungen für die Freigabe) und Sie müssen no_root_squash nicht in der Datei /etc/exports verwenden.

# 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-Sicherheit (sec=krb5) zu erlauben.

Hinweis: dass der Wert von anongid auf die GID der NFS-Gruppe gesetzt wurde, die wir zuvor erstellt haben:

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

3. Exportieren Sie alle (-a) NFS-Freigaben erneut (-r). Es ist eine gute Idee, der Ausgabe (-v) Ausführlichkeit hinzuzufügen, da sie hilfreiche Informationen zur Problembehandlung des Servers 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 sie 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 dieser Anleitung verwenden wir die folgende Testumgebung:

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

Hinweis: Dieser Kerberos-Dienst ist entscheidend für das Authentifizierungsschema.

Wie Sie sehen können, werden der Einfachheit halber der NFS-Server und das KDC auf demselben Rechner gehostet, obwohl Sie sie auf separaten Rechnern einrichten können, wenn Sie mehr zur Verfügung haben. Beide Computer sind Mitglieder der Domäne mydomain.com.

Zu guter Letzt erfordert Kerberos zumindest ein grundlegendes Schema der Namensauflösung und den Network Time Protocol-Dienst, der sowohl auf dem Client als auch auf dem Server vorhanden sein muss, da die Sicherheit der Kerberos-Authentifizierung zum Teil auf den Zeitstempeln von Tickets basiert.

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 den Zeitservern synchronisiert, sollten Sie den folgenden Befehl zwei- oder dreimal ausführen und sicherstellen, dass der Offset näher an Null herangeht:

# chronyc tracking

Installieren und Konfigurieren von Kerberos

Um den KDC einzurichten, installieren Sie die folgenden Pakete sowohl auf dem Server als auch auf dem Client (lassen Sie das Serverpaket auf dem 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) durch mydomain.com wie folgt.

Erstellen Sie nun die Kerberos-Datenbank (bitte beachten Sie, dass dies eine Weile dauern kann, da es ein gewisses Maß an Entropie in Ihrem System erfordert. Um die Dinge zu beschleunigen, öffnete ich ein anderes Terminal und führte ping -f localhost für 30-45 Sekunden aus):

# 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-Prinzipal für root:

# kadmin.local
addprinc root/admin

Fügen Sie der Datenbank den Kerberos-Server hinzu:

# addprinc -randkey host/box2.mydomain.com

Dasselbe gilt für den NFS-Dienst für den Client (box1) und den Server (box2). Bitte beachten Sie, dass ich im Screenshot unten vergessen habe, dies für box1 zu tun, bevor ich aufgehört habe:

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

Beenden Sie den Vorgang, indem Sie quit eingeben und die Eingabetaste drücken:

Rufen Sie dann das Kerberos-Ticket für root/admin 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 für die Verwendung der Kerberos-Authentifizierung autorisiert sind, in einer Chiffrierschlüsseldatei (auf dem Server) zu speichern:

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

Stellen Sie abschließend die Freigabe bereit, 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 Bereitstellung der Freigabe aufheben, 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 Sie NFS mit Kerberos-Authentifizierung einrichten. Da es viel mehr zu diesem Thema gibt, als wir in einem einzigen Leitfaden abdecken können, können Sie gerne die Online-Kerberos-Dokumentation lesen, und da Kerberos, gelinde gesagt, etwas knifflig ist, zögern Sie nicht, uns über das untenstehende Formular eine Nachricht zu schicken, wenn Sie auf ein Problem stoßen oder Hilfe bei Ihren Tests oder Ihrer Implementierung benötigen.

Verwandte Artikel: