Объединенный NFS, сервер Samba с пользователями из Active Directory

8

Я хочу создать сервер, который экспортирует домашние каталоги пользователей через SMB / CIFS и NFS. Этот сервер будет присоединен к контроллеру домена Win2k3 AD, который содержит нашу пользовательскую базу данных. Насколько я понимаю, winbind будет изобретать UID для этих пользователей на лету. Это сопоставление имени пользователя и UID должно быть доступно клиентам NFS, которые монтируют домашние каталоги, иначе владение файлами будет отображаться неправильно.

Я предполагаю, что это может быть достигнуто с помощью SFU, но, насколько я могу судить, SFU больше не поддерживается и не будет поддерживаться в последних версиях Windows, поэтому я бы предпочел не использовать его.

Как лучше всего предоставить это сопоставление клиентам NFS?

(Вы могли бы подумать, что это обычный случай использования, но я не могу найти подходящее руководство. Мой Google-фу может быть слабым.)

РЕДАКТИРОВАТЬ: Кроме того, было бы возможно в этом сценарии для пользователя для подключения через NFS без предварительного подключения через SMB / CIFS?

Bittrance
источник

Ответы:

4

(Изменить на 2017-07-05) Я бы вообще рекомендовал использовать sssd сейчас. Оставляя оригинальный ответ ниже для исторической справки. Мои текущие заметки для Ubuntu:

apt-get install openssh-server sssd-ad realmd packagekit
realm -v join example.com --computer-ou="OU=someOU,DC=example,DC=com" --user=someuser
  • В /etc/sssd/sssd.conf, [sssd]раздел, добавить default_domain_suffix = example.comи full_name_format = %1$s. В [domain/example.com]разделе отредактируйте fallback_homedir = /home/%d/%uи добавьте ignore_group_members = True. Для более крупных доменов добавьте, enumerate = falseчтобы sssd не проходил по всей AD, ища членство в группах (и задерживая не кэшированные входы в систему на одну или две минуты каждый).
  • Добавить session required pam_mkhomedir.so skel=/etc/skel/ umask=0076в конце /etc/pam.d/common-session. (или любой другой маски, который вы хотите использовать).
  • Перезапустите sssdсервис с service sssd restart.
  • Попробуйте войти на второй текстовой или графической консоли, или с помощью ssh localhost.

winbindбудет создавать UID по умолчанию в старых версиях Samba или будет вынужден обращаться к хранилищу LDAP, чтобы все было согласованно. Некоторое время этого не происходило (ноябрь 2004 г., если мои данные верны) - idmap_ridэто бэкэнд, который может генерировать UID из RID Active Directory (относительный идентификатор, часть SID пользователя).

Я написал свою конфигурацию для привязки систем Debian к существующей AD здесь - она ​​использует Puppet, но если вы только прочитаете ее для начальной точки в конфигурациях Samba и PAM, она должна работать в любой сопоставимой системе UNIX.

Обратите внимание, что я не использую SFU или каким-либо образом модифицирую схему AD. Все, что я хотел, это последовательный набор UID для моих пользователей.

Майк Ренфро
источник
Этот пост заставил меня на правильном пути. Смотрите ниже полный дамп того, что я сделал.
Биттранс
2

Компонент NFS служб для Unix теперь является частью роли служб для сетевой файловой системы в Server 2003 R2 и более поздних версиях.

Существует отличный блог Microsoft о СФУ - http://blogs.msdn.com/b/sfu/ . Соответствующая запись в блоге, объясняющая, как ее настроить, и полная статья Technet здесь .

Вы можете использовать расширение схемы Identity Management для UNIX Active Directory, чтобы выполнить сопоставление, позволяющее клиентам NFS подключаться к вашему серверу без необходимости сначала использовать CIFS (если они могут использовать CIFS, для NFS это не имеет большого смысла?).

Джон Роудс
источник
1

Как предложено Майком Ренфро выше, idmap_rid является центральным компонентом. Ниже приведен список команд оболочки, которые запускают и запускают коробку с новым блоком 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"

самба-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-клиент

172.18.0.2:/users       /cpy/users              nfs4    defaults        0 0
172.18.0.2:/shared      /cpy/shared             nfs4    defaults        0 0
Bittrance
источник