Настройка Samba сервера с авторизацией через Active Directory в Debian

Постановка задачи такая:

Есть в сети сервер, выполняющий функции файлопомойки, под управлением Linux. Помимо сервера в сети есть виндовые машины, которые должны хранить файлы на этом сервере. У каждого пользователя на сервере должна быть личная папка и одна общая для всех пользователей.

Все вроде бы просто — поставил Самбу, наделал пользователей идентичных виндовым и радуйся жизни. Так в принципе оно и было какое-то время, но захотелось перемен — решил немного автоматизировать и упростить администрирование своей файлопомойки, т.к. юзеры растут как грибы и «надо шото делать».

Исходя из этого, было решено построить такую схему:

развернуть АД и прикрутить к нему файлсервер Samba с аутентификацией через Active Directory. При этом, когда пользователь впервые подключается к серверу, автоматически создается личная папка, которая доступна как шара только конкретному пользователю.

С настройкой АД все понятно (скучно). А вот с настройкой Самбы пришлось поиграться. Как сделать это в Debian lenny я и расскажу в данной статье.

Рассчитываем что контроллер домена и ДНС у нас уже настроены.

$ sudo apt-get install samba winbindd smbclient krb5-user

Winbind — это демон, который позволяет Самбе узнавать пользователей AD и общаться с ними как с локальными.

Kerberos используется для интеграции Samba в Active DIrectory. Открываем его конфиг и подставляем свои параметры (выделил красным):

$ sudo nano /etc/krb5.conf
[logging]
default = FILE:/var/log/krb5.log
kdc = FILE:/var/log/krb5kdc.log
[libdefaults]
default_realm = DOMAIN.COM
clockskew = 500 dns_lookup_realm = false dns_lookup_kdc = true ticket_lifetime = 324000
[realms]
DOMAIN.COM = {
kdc = DC.DOMAIN.COM
admin_server = DC.DOMAIN.COM
default_domain = DOMAIN.COM
}
[domain_realm]
.domain.com = DOMAIN.COM
[login]
krb4_convert = true
krb4_get_tickets = false

Проверяем правильность настроек:

$ kinit domain_user@DOMAIN.COM

domain_user — пользователь с правами входа в домен. Если все правильно — команда завершиться без вывода на экран. У меня все прошло без ошибок, но вот самые распространенные из них:

kinit: krb5_get_init_creds: Client (domain_user@DOMAIN.COM) unknown

Неправильный логин или пароль пользователя domain_user.

kinit: krb5_get_init_creds: unable to reach any KDC in realm (DOMAIN.FOO)

Стоит проверить правильность конфига и настройки ДНС.

kinit: krb5_get_init_creds: Clock  skew too great

Несоответствие времени на контроллере домена и на нашем сервере. Синхронизировать время с Active Directory можно командой:

$ sudo ntpdate DC.DOMAIN.COM

Теперь настроим Самбу и Winbind. Мой работающий конфиг ниже, можно просто скопировать его подставив свои данные (выделил красным):

 [global]
 obey pam restrictions = Yes
 log file = /var/log/samba/log.%m
 log level = 1
 socket options = TCP_NODELAY SO_SNDBUF=8192 SO_RCVBUF=8192

 encrypt passwords = yes 

 idmap uid = 10000-40000
 idmap gid = 10000-40000

 auth methods = winbind
 name resolve order = hosts bcast lmhosts
 case sensitive = no
 dns proxy = no
 netbios name = SAMBA
 server string = %v samba
 password server = dc.domain.com
 # обязательно указывать имя домена в верхнем регистре
 realm = DOMAIN.COM
 client use spnego = yes
 client signing = yes
 local master = no
 domain master = no
 preferred master = no
 workgroup = DOMAIN
 debug level = 2
# ads указывает что авторизация проходит на уровне домена
 security = ads
 template homedir = /home/samba/%U
 template shell = /bin/false
 unix charset = UTF-8
 dos charset = 866
 max log size = 50
 os level = 0
 follow symlinks = yes
 winbind separator = \
 winbind uid = 10000-20000
 winbind gid = 10000-20000
 winbind enum groups = yes
 winbind enum users = yes
# этот параметр поможет в корректном соблюдении прав доступа к папкам
 winbind use default domain = yes

 [Homes]
 valid users = @"DOMAIN smbusers"
 read only = no
 browseable = no
 create mask = 0700
 directory mask = 0700
 null passwords = no 

 [Public]
 path = /home/samba/public
 comment = Public directory
 browseable = yes
 readonly = no
 writable = yes
 guest ok = No
 create mask = 0777
 valid users = @"DOMAIN smbusers"
 read list = @"DOMAIN smbusers"
 write list = @"DOMAIN smbusers"

Внимание! Имя домена указывается в верхнем регистре.

Раздел [Homes] и расшаренные папки могут отличаться от указанных. В моем конфиге они настроены в соответствии с требованиями, описанными в начале статьи.

В моем случае smbusers  — группа в Active Directory, пользователи которой будут иметь доступ к общей папке и к личным папкам. Что бы домашняя директория создавалась автоматически в /home/samba/имя_пользователя, когда пользователь впервые подключается к серверу Samba, помимо настроек в /etc/samba/smb.conf, нужно прописать также определенную запись в /etc/pam.d/samba:

$ sudo echo "session required pam_mkhomedir.so umask=0077 skel=/etc/samba/skel/" >> /etc/pam.d/samba

umask=0077 — соответствует правам доступа 0700.

skel=/etc/samba/skel/ — путь к папке, содержимое которой будет скопировано в созданную директорию.

Далее открываем /etc/nsswitch.conf и редактируем указанные строки:

passwd:         compat  winbind
group:          compat  winbind
shadow:         compat  winbind

Рестартуем сервисы:

