Servidor combinado de NFS, Samba con usuarios de Active Directory

8

Quiero construir un servidor que exporte directorios de inicio de usuarios sobre SMB / CIFS y NFS. Este servidor se uniría a un controlador de dominio Win2k3 AD que contiene nuestra base de datos de usuarios. Según tengo entendido, winbind inventará UID para estos usuarios sobre la marcha. Esta asignación de nombre de usuario-UID debe estar disponible para los clientes NFS que montan los directorios principales o la propiedad del archivo no se presentará correctamente.

Supongo que esto se puede lograr usando SFU, pero por lo que puedo decir, SFU está descontinuado y no será compatible con las versiones recientes de Windows, por lo que preferiría no usarlo.

¿Cómo mejor proporciono esta asignación a clientes NFS?

(Pensarías que este es un caso de uso común, pero no encuentro una guía relevante. Mi Google-fu puede ser débil).

EDITAR: Como un aparte, ¿sería posible en este escenario que un usuario se conecte a través de NFS sin haberse conectado primero a través de SMB / CIFS?

Bittrance
fuente

Respuestas:

4

(Editar para 2017-07-05) En general, recomendaría usar sssd ahora. Dejando la respuesta original a continuación para referencia histórica. Mis notas actuales para Ubuntu son:

apt-get install openssh-server sssd-ad realmd packagekit
realm -v join example.com --computer-ou="OU=someOU,DC=example,DC=com" --user=someuser
  • En /etc/sssd/sssd.conf, [sssd]sección, agregue default_domain_suffix = example.comy full_name_format = %1$s. En la [domain/example.com]sección, edita fallback_homedir = /home/%d/%uy agrega ignore_group_members = True. Para dominios más grandes, agregue enumerate = falsepara evitar que sssd recorra todo AD buscando membresías grupales (y retrasando inicios de sesión no almacenados en caché por un minuto o dos cada uno).
  • Añadir session required pam_mkhomedir.so skel=/etc/skel/ umask=0076al final de /etc/pam.d/common-session. (o cualquier umask que quieras usar).
  • Reiniciar el sssdservicio con service sssd restart.
  • Intente iniciar sesión en un segundo texto o consola GUI, o con ssh localhost.

winbindcompondría los UID por defecto en versiones anteriores de Samba, o tendría que referirse a una tienda LDAP para mantener todo consistente. Ese no ha sido el caso desde hace algún tiempo (noviembre de 2004, si mi información es correcta): idmap_rides un back-end que puede generar UID a partir del RID de Active Directory (identificador relativo, parte del SID del usuario).

Escribí mi configuración para vincular los sistemas Debian a un AD existente aquí : utiliza Puppet, pero si solo lo lee como punto de partida en las configuraciones de Samba y PAM, debería funcionar en cualquier sistema UNIX comparable.

Tenga en cuenta que no estoy usando SFU o modificando el esquema AD de ninguna manera. Todo lo que quería era un conjunto consistente de UID para mis usuarios.

Mike Renfro
fuente
Esta publicación me llevó por el buen camino. Vea a continuación un volcado completo de lo que hice.
Bittrance
2

El componente NFS de Servicios para Unix ahora forma parte de la función Servicios para el sistema de archivos de red en Server 2003 R2 y superior.

Hay un excelente blog de Microsoft sobre SFU: http://blogs.msdn.com/b/sfu/ . La entrada relevante del blog que explica cómo configurarlo y el artículo definitivo de Technet está aquí .

Puede usar la extensión de esquema de Identity Management for UNIX Active Directory para hacer su mapeo permitiendo que los clientes NFS se conecten a su servidor sin tener que CIFS primero (si pudieran CIFS, ¿no tiene mucho sentido para NFS?).

Jon Rhoades
fuente
1

Como sugirió Mike Renfro anteriormente, idmap_rid es el componente central. A continuación se muestra una lista de comandos de shell que ponen en funcionamiento un cuadro, dado un nuevo cuadro RHEL5.5:

paquetes_clientes:

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

configuración_cliente:

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
fuente