15.07.2014
В этой статье я рассмотрю по шагам подготовку к использованию Samba4 в роли контроллера домена вкупе с дополнительным файловым сервером так же на базе Samba4. Что в итоге мы получим? Два настроенных сервера с samba4, первый в роли domain controller, второй в роли member server с файлами пользователей. Функционирования этой связки я добивался около месяца, за сим, не поделится конечным рецептом просто не имею права…
Немного предыстории: в компании используется файловый сервер на базе samba3.6 с LDAP Backend, который содержит список всех пользователей и групп с правами доступа. Права доступа на каталоги выставляются с помощью xattr_acl (Extended file attributes), в LDAP хранится список пользователей с соответствием группам доступа. Собственно требуется переехать с этой инфраструктуры на samba4.
1. Подготавливаем два сервера для samba4, я использую дистрибутив SUSE Linux Enterprise 11 Service Pack 3 (SLES11 SP3) как корпоративный стандарт, поэтому разворачивать все буду именно на его базе. Далее можно собрать самбу из исходников, это по желанию, я же использую готовую сборку от sernet, которую можно бесплатно получить просто зарегистрировавшись на портале - Portal Enterprise Samba.
Sernet производит сборку самбы для нескольких дистрибутивов - Debian, Ubuntu, RHEL, CentOS, SLES, openSUSE.
Я использовал Samba4 версии 4.1.6
2. На первом сервере, который у нас выступит в роли DC, устанавливаем sernet-samba-ad. Если возникнут проблемы, можно заглянуть в официальную инструкцию - Samba AD DC HOWTO. Незабываем прописать имя нашего будущего домена в своем DNS сервере с указанием на наш новый сервер.
Далее выполняем создание домена с помощью samba-tools.
samba-tool domain provision --use-rfc2307 --interactive
Система запросит несколько параметров, которые необходимо указать, например такие как имя домена и т.д., а так же попросит задать пароль. Собственно только имя домена и нужно указать, все остальные вопросы можно оставить с ответами по умолчанию. Пароль администратора должен соответствовать стандартным политикам паролей в Windows, т.е. иметь как минимум одну маленькую и одну большую буквы, а так же цифры, плюс минимум 8 символов.
Копируем вновь сконфигуренный самбой конфиг Kerberos в место по умолчанию.
cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
Для проверки верной работы Kerberos можно установить krb5-client и проверить работу аутентификации.
kinit administrator@EXAMPLE.COM
klist
klist должен показать информацию по тикетам, если все ок - идем дальше.
Нужно подправить файл /etc/default/sernet-samba Правим строчку SAMBA_START_MODE= на следующую.
SAMBA_START_MODE="ad"
После этого можно запускать саму самбу
/etc/init.d/sernet-samba-ad start
Если запуск прошел удачно можно считать, что наш контроллер домена уже развернут.
Редактируем файл /etc/nsswitch.conf для того, что бы система увидела пользователей домена и группы, а так же могла нормально выставлять права на файлы. Приводим эти две строки к следующему виду:
passwd: compat winbind
group: compat winbind
Перезапустим систему и проверим, работает ли… с помощью getent passwd и getent group. Мы должны увидеть группы и пользователей из нашего домена. Более подробно про этот шаг можно почитать официальную инструкцию - Samba4/Winbind
Осталось ввести в домен любую машину с Windows для администрирования, думаю с этим проблем не возникнет.
3. На машине с Windows, которую мы ввели в домен устанавливаем admin pack. Используем оснастку по управлению пользователями в AD.
Каждой группе и пользователю нужно присвоить unix uid\gid для будущей нормальной работы xattr_acl на нашем втором сервере.
4. Пора начать готовить наш второй сервер, который выступит в роли member server и будет являться файловым сервером в домене.
Устанавливаем sssd, в стандартном репозитории SLES11 имеется версия 1.9.4, она нам вполне подойдет. Так же устанавливаем sssd-tools. sssd нужен для получения пользователей с unix атрибутами с нашего домена. Более подробно про настройку можно почитать в официальной инструкции - Local user management and authentication/sssd
Мы будем настраивать связь с AD через Kerberos.
На первом сервере (DC) нужно экспортировать keytab из Kerberos.
samba-tool domain exportkeytab /etc/krb5.sssd.keytab --principal=имя_вашего_DC$
chown root:root /etc/krb5.sssd.keytab
chmod 600 /etc/krb5.sssd.keytab
Для безопасности обрубим лишние права. Копируем keytab файл на наш второй сервер по этому же пути.
Редактируем sssd.conf
[sssd] services = nss, pam config_file_version = 2 domains = default
[nss]
[pam]
[domain/default] ad_hostname = smbad.samba4.servdesk.ru ad_server = smbad.samba4.servdesk.ru ad_domain = samba4.servdesk.ru
ldap_schema = rfc2307bis id_provider = ldap access_provider = simple
# on large directories, you may want to disable enumeration for performance reasons enumerate = true
auth_provider = krb5 chpass_provider = krb5 ldap_sasl_mech = gssapi ldap_sasl_authid = smbad$@SAMBA4.SERVDESK.RU krb5_realm = SAMBA4.SERVDESK.RU krb5_server = smbad.samba4.servdesk.ru krb5_kpasswd = smbad.samba4.servdesk.ru ldap_krb5_keytab = /etc/krb5.sssd.keytab ldap_krb5_init_creds = true
ldap_referrals = false ldap_uri = ldap://smbad.samba4.servdesk.ru ldap_search_base = dc=samba4,dc=servdesk,dc=ru
dyndns_update=false
ldap_id_mapping=false
ldap_user_object_class = user ldap_user_name = samAccountName ldap_user_uid_number = uidNumber ldap_user_gid_number = gidNumber ldap_user_home_directory = unixHomeDirectory ldap_user_shell = loginShell
ldap_group_object_class = group ldap_group_name = cn ldap_group_member = member
Не забудьте исправить имя вашего DC и вашего домена на свои. Ставим sssd в автозапуск, перезагружаем сервер.
Далее можно сбросить кеш и проверяем наши группы с пользователями.
sss_cache -UG getent group ... Schema Admins:*:10110:Administrator Domain Users:*:10103: DnsAdmins:*:10117: servdesk:*:10102:test
В списке должны быть наши группы и пользователями с uid\gid, которые мы задавали в AD остнастке в Windows.
5. Переходим к настройки samba4 на втором сервере, устанавливаем sernet-samba-nmbd, sernet-samba-smbd, sernet-samba-winbind и все зависимости для них. Более подробно про настройку можно почитать в официальной инструкции - Samba/Domain Member
Создаем smb.conf, мой файл выглядит вот так:
[global]
workgroup = SAMBA4 security = ADS realm = SAMBA4.SERVDESK.RU
# map untrusted to domain = Yes
idmap config *:backend = tdb idmap config *:range = 70001-80000
# idmap config SAMBA4:default = yes idmap config SAMBA4:backend = ad idmap config SAMBA4:schema_mode = rfc2307 idmap config SAMBA4:range = 500-40000 # idmap_ldb:use rfc2307 = yes
winbind nss info = rfc2307 winbind trusted domains only = no winbind use default domain = yes # winbind enum users = yes # winbind enum groups = yes
#create mask = 0777 #directory mask = 0777
vfs objects = acl_xattr btrfs map acl inherit = Yes store dos attributes = Yes
[data1] path = /data1/ read only = no
Не забываем подправить конфиг под себя, нужно сменить имя домена на ваш.
Правим наш файл hosts в нем необходимо прямо указать имя нашего member server, иначе зоны DNS не будут автоматически обновляться в AD.
127.0.0.1 localhost 127.0.0.1 samba3.samba4.servdesk.ru samba3
Запустим процедуру входа в наш домен.
net ads join -U administrator
Потребуется ввести пароль администратора.
Собственно после этого наш member server уже находится в домене.
Можно попробовать с Windows машины подключится на него под своим логином паролем и создать какую-нибудь папку, для проверки прав.
Создали папку 123, проверяем права.
getfacl /data1/123
# file: data1/123 # owner: test # group: Domain\040Users user::rwx user:test:rwx group::r-x group:servdesk:rwx group:Domain\040Users:r-x mask::rwx other::r-x default:user::rwx default:user:test:rwx default:group::r-x default:group:servdesk:rwx default:group:Domain\040Users:r-x default:mask::rwx default:other::r-x
Как видим, все права верно выставляются.
Далее можно начинать перенос пользователей в наш новый домен, а так же выставлять права на папки в соответствии с вашими пожеланиями.
Так же можно использовать glusterfs вкупе с samba4 для создания отказоустойчивого файлового сервера, но это уже совсем другая история.
|