Назад | Перейти на главную страницу

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

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

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

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

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

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

(Изменить для 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 из Active Directory RID (относительный идентификатор, часть SID пользователя).

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

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

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

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

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

Как было предложено Майком Ренфро выше, 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"

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