Usuários combinados do NFS, do servidor Samba com o Active Directory

8

Eu quero criar um servidor que exporte os diretórios pessoais do usuário em SMB / CIFS e NFS. Este servidor seria unido a um controlador de domínio Win2k3 AD que mantém nosso banco de dados do usuário. Pelo que entendi, o winbind vai 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 base ou a propriedade de arquivo não será apresentada corretamente.

Eu suponho que isso pode ser alcançado usando o SFU, mas até onde eu posso dizer, o SFU foi descontinuado e não será suportado em versões recentes do Windows, então eu prefiro não usá-lo.

Como faço para fornecer melhor esse mapeamento para clientes NFS?

(Você poderia pensar que isso é um caso de uso comum, mas não consigo encontrar um howto relevante. Meu Google-fu pode ser fraco.)

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

    
por Bittrance 04.04.2011 / 13:45

3 respostas

4

(Editar para 2017-07-05) Eu geralmente recomendo usar o sssd agora. Deixando a resposta original abaixo para referência histórica. Minhas anotações 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
  • Na seção /etc/sssd/sssd.conf , [sssd] , adicione default_domain_suffix = example.com e full_name_format = %1$s . Na seção [domain/example.com] , edite fallback_homedir = /home/%d/%u e adicione ignore_group_members = True . Para domínios maiores, adicione enumerate = false para evitar que o sssd percorra todo o AD procurando associações de grupos (e atrasando logins não armazenados em cache por um ou dois minutos cada).
  • Anexe session required pam_mkhomedir.so skel=/etc/skel/ umask=0076 no final de /etc/pam.d/common-session . (ou qualquer que seja você quiser usar).
  • Reinicie o sssd service com service sssd restart .
  • Tente fazer login em um segundo texto ou console GUI ou com ssh localhost .

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

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

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

    
por 04.04.2011 / 16:10
2

O componente NFS do Services for Unix agora faz parte da função Serviços para o sistema de arquivos de rede no Server 2003 R2 e superior.

Existe um ótimo blog da Microsoft sobre o SFU - link . A entrada de blog relevante explicando como configure-o e o artigo de Technet definitivo é 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 precisar primeiro do CIFS (se eles pudessem fazer CIFS, não faria muito sentido para o NFS?). / p>     

por 04.04.2011 / 14:42
1

Como sugerido por Mike Renfro acima, idmap_rid é o componente central. Abaixo está uma lista de comandos 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
    
por 05.04.2011 / 15:29