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?

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.


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?).


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.