Kombinierter NFS-, Samba-Server mit Benutzern aus Active Directory

8

Ich möchte einen Server erstellen, der Benutzer-Home-Verzeichnisse über SMB / CIFS und NFS exportiert. Dieser Server wird mit einem Win2k3 AD-Domänencontroller verbunden, der unsere Benutzerdatenbank enthält. So wie ich es verstehe, wird winbind UIDs für diese Benutzer im laufenden Betrieb erfinden. Diese Benutzername-UID-Zuordnung muss NFS-Clients zur Verfügung stehen, die die Basisverzeichnisse bereitstellen, da sonst der Dateieigentum nicht korrekt dargestellt wird.

Ich gehe davon aus, dass dies mit SFU erreicht werden kann, aber soweit ich das beurteilen kann, wird SFU nicht mehr angeboten und wird in neueren Windows-Versionen nicht mehr unterstützt. Daher würde ich es vorziehen, es nicht zu verwenden.

Wie kann ich diese Zuordnung am besten für NFS-Clients bereitstellen?

(Sie würden denken, dass dies ein häufiger Anwendungsfall ist, aber ich finde kein relevantes Howto. Mein Google-Fu ist möglicherweise schwach.)

BEARBEITEN: Abgesehen davon, wäre es in diesem Szenario für einen Benutzer möglich, eine Verbindung über NFS herzustellen, ohne zuvor eine Verbindung über SMB / CIFS hergestellt zu haben?

Bittrance
quelle

Antworten:

4

(Bearbeiten für 2017-07-05) Ich würde generell empfehlen, jetzt sssd zu verwenden. Lassen Sie die ursprüngliche Antwort unten als historische Referenz. Meine aktuellen Notizen für Ubuntu sind:

apt-get install openssh-server sssd-ad realmd packagekit
realm -v join example.com --computer-ou="OU=someOU,DC=example,DC=com" --user=someuser
  • In /etc/sssd/sssd.conf, [sssd]Abschnitt fügen default_domain_suffix = example.comund full_name_format = %1$s. [domain/example.com]Bearbeiten fallback_homedir = /home/%d/%uund fügen Sie im Abschnitt hinzu ignore_group_members = True. enumerate = falseFügen Sie bei größeren Domänen hinzu, um zu verhindern, dass sssd in ganz AD nach Gruppenmitgliedschaften sucht (und nicht zwischengespeicherte Anmeldungen um jeweils ein oder zwei Minuten verzögert).
  • session required pam_mkhomedir.so skel=/etc/skel/ umask=0076Am Ende von anhängen /etc/pam.d/common-session. (oder was auch immer umask Sie verwenden möchten).
  • Starten Sie den sssdDienst mit neu service sssd restart.
  • Versuchen Sie, sich in einem zweiten Text oder einer GUI-Konsole oder mit anzumelden ssh localhost.

winbindwürde in älteren Versionen von Samba standardmäßig UIDs bilden oder müsste auf einen LDAP-Speicher verweisen, um alles konsistent zu halten. Dies ist seit einiger Zeit nicht mehr der Fall (November 2004, wenn meine Informationen korrekt sind) - idmap_ridist ein Backend, das UIDs aus der Active Directory-RID (relativer Bezeichner, Teil der SID des Benutzers) generieren kann.

Ich habe meine Konfiguration für die Einbindung von Debian-Systemen in ein vorhandenes AD hier geschrieben - es verwendet Puppet, aber wenn Sie es nur als Ausgangspunkt für Samba- und PAM-Konfigurationen lesen, sollte es auf jedem vergleichbaren UNIX-System funktionieren.

Beachten Sie, dass ich keine SFU verwende oder das AD-Schema in irgendeiner Weise ändere. Ich wollte nur einen konsistenten Satz von UIDs für meine Benutzer.

Mike Renfro
quelle
Dieser Beitrag hat mich auf den richtigen Weg gebracht. Unten finden Sie eine vollständige Übersicht über das, was ich getan habe.
Bittrance
2

