NFS combiné, serveur Samba avec utilisateurs d'Active Directory


8

Je veux construire un serveur qui exporte les répertoires personnels des utilisateurs via SMB / CIFS et NFS. Ce serveur serait joint à un contrôleur de domaine Win2k3 AD qui contient notre base de données d'utilisateurs. Si je comprends bien, winbind inventera les UID pour ces utilisateurs à la volée. Ce mappage nom d'utilisateur-UID doit être disponible pour les clients NFS qui montent les répertoires personnels ou la propriété du fichier ne sera pas présentée correctement.

Je suppose que cela peut être réalisé en utilisant SFU, mais pour autant que je sache, SFU est interrompu et ne sera pas pris en charge sur les versions récentes de Windows, donc je préférerais ne pas l'utiliser.

Comment puis-je fournir au mieux ce mappage aux clients NFS?

(On pourrait penser que c'est un cas d'utilisation courant, mais je n'arrive pas à trouver un guide pertinent. Mon Google-fu est peut-être faible.)

EDIT: En passant, serait-il possible dans ce scénario pour un utilisateur de se connecter via NFS sans s'être d'abord connecté via SMB / CIFS?

Réponses:


4

(Modifier pour 2017-07-05) Je recommanderais généralement d'utiliser sssd maintenant. Laissant la réponse originale ci-dessous pour référence historique. Mes notes actuelles pour Ubuntu sont:

apt-get install openssh-server sssd-ad realmd packagekit
realm -v join example.com --computer-ou="OU=someOU,DC=example,DC=com" --user=someuser
  • Dans /etc/sssd/sssd.conf, [sssd]section, ajoutez default_domain_suffix = example.comet full_name_format = %1$s. Dans la [domain/example.com]section, modifiez fallback_homedir = /home/%d/%uet ajoutez ignore_group_members = True. Pour les domaines plus importants, ajoutez enumerate = falsepour empêcher sssd de traverser AD à la recherche d'appartenance à un groupe (et de retarder les connexions non mises en cache pendant une minute ou deux chacune).
  • Ajouter session required pam_mkhomedir.so skel=/etc/skel/ umask=0076à la fin de /etc/pam.d/common-session. (ou tout autre umask que vous souhaitez utiliser).
  • Redémarrez le sssdservice avec service sssd restart.
  • Essayez de vous connecter sur un deuxième texte ou une console graphique, ou avec ssh localhost.

winbindconstituerait des UID par défaut sur les anciennes versions de Samba, ou devrait se référer à un magasin LDAP pour que tout reste cohérent. Cela n'a pas été le cas depuis un certain temps maintenant (novembre 2004, si mes informations sont correctes) - idmap_ridest un backend qui peut générer des UID à partir du RID Active Directory (identifiant relatif, faisant partie du SID de l'utilisateur).

J'ai écrit ma configuration pour lier les systèmes Debian dans un AD existant - il utilise Puppet, mais si vous ne le lisez que pour un point de départ sur les configurations Samba et PAM, il devrait fonctionner sur n'importe quel système UNIX comparable.

Notez que je n'utilise pas SFU, ni ne modifie le schéma AD en aucune façon. Tout ce que je voulais, c'était un ensemble cohérent d'UID pour mes utilisateurs.


Ce message m'a mis sur la bonne voie. Voir ci-dessous pour un vidage complet de ce que j'ai fait.
Bittrance

2

Le composant NFS de Services pour Unix fait désormais partie du rôle Services pour le système de fichiers réseau dans Server 2003 R2 et versions ultérieures.

Il existe un excellent blog Microsoft sur SFU - http://blogs.msdn.com/b/sfu/ . L'entrée de blog pertinente expliquant comment le configurer et l'article définitif de Technet sont ici .

Vous pouvez utiliser l'extension de schéma de gestion des identités pour UNIX Active Directory pour effectuer votre mappage permettant aux clients NFS de se connecter à votre serveur sans avoir à commencer par CIFS (s'ils pouvaient CIFS, cela n'a-t-il pas beaucoup de sens pour NFS?).


1

Comme suggéré par Mike Renfro ci-dessus, idmap_rid est le composant central. Vous trouverez ci-dessous une liste de commandes shell qui permettent de démarrer une boîte, en fonction d'une nouvelle boîte RHEL5.5:

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.