Samba4 в роли AD + файловый сервер

  • Tutorial
    В этой статье я рассмотрю по шагам подготовку к использованию 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 для создания отказоустойчивого файлового сервера, но это уже совсем другая история…

Если у кого-то есть вопросы, буду рад оказать помощь.
Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама
Комментарии 24
  • 0
    Все бы хорошо, но мне кажется что samba4 в роли контроллера домена AD еще для продакшена еще не готова. Для сети 50 и более лучше купить лицензию на мастдая. Слишком сложна инфраструктура AD. Потерять домен из-за какого нибудь бага в Samba4 будет обидно. Кроме того samba на данный момент не полноценная замена мастдаю, например нет поддержки сайтов (если я не ошибаюсь). Пожалуй AD одна из немногих служб которую пока что (полноценно) не поднять на *nix системах.
    • +8
      Я с вами соглашусь, прежде чем использовать samba4 в продакшен нужно полностью протестировать все ваши возможные варианты работы с таким доменом, и если все устраивает, только в этом случае стоит внедрять это решение.
      В моем же случае, сеть состоит из более 1000 компьютеров, плюс это ФГУП ВНИИ, домен от MS на такое количество пользователей стоит баснословных денег… а без домена очень тяжело, в связи с этой ситуацией стараемся двигаться хоть каким-то путем в сторону домена…
      • +1
        Как давно внедрено у вас решение на samba4? Значительные косяки были? На клиентах стоит Win XP/7?
    • +2
      Каждой группе и пользователю нужно присвоить unix uid\gid для будущей нормальной работы xattr_acl на нашем втором сервере.

      Не обязательно. Да и накладно вручную заводить значения этих атрибутов при большом количестве пользователей и следить за их уникальностью.
      Для idmap есть прекрасный бэкенд IDMAP_RID:
      man idmap_rid
      

      При его использовании на всех samba серверах — у всех пользователей будут хорошие UID и GID (одинаковые на всех серверах) и будет обеспечена их уникальность в пределах домена.
      • 0
        По поводу уникальности, в Windows оснастка AD не дает указать uid\gid если он уже используется, а так же сама подставляет следующий uid\gid, идущий за последним указанным.
        Но спасибо за наводку, изучу idmap_rid. Вы использовали его с samba4?
        • +1
          Вам просто не нужно контролировать UID/GID через AD. Idmap_rid позволяет однозначно вычислять UID/GID через SID пользователя «на лету», поэтому на всех машинах UID/GID будут одинаковыми.
          • 0
            Я это понял, штука очень интересная этот idmap_rid, я благодарен за наводку. Но в моем случае мне как раз обязательно нужно вручную контролировать UID/GID через AD, т.к. у меня уже есть файловое хранилище на базе samba3.6, которое было обновлено до samba4, а на этом хранилище тысячи тысячи файлов и папок с выставленными acl по уже существующим UID/GID… в этом случае два варианта, либо указывать группам и пользователям в AD старые UID/GID, либо перебивать в глубоко запутанной файловой структуре ACL, первое явно проще…
      • +1
        Но спасибо за наводку, изучу idmap_rid. Вы использовали его с samba4?

        На макете — в «бой» решение не пошло (там всё сложно — smb proxy завести пытались ;) в итоге нашли лучшее решение), но с этим бэкендом получились самые хорошие результаты при использовании нескольких серверов.).
        • 0
          Интересно. Но это все еще уровень NT4 ??
          • 0
            samba3 — NT4,
            samba4 — AD.
            • +4
              По умолчанию при развертывании домена на samba4.1 устанавливается уровень Windows Server 2003, но можно поднять и до уровня 2008R2, но как дела с полноценной поддержкой 2008R2 насовсем ясно, для нас достаточно уровня 2003, если кто-то использовал более высокий уровень, попрошу подсказать, как там дела обстоят…

              smbad:/etc # samba-tool domain level show
              Domain and forest function level for domain 'DC=samba4,DC=servdesk,DC=ru'
              
              Forest function level: (Windows) 2003
              Domain function level: (Windows) 2003
              Lowest function level of a DC: (Windows) 2008 R2
              
            • 0
              Как там обстоит дело с групповыми политиками?
              • 0
                Политики работают, а репликация SysVol — нет.
              • 0
                Давно мечтаю перетащить свою маленькою сеть на никсы. Остался только КД. Проблема в перетаскивании пользователей из Windows. У кого нить такое получалось?
                • +2
                  Использую samba4 c 2009 года. В разных организациях. 150 человек тянет легко. Есть нюансы в настройках, которые почему-то не указываются в wiki. За 5 лет был один подвис, но тогда она еще альфой была. Для типичных контор без филиалов — правильное решение.
                  • 0
                    Есть нюансы в настройках, которые почему-то не указываются в wiki. За 5 лет был один подвис, но тогда она еще альфой была.

                    Поделитесь опытом в статье!
                    У меня к сожалению возможности использовать samba4 в таких масштабах нет, но вопрос очень интересный!
                    • +3
                      Статей доволно много на хабре… писать похожую не очень-то и хочется.
                      Так как я с samba4 с 2009, то исторически так сложилось, что у меня два samba4 выполнятю роль только домен-контроллера. На них же лежит sysvol, а samba-3.6 работают как помойки, сервера печати, хранилище инсталяционных программ и прочее…
                      Что не удобно:
                      Sysvol:
                      1. Для себя я опредилил, что один из серверов первичный контролер, а другой по крону стягивает sysvol rsync'ом как в вики. Можно конечно заморочится какой-нибудь кластерной системой, но я не так часто правлю групповые политики. В нашем случае два админа, договорились что все правки скриптов и политик делаем только на основном контроллере.
                      */5 * * * * /usr/bin/rsync -XAaz --delete-after --password-file=/var/lib/samba/private/rsyncd.secret2 rsync://sysvol-replication@sds.office.company.ru/SysVol /var/lib/samba/sysvol/
                      2. Для обновления тикита bind
                      2. 4 2,5,8,11,14,17,20,23 * * * /usr/bin/kinit -R bind-user@OFFICE.COMPANY.RU
                      Для поддержания актуального ключа, к примеру если у вас samba3 на FreeBSD
                      /usr/bin/kinit --renewable -k host/parus.office.company.ru@OFFICE.COMPANY.RU
                      /usr/bin/kinit -R -k host/parus.company.ru@OFFICE.COMPANY.RU
                      На Линуксе подобная идея…
                      3. backup samba
                      tar -czf samba_db.tgz /etc/samba /var/lib/samba/private /var/lib/samba/sysvol
                      для уверенности
                      tar -czf samba_db.tgz /etc/samba /var/lib/samba
                      Этого достаточно, чтобы в gentoo перетащить в случае краха весь AD на новую машину. Для тех кто ненавидит gentoo: в этом дистрибутиве все нужные и свежие пакеты для самбы находятся по умолчанию и новые версии в портаджах появляются мгновенно. Т.е. не надо ничего качать и доставлять, если появляется новая версия или находится уязвимость.
                      Сам архив будет занимать смешной объем. Причем, если нет активной работы, то можно в открытом состоянии забэкапить, понятное дело что вы рискуете, но даже так все обычно хорошо поднимается. НО безусловно лучше остановить, заархивировать, потом запустить ;-) Второй домен контролеер как раз для этого и нужен.
                      4. Когда у вас один домен и вы не собираетесь использовать в будущем два домена или более, то лучше не заморачиваться с rfc2307, так как idmap_rid проще!!! Но если Вам не нравится идея добавления к базовому значению uid sid'а пользователя, группы, то помимо прописывания в AD uid пользователя и группы, вам так же нужно будет прописать uidNumber для всех компьютеров пользователей, через дополнительные атрибуты. Вот это больше всего парит при добавлении нового компьютера в систему. Можно сгородить скрипт, но все это как-то не красиво. Простое решение — не использовать rfc2307 для простых организаций укоторых не будет более одного домена.
                      ldbedit -H /var/lib/samba/private/idmap.ldb для правки UID тех системных групп, которым не удасться просавить uidNumber. Тут не бойтесь, все просто.
                      Я работал как с idmap_rid, так и с rfc2307. Когда нужна экономия номеров uid, у вас один сервер/хранилище используется для разных доменов, то rfc2307 ваш выбор, а если вы ленивы, то пользуйтесь idmap_rid

                      5. Для сторонних программ/серверов нужно выгружать ключи и прописывать их.
                      samba-tool domain exportkeytab --principal=host/sds.office.company.ru@OFFICE.COMPANY.RU /etc/krb5.keytab

                      Да, эти небольшие неудобства — плата за бесплатность ;-) Новые DC или сервера не так часто добавляются, так что можно потерпеть при первоночальной настройке. Зато как приятно, после ядерного взрыва из малюсенького бэкапа быстро развернуть погибший AD на новом сервере ;-)))
                      • 0
                        Спасибо. Это и есть ньюансы в настройках?
                        Сохраню для себя — пригодится.
                        Для тех кто ненавидит gentoo: в этом дистрибутиве все нужные и свежие пакеты для самбы находятся по умолчанию и новые версии в портаджах появляются мгновенно.

                        Её не ненавидят ;). Просто не любят те, кто не умеет её готовить.
                        А вообще в крупной инсталляции (любая малая инсталляция стремится стыть крупной!) с её обновлением начинаются проблемы. Всё-таки это скорее дистрибутив для экспериментов (и в этом ей пожалуй нет равных!). Gentoo надо регулярно обновлять. Если обновлять нерегулярно — появляются проблемы с обновлением…
                        Причём регулярное обновление тоже может принести проблемы (маловероятно, но может).
                        Поэтому держать большой парк gentoo серверов порой выходит накладно.
                        • 0
                          Честно говоря самба стоит давно и основные проблемы были с ней, когда я обнавлялся с какой-то альфы… Приходилось удалять в tdb файлах объекты и проче, нарезать в ручную партиции для DNS семы, короче жесть, только чтобы не персоздавать домен заново ;-))) Но на то она и альфа, чтобы не гарантировать беспроблемную работу.
                          По поводу gentoo. На самом деле у меня есть сервера, где стоит, к примеру, такое чудо как Oracle 9i, а оно как известно зависит от старых glibc и прочей хрени. В случае gentoo не так сложно систему 2002-2004 года обновить до текущего состояния, для того чтобы она, к примеру работала в виртуалке на KVM с драйверами virtio. Только не надо сразу ставить последнее дерево портов. Нужно скачать несколько промежуточных. Т.е. обновляемся до 2005 года, дале до 2006 и так далее. В итоге самый старый сервак можно обновить до текущего состояния, не снося ничего! Да, согласен, что есть опасность возникновения проблем, но для этого виртуалки и созданы, чтобы сначало это проделать на копии, а потом в реальной системе запустить. Мне проще обновлять все сервера, чем их переустанавливать и вспоминтать все ньюансы… А так да, генту для умеющих ее готовить ;-)
                    • –1
                      Я сейчас с Zentyal экспериментирую. В домен влетел как пуля, юзеры бегают туда обратно, отключаешь Win Serv и линь в одиночку отлично работает. Руки не дошли до DNS.
                      Тут было мнение, что мол в винде все просто для домохозяек. Клик, клик и домен. Это было последней фишкой винды. Но в этом сервере все так же просто. и при том что это СПО.
                      Наверное будет столько же возмущений теперь уже со стороны линуксоидов. Типа все графическое, не тру линукс. В реальности, начинающему сложно с наскоку одолеть пингвина. Но если начать в маленькой фирме домен с такого Linux то дальнейшее направление человека будет именно в Linux.
                    • +1
                      Работал как c idmap_rid, так и с rfc2307. Если используете rfc2307, то нужно не забыть, что не всем группам UID можно поставить, по этому ldbedit вам в помощь, при разворачивании какой-нибудь новой файловой помойки, чтобы поправить uid группе «Прошедшие проверку». Правится все легко и просто. Все эти UID одинаковые нужны для того чтобы не болела голова при переносе данных или в случае восстановления из backup'а.
                      Если вы опытный админ, и чувствуете в себе силы, «если что разобраться», то даже не сомневайтесь в переходе на samba4. Обычную фирму с несколькими сотнями человек с двумя контролерами без всяких «лесов» только так переведете.
                      Если будете ставить bind, то не забудьте обновлять ключ по крону от биндового пользователя, а то есть все шансы поиметь проблемы с затупливанием ВСЕГО bind DNS!!! при обновлении зоны.
                    • 0
                      Прошу прощения, что задаю вопрос спустя полгода: а как правильно делать бэкап домена на основе samba4?
                    • 0
                      В Вашем руководстве для sssd на втором сервере используется отдельный keytab, причём для принципала, соответствующего контроллеру. А не проще и правильнее сначала сделать net ads join, образуется /etc/krb5.keytab (если не образуется, то вызвать net ads keytab create) с принципалом второго сервера, который и использовать в sssd, с указанием этого второго принципала?
                      т.е.

                      ldap_krb5_keytab = /etc/krb5.keytab
                      ldap_sasl_authid = samba3@SAMBA4.SERVDESK.RU

                      имя определить через klist -k /etc/krb5.keytab.т.к. буквы в имени м.б. и заглавными

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.