Настройка 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: 21 комментарий

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

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

  1. Алексей

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

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

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

  3. Vilos

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

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

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

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

  4. 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»

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

  5. Vladimir

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

    Спасибо

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

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

  6. Александр

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

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

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

  7. Александр

    логах пишет 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 могут подтвердить, или опровергнуть другие камрады здесь в комментариях :)

  8. tinyurl.com

    Greetings, I think your site could possibly be having internet browser compatibility
    issues. Whenever I look at your web site in Safari,
    it looks fine however, if opening in I.E., it has some overlapping
    issues. I merely wanted to provide you with a quick heads
    up! Other than that, wonderful site!

  9. tinyurl.com

    Write more, thats all I have to say. Literally, it seems as though you relied on the video to make your point.

    You obviously know what youre talking about, why waste your intelligence on just posting videos to your blog when you could be giving us something enlightening to read?

  10. quest bars cheap

    Have you ever considered about adding a little bit more than just your articles?
    I mean, what you say is fundamental and all.
    However just imagine if you added some great photos or videos
    to give your posts more, «pop»! Your content is excellent but
    with images and videos, this blog could undeniably
    be one of the most beneficial in its niche. Excellent blog!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Не робот ли ты часом? * Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.