CentOS: Samba сервер в домене
Всем нам, так или иначе, но приходится подниматься файловые сервера. И даже не важно — какого размера ваша компания или парк компьютеров — файловая шара пригодится всегда, как для обмена информации, или её централизованного хранения, либо как место хранения перемещаемых профилей доменных пользователей Windows (как пример — разберём именно эту ситуацию).
Для работы нам понадобятся 3 ващи: samba, winbind и kerberos, и ntp — устанавливаем:
korp# yum install samba samba-winbind ntp acl krb5-workstation
Первым делом нам нужно синхронизировать время на нашем linux-сервере с контролером домена, для этого мы отредактируем конфигурационный файл ntp:
korp# nano /etc/ntp.conf
server ad.domain.local
После чего первый раз синхронизируем время вручную:
korp# ntpdate ad.domain.local
и запустим ntpd, добавив его попутно в автозагрузку
korp# chkconfig ntpd on
korp# service ntpd start
Теперь мы переходим к настройке kerberos:
korp# nano /etc/krb5.conf
[libdefaults] default_realm = DOMAIN.LOCAL [realms] DOMAIN.LOCAL = { kdc = ad.domain.local admin_server = ad.domain.local default_domain = domain.local } [domain_realm] .domain.local = DOMAIN.LOCAL domain.local = DOMAIN.LOCAL
После чего пробуем получить тикет для входа в домен:
korp# kinit Administrator@DOMAIN.LOCAL
Командой klist мы можем проверить выданный нам тикет
korp# klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: Administrator@DOMAIN.LOCAL Valid starting Expires Service principal 05/29/12 11:59:31 05/29/12 21:59:34 krbtgt/DOMAIN.LOCAL@DOMAIN.LOCAL renew until 05/29/12 21:59:31
Ну а теперь мы можем переходить к самому интересному — настройке samba:
korp# nano /etc/samba/smb.conf
[global] workgroup = DOMAIN server string = Samba Server on DOMAIN Version %v security = ads encrypt passwords = yes realm = DOMAIN.LOCAL password server = ad.domain.local idmap uid = 10000-20000 idmap gid = 10000-20000 winbind enum users = yes winbind enum groups = yes winbind separator = + obey pam restrictions = Yes template homedir = /profiles/%U #директория, в которой будут храниться наши профиля, %U - имя авторизованного пользователя. соответственно у нас автоматически будут создаваться директории /profiles/user_name [profiles] comment = user profiles path = /profiles/%U #путь для пользователя будет выглядеть как /profiles/user_name, что упростит нам задачу browseable = yes read only = no inherit acls = yes inherit permissions = yes create mask = 700 directory mask = 700 valid users = @"MTELECOM+domain users" #разрешаем доступ всем пользователям домена, прошедшим аутентификацию.
Вы можете создать и отдельную группу в AD для доступа к серверу. Список групп можно посмотреть командой wbinfo -g, а список пользователей — wbinfo -u (для того что бы команды начали работать, необходимо запустить winbind, что мы сделаем немного позже, после его конфигурирования).
Теперь в файле nsswitch.conf нам нужно добавить что для доступа к AD мы будем использовать winbind (вообще winbind – это демон, работающий на клиентах samba и действующий как прокси для связи между PAM и NSS, работающими на компьютере linux, с одной стороны, и AD, работающей на контроллере домена, с другой. В частности, winbind использует kerberos для проверки подлинности с помощью AD и LDAP для получения информации о пользователях и группах).
korp# nano /etc/nsswitch.conf
passwd: files winbind group: files win bind
К моему сожалению, в CentOS 6 пакет samba-common не содержит шаблон конфигурационного файла PAM-модулей, для аутентификации через сервис winbind (system-auth-winbind). По этому нам придётся создать его самостоятельно:
korp# nano /etc/pam.d/system-auth-winbind
auth required pam_env.so auth sufficient pam_winbind.so auth sufficient pam_unix.so likeauth nullok use_first_pass auth required pam_deny.so account sufficient pam_winbind.so account required pam_unix.so password required pam_cracklib.so retry=3 password sufficient pam_unix.so nullok use_authtok md5 shadow password required pam_deny.so session required pam_mkhomedir.so skel=/etc/skel/ umask=0022 session required pam_limits.so session required pam_unix.so
Так же, по непонятной мне причине, параметр session required pam_mkhomedir.so не работает из файла /etc/pam.d/system-auth-winbind, по этому нам придётся дополнительно его описать в файле /etc/pam.d/samba
korp# nano /etc/pam.d/samba
session required pam_mkhomedir.so umask=0077
Теперь мы можем запустить samba и войти в домен:
korp# chkconfig smb on
korp# service smb start
korp# net ads join -U Administrator@DOMAIN.LOCAL
После чего мы должны получить сообщение о том, что наш сервер теперь является доменной машиной:
Using short domain name -- DOMAIN Joined 'FILESERVER' to realm 'domain.local'
Помните, что вы должны вводить сервер в домен под учётной записью администратора домена, либо пользователем, имеющим права на ввод компьютеров в домен. Теперь запустим winbind и проверим — всех ли мы видим:
korp# service winbind start
korp# wbinfo -g DOMAIN+domain guests DOMAIN+domain users DOMAIN+domain computers ...
korp# wbinfo -u DOMAIN+administrator DOMAIN+guest ...
Если всё видно, значит всё хорошо, нам остаётся лишь настроить фаервол, что бы он не блокировал порт samba (я как всегда напомню о своём любимом псевдоинтерфейсе system-config-firewall-tui) и перезагрузиться. После этого наш сервер готов к работе и всё что нам остаётся — на контролере домена указать месторасположение профиля пользователя. Так же не забудьте в DNS прописать ваш linux сервер.
т.к. в конфигурации samba мы указали path = /profiles/%U, то пользователь, при обращении к \\fileserver\profile будет попадать сразу в собственную директорию, что упрощает нам жизнь при создании пользователя (пусть до профиля у всех пользователей будет одинаков), так и то, что другие пользователи, просто физически не видят что там есть данные других пользователей, что в какой то мере сможет остановить многих шалунов 🙂
Надеюсь вам было интересно, полезно и у вас не возникнет проблем при настройке. Удачи.