Gabungan NFS, server Samba dengan pengguna dari Active Directory

8

Saya ingin membangun server yang mengekspor direktori home user melalui SMB / CIFS dan NFS. Server ini akan bergabung dengan pengontrol domain Win2k3 AD yang menyimpan basis data pengguna kami. Seperti yang saya pahami, winbind akan menemukan UID untuk pengguna ini dengan cepat. Pemetaan nama pengguna-UID ini harus tersedia untuk klien NFS yang memasang direktori home atau kepemilikan file tidak akan disajikan dengan benar.

Saya berasumsi ini dapat dicapai dengan menggunakan SFU, tetapi sejauh yang saya tahu SFU dihentikan dan tidak akan didukung pada versi Windows terbaru, jadi saya lebih suka untuk tidak menggunakannya.

Bagaimana cara terbaik menyediakan pemetaan ini untuk klien NFS?

(Anda akan berpikir ini kasus penggunaan umum, tetapi saya gagal menemukan cara yang relevan. Google-fu saya mungkin lemah.)

EDIT: Sebagai tambahan, apakah mungkin dalam skenario ini bagi pengguna untuk terhubung melalui NFS tanpa terlebih dahulu terhubung melalui SMB / CIFS?

Bittrance
sumber

Jawaban:

4

(Edit untuk 2017-07-05) Saya biasanya merekomendasikan menggunakan sssd sekarang. Meninggalkan jawaban asli di bawah ini untuk referensi sejarah. Catatan saya saat ini untuk Ubuntu adalah:

apt-get install openssh-server sssd-ad realmd packagekit
realm -v join example.com --computer-ou="OU=someOU,DC=example,DC=com" --user=someuser
  • Di /etc/sssd/sssd.conf, [sssd]bagian, tambahkan default_domain_suffix = example.comdan full_name_format = %1$s. Di [domain/example.com]bagian itu, edit fallback_homedir = /home/%d/%udan tambahkan ignore_group_members = True. Untuk domain yang lebih besar, tambahkan enumerate = falseuntuk mencegah sssd melintasi seluruh AD mencari keanggotaan grup (dan menunda login yang tidak di-cache untuk satu atau dua menit masing-masing).
  • Tambahkan session required pam_mkhomedir.so skel=/etc/skel/ umask=0076pada akhir /etc/pam.d/common-session. (atau umask apa pun yang ingin Anda gunakan).
  • Mulai ulang sssdlayanan dengan service sssd restart.
  • Coba masuk pada teks kedua atau konsol GUI, atau dengan ssh localhost.

winbindakan membuat UID secara default pada versi Samba yang lebih lama, atau harus merujuk ke toko LDAP untuk menjaga semuanya konsisten. Itu tidak terjadi untuk beberapa waktu sekarang (November 2004, jika informasi saya benar) - idmap_ridadalah backend yang dapat menghasilkan UID dari Active Directory RID (pengidentifikasi relatif, bagian dari SID pengguna).

Saya menulis konfigurasi saya untuk mengikat sistem Debian ke dalam AD yang ada di sini - ini menggunakan Wayang, tetapi jika Anda hanya membacanya untuk titik awal pada konfigurasi Samba dan PAM, itu harus bekerja pada sistem UNIX yang sebanding.

Perhatikan bahwa saya tidak menggunakan SFU, atau memodifikasi skema AD dengan cara apa pun. Yang saya inginkan adalah serangkaian UID yang konsisten untuk pengguna saya.

Mike Renfro
sumber
Posting ini membuat saya di jalur yang benar. Lihat di bawah untuk informasi lengkap tentang apa yang saya lakukan.
Bittrance
2

Komponen NFS dari Services for Unix sekarang menjadi bagian dari Services for Network System System di Server 2003 R2 dan di atasnya.

Ada blog Microsoft yang hebat tentang SFU - http://blogs.msdn.com/b/sfu/ . Entri blog yang relevan menjelaskan cara mengaturnya dan artikel Technet definitif ada di sini .

Anda dapat menggunakan Identity Management untuk ekstensi skema Active Directory UNIX untuk melakukan pemetaan Anda yang memungkinkan klien NFS untuk terhubung ke server Anda tanpa harus terlebih dahulu ke CIFS (jika mereka bisa CIFS, tidak masuk akal untuk NFS?).

Jon Rhoades
sumber
1

Seperti yang disarankan oleh Mike Renfro di atas, idmap_rid adalah komponen utama. Di bawah ini adalah daftar perintah shell yang menjalankan dan menjalankan kotak, diberikan kotak RHEL5.5 yang baru:

paket client_:

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
sumber