$ sudo /etc/init.d/winbindd restart
$ sudo /etc/init.d/samba restart

Вводим компьютер в домен:

$ net ads join -U domain_user

domain_user — пользователь домена, у которого достаточно привилегий для присоединения компьютера к домену.

Проверим работу winbindd:

$ wbinfo -u
$ wbinfo -g

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

Что бы проверить воспринимаются ли доменные пользователи как локальные, можно воспользоваться командой:

$ id domain_user

Должны получить что-то типа:

uid=10002(domain_user) gid=10006(пользователи домена),10008(smbusers),10003(BUILTIN users)

Вот и все.

Теперь, при подключении к нашему серверу с винды под доменной учетной записью domain_user, мы должны видеть 2 расшаренные папки — «domain_user» и «Public». При этом папка domain_user будет создана в /home/samba если не существовала ранее.

Настройка Samba сервера с авторизацией через Active Directory в Debian: 17 комментариев

    1. HuTpu4 Автор записи

      вы не нашли ответ на свой вопрос в по этой теме? так задайте его в комментах, мб я смогу помочь. или вы просто тролите? :)

  1. traimerve

    Вот именно с этой статьи начинаю читать этот блог. Плюс один подписчик :)

  2. Алексей

    Статья лучшая из тех что нашёл. Спасибо
    Вопрос такой как поменять директорию расположения файлов пользователей, не общую шару.

  3. Доктор Добрянский Автор записи

    Директория с каталогами пользователей задается опцией «template homedir = /home/samba/%U» (в конфиге выше).
    Если же имеется ввиду домашний каталог конкретного пользователя, то я в свое время использовал «mount» с опцией «bind», таким образом у меня самба-шары монтировались к личным фтп-директориям пользователей.
    Как-то так в общем….:) Более подробно не помню…давно это было…

  4. Vilos

    Спасибо, самый путний мануал! Мозг выгрыз пока прикручивал Debian к AD. Нашел твой мануал — все сделал на раз-два.

    з.ы. Ты специально допустил ошибки в конфиге? :) типа для тех людей кто не просто копирует конфиг, а все-таки хочет разобраться в нем.

    1. Доктор Добрянский Автор записи

      Рад что статья оказалась полезной.
      В статье приведены примеры конфигов, в любом случае нужно подставлять свои переменные, бездумное копирование не сработает :)

  5. Vladimir

    Прошу прощения. Новичок.
    Не могли бы вы дать ман по настройки AD.
    Спасибо.

    и реально сделать что бы была не одна общая папка, а несколько и подскажите пожалуйста как настроить доступ к общей папке определеному кругу пользователей (отделу)

    1. Доктор Добрянский Автор записи

      Не могли бы вы дать ман по настройки AD

      в ближайшее время как раз собирался написать пару статей по этому поводу, а если горит — извините, но в гугл :)

      и реально сделать что бы была не одна общая папка, а несколько

      Реально :)

      подскажите пожалуйста как настроить доступ к общей папке определеному кругу пользователей (отделу)

      создается в АД группа пользователей (в моем примере это smbusers) и в нее добавляются пользователи, которые должны иметь доступ к общей папке.
      если нужно несколько отделов со своей общей папкой — создаете несколько групп и каждой группе прописываете свою папку в конфиге по шаблону:

      [Public]
      path = /home/samba/public
      comment = Public directory
      browseable = yes
      readonly = no
      writable = yes
      guest ok = No
      create mask = 0777
      valid users = @»DOMAIN smbusers»
      read list = @»DOMAIN smbusers»
      write list = @»DOMAIN smbusers»

      подставляя свои значения.

  6. Vladimir

    Доброе время суток. А не подскажете как подружить Squid + Squidguard+AD и хочу что бы шлюз раздавал ip по DHCP с привязью по МАС. И подскажите пожалуйста как я понимаю DNS в любом случае у нас на сервере с AD, а не на шлюзе?

    Спасибо

    1. Доктор Добрянский Автор записи

      насчет прокси — не подскажу, но видел такие связки, поэтому гуглите. Для DHCP — поднимите dhcpd на шлюзе, по поводу DNS — все верно.

  7. Vladimir

    Спасибо. буду пробовать. Про результаты могу отписаться если интересно.

  8. Александр

    В логах:
    smbd/service.c:805(make_connection_snum)
    create_connection_session_info failed: NT_STATUS_ACCESS_DENIED

    Сетевые папки отображает, в каталоге /home/samba нет папок. Просит авторизацию при попытке пойти в любую из отображаемых папок.

    Можете чего подсказать? OS Debain Wheezy

  9. Александр

    логах пишет smbd/service.c:805(make_connection_snum) create_connection_session_info failed: NT_STATUS_ACCESS_DENIED папка /home/samba пуста. на сервере оттображаются папки как положенно. При попытке зайти в любую из папок просит авторизоваться как Гость! Если есть какие-нибудь мыли, жду. ОС Debian Wheezy

    1. Доктор Добрянский Автор записи

      Александр, к сожалению, не особо располагаю временем что бы помочь разобраться, посоветую только проверить права на папку /home/samba а так же посмотреть статью http://hutpu4.net/linux-open-source/oshibka-s-avtorizaciej-samba.html в которой я описывал проблему с авторизацией, после обновления. Не уверен, что это идентичные случаи, но т.к. решения этой проблемы я тогда не нашел, то могу предположить что данный мануал не совсем подходит для более новой версии Samba.
      Я думаю, работоспособность данной конфигурации для Debian Wheezy могут подтвердить, или опровергнуть другие камрады здесь в комментариях :)

  10. Макс

    Пост старый, но мне помог. Только нужно еще поставить libpam-krb5 libpam-winbind libnss-winbind

Обсуждение закрыто.