Die NFS-Komponente von Services for Unix ist jetzt Teil der Rolle Services for Network File System in Server 2003 R2 und höher.

Es gibt einen großartigen Microsoft-Blog über SFU - http://blogs.msdn.com/b/sfu/ . Der entsprechende Blogeintrag, in dem die Einrichtung und der endgültige Technet-Artikel erläutert werden, finden Sie hier .

Sie können die Schemaerweiterung Identity Management für UNIX Active Directory verwenden, um Ihre Zuordnung zu ermöglichen, sodass NFS-Clients eine Verbindung zu Ihrem Server herstellen können, ohne zuvor CIFS ausführen zu müssen (wenn sie CIFS könnten, ist dies für NFS nicht sehr sinnvoll?).

Jon Rhoades
quelle
1

Wie von Mike Renfro oben vorgeschlagen, ist idmap_rid die zentrale Komponente. Unten finden Sie eine Liste von Shell-Befehlen, mit denen eine Box mit einer neuen RHEL5.5-Box zum Laufen gebracht wird:

client_packages:

yum -y install samba3x-winbind krb5-workstation nfs-utils portmap pam_krb5
chkconfig --add winbind
chkconfig winbind --level 345 on
chkconfig --add rpcidmapd
chkconfig rpcidmapd --level 345 on
chkconfig --add portmap
chkconfig portmap --level 345 on
chkconfig --add nfslock
chkconfig nfslock --level 345 on

client_setup:

umount /cpy/shared || true
umount /cpy/users || true

install samba-winbind.conf /etc/samba/smb.conf
install krb5.conf /etc/krb5.conf
install idmapd.conf /etc/idmapd.conf

if ! net -S ad.example.com ads testjoin ; then
    net -S ad.example.com ads join -UAdministrator
fi

if ! grep -q winbind /etc/nsswitch.conf ; then
    sed -r  -e 's/^(passwd|shadow|group):.*$/& winbind/g' \
        -e 's/^hosts:.*$/& wins/g' -i /etc/nsswitch.conf
fi

( grep -v '172.18.0.2:' /etc/fstab && cat fstab.nfs-client ) \
    > /tmp/fstab.new && mv /tmp/fstab.new /etc/fstab

service winbind restart
service rpcidmapd restart
install -d /cpy/shared
install -d /cpy/users
mount -a
authconfig --enablewinbind --enablewinbindauth --enablekrb5 --update
echo "Make sure that /etc/hosts has an entry with .example.com"

samba-winbind.conf:

[global]
unix charset = LOCALE
workgroup = EXAMPLE
realm = example.com
security = ADS
log level = 2
syslog = 0
log file = /var/log/samba/%m
max log size = 50
idmap backend = idmap_rid:EXAMPLE=10000-20000
idmap uid = 10000-20000
idmap gid = 10000-20000
template shell = /bin/bash
template homedir = /cpy/users/%u
winbind separator = +
winbind cache time = 60
winbind enum groups = yes
winbind enum users = yes
winbind use default domain = yes

krb.conf:

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]

 default_realm = EXAMPLE.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 forwardable = yes

[realms]
 PILOTFISH.SE = {
  kdc = ad.example.com
  admin_server = ad.example.com
  default_domain = example.com
 }

[domain_realm]
 .pilotfish.se = EXAMPLE.COM
 pilotfish.se = EXAMPLE.COM

[appdefaults]
 pam = {
   debug = false
   ticket_lifetime = 36000
   renew_lifetime = 36000
   forwardable = true
   krb4_convert = false
 }

idmapd.conf

[General]

Verbosity = 1
Pipefs-Directory = /var/lib/nfs/rpc_pipefs
Domain = example.com

[Mapping]

Nobody-User = nfsnobody
Nobody-Group = nfsnobody

[Translation]
Method = nsswitch

fstab.nfs-client

172.18.0.2:/users       /cpy/users              nfs4    defaults        0 0
172.18.0.2:/shared      /cpy/shared             nfs4    defaults        0 0
Bittrance
quelle