Постановка задачи такая:
Есть в сети сервер, выполняющий функции файлопомойки, под управлением 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.logkdc = FILE:/var/log/krb5kdc.log[libdefaults]default_realm = DOMAIN.COMclockskew = 500 dns_lookup_realm = false dns_lookup_kdc = true ticket_lifetime = 324000[realms]DOMAIN.COM = {kdc = DC.DOMAIN.COMadmin_server = DC.DOMAIN.COMdefault_domain = DOMAIN.COM}[domain_realm].domain.com = DOMAIN.COM[login]krb4_convert = truekrb4_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 lmhostscase 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 = yeswinbind 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 если не существовала ранее.
не информативно как- то
вы не нашли ответ на свой вопрос в по этой теме? так задайте его в комментах, мб я смогу помочь. или вы просто тролите? :)
Вот именно с этой статьи начинаю читать этот блог. Плюс один подписчик :)
Статья лучшая из тех что нашёл. Спасибо
Вопрос такой как поменять директорию расположения файлов пользователей, не общую шару.
Директория с каталогами пользователей задается опцией «template homedir = /home/samba/%U» (в конфиге выше).
Если же имеется ввиду домашний каталог конкретного пользователя, то я в свое время использовал «mount» с опцией «bind», таким образом у меня самба-шары монтировались к личным фтп-директориям пользователей.
Как-то так в общем….:) Более подробно не помню…давно это было…
Спасибо, самый путний мануал! Мозг выгрыз пока прикручивал Debian к AD. Нашел твой мануал — все сделал на раз-два.
з.ы. Ты специально допустил ошибки в конфиге? :) типа для тех людей кто не просто копирует конфиг, а все-таки хочет разобраться в нем.
Рад что статья оказалась полезной.
В статье приведены примеры конфигов, в любом случае нужно подставлять свои переменные, бездумное копирование не сработает :)
Прошу прощения. Новичок.
Не могли бы вы дать ман по настройки AD.
Спасибо.
и реально сделать что бы была не одна общая папка, а несколько и подскажите пожалуйста как настроить доступ к общей папке определеному кругу пользователей (отделу)
в ближайшее время как раз собирался написать пару статей по этому поводу, а если горит — извините, но в гугл :)
Реально :)
создается в АД группа пользователей (в моем примере это smbusers) и в нее добавляются пользователи, которые должны иметь доступ к общей папке.
если нужно несколько отделов со своей общей папкой — создаете несколько групп и каждой группе прописываете свою папку в конфиге по шаблону:
подставляя свои значения.
Спасибо.
Не горит. буду ждать ман)
Доброе время суток. А не подскажете как подружить Squid + Squidguard+AD и хочу что бы шлюз раздавал ip по DHCP с привязью по МАС. И подскажите пожалуйста как я понимаю DNS в любом случае у нас на сервере с AD, а не на шлюзе?
Спасибо
насчет прокси — не подскажу, но видел такие связки, поэтому гуглите. Для DHCP — поднимите dhcpd на шлюзе, по поводу DNS — все верно.
Спасибо. буду пробовать. Про результаты могу отписаться если интересно.
В логах:
smbd/service.c:805(make_connection_snum)
create_connection_session_info failed: NT_STATUS_ACCESS_DENIED
Сетевые папки отображает, в каталоге /home/samba нет папок. Просит авторизацию при попытке пойти в любую из отображаемых папок.
Можете чего подсказать? OS Debain Wheezy
логах пишет smbd/service.c:805(make_connection_snum) create_connection_session_info failed: NT_STATUS_ACCESS_DENIED папка /home/samba пуста. на сервере оттображаются папки как положенно. При попытке зайти в любую из папок просит авторизоваться как Гость! Если есть какие-нибудь мыли, жду. ОС Debian Wheezy
Александр, к сожалению, не особо располагаю временем что бы помочь разобраться, посоветую только проверить права на папку /home/samba а так же посмотреть статью http://hutpu4.net/linux-open-source/oshibka-s-avtorizaciej-samba.html в которой я описывал проблему с авторизацией, после обновления. Не уверен, что это идентичные случаи, но т.к. решения этой проблемы я тогда не нашел, то могу предположить что данный мануал не совсем подходит для более новой версии Samba.
Я думаю, работоспособность данной конфигурации для Debian Wheezy могут подтвердить, или опровергнуть другие камрады здесь в комментариях :)
Пост старый, но мне помог. Только нужно еще поставить libpam-krb5 libpam-winbind libnss-winbind