В этой статье я рассмотрю по шагам подготовку к использованию 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 uidgid для будущей нормальной работы 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
В списке должны быть наши группы и пользователями с uidgid, которые мы задавали в 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: Domain40Users
user::rwx
user:test:rwx
group::r-x
group:servdesk:rwx
group:Domain40Users:r-x
mask::rwx
other::r-x
default:user::rwx
default:user:test:rwx
default:group::r-x
default:group:servdesk:rwx
default:group:Domain40Users:r-x
default:mask::rwx
default:other::r-x
Как видим, все права верно выставляются.
Далее можно начинать перенос пользователей в наш новый домен, а так же выставлять права на папки в соответствии с вашими пожеланиями.
Так же можно использовать glusterfs вкупе с samba4 для создания отказоустойчивого файлового сервера, но это уже совсем другая история…
Если у кого-то есть вопросы, буду рад оказать помощь.
Автор: AbyssMoon