Servidor NFS e Samba combinado com usuários do Active Directory

8

Quero criar um servidor que exporte os diretórios pessoais do usuário por SMB / CIFS e NFS. Esse servidor seria associado a um controlador de domínio Win2k3 AD que contém nosso banco de dados de usuários. Pelo que entendi, o winbind inventará UIDs para esses usuários em tempo real. Esse mapeamento de nome de usuário-UID precisa estar disponível para clientes NFS que montam os diretórios pessoais ou a propriedade do arquivo não será apresentada corretamente.

Suponho que isso possa ser alcançado usando o SFU, mas, até onde sei, o SFU foi descontinuado e não será suportado em versões recentes do Windows, portanto, prefiro não usá-lo.

Como eu melhor forneço esse mapeamento para clientes NFS?

(Você acha que esse é um caso de uso comum, mas não consigo encontrar um tutorial relevante. Meu Google-fu pode estar fraco.)

EDIT: Como um aparte, seria possível neste cenário para um usuário se conectar através do NFS sem primeiro ter se conectado via SMB / CIFS?

Bittrance
fonte

Respostas:

4

(Editar para 05-07-2017) Em geral, recomendo usar o sssd agora. Deixando a resposta original abaixo para referência histórica. Minhas notas atuais para o Ubuntu são:

apt-get install openssh-server sssd-ad realmd packagekit
realm -v join example.com --computer-ou="OU=someOU,DC=example,DC=com" --user=someuser
  • Em /etc/sssd/sssd.conf, [sssd]seção, adicionar default_domain_suffix = example.come full_name_format = %1$s. Na [domain/example.com]seção, edite fallback_homedir = /home/%d/%ue adicione ignore_group_members = True. Para domínios maiores, adicione enumerate = falsepara impedir que o sssd percorra todo o AD procurando por participações em grupos (e atrasando logons não armazenados em cache por um minuto ou dois cada).
  • Anexar session required pam_mkhomedir.so skel=/etc/skel/ umask=0076no final de /etc/pam.d/common-session. (ou o que quer que você queira usar).
  • Reinicie o sssdserviço com service sssd restart.
  • Tente fazer login em um segundo console de texto ou GUI ou com ssh localhost.

winbindcriaria UIDs por padrão em versões mais antigas do Samba ou precisaria se referir a uma loja LDAP para manter tudo consistente. Esse não é o caso há algum tempo (novembro de 2004, se minhas informações estiverem corretas) - idmap_ridé um back-end que pode gerar UIDs a partir do RID do Active Directory (identificador relativo, parte do SID do usuário).

Eu escrevi minha configuração para vincular sistemas Debian a um AD existente aqui - ele usa o Puppet, mas se você o ler apenas para um ponto de partida nas configurações do Samba e PAM, ele deverá funcionar em qualquer sistema UNIX comparável.

Observe que não estou usando SFU ou modificando o esquema do AD de qualquer forma. Tudo o que eu queria era um conjunto consistente de UIDs para meus usuários.

Mike Renfro
fonte
Este post me colocou no caminho certo. Veja abaixo um despejo completo do que eu fiz.
Bittrance
2

O componente NFS do Services for Unix agora faz parte da função Services for Network File System no Server 2003 R2 e superior.

Há um ótimo blog da Microsoft sobre o SFU - http://blogs.msdn.com/b/sfu/ . A entrada relevante do blog que explica como configurá-lo e o artigo definitivo da Technet está aqui .

Você pode usar a extensão de esquema do Identity Management para UNIX Active Directory para fazer seu mapeamento, permitindo que os clientes NFS se conectem ao seu servidor sem ter que usar o CIFS primeiro (se eles pudessem usar o CIFS, não faz muito sentido para o NFS?).

Jon Rhoades
fonte
1

Conforme sugerido por Mike Renfro acima, idmap_rid é o componente central. Abaixo está uma lista de comandos do shell que colocam uma caixa em funcionamento, dada uma nova caixa 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
Bittrance
fonte