Как подружить Samba 3 и контроллер домена Windows 2003 SP1

Этот документ описывает интеграцию файл-сервера Samba в Windows 2003 Active Directory. К сожалению, Samba не может функционировать как контроллер домена Windows 2003. Однако на Samba можно поднять хороший файл- или принт-сервер.
Этот документ, основан на моем собственном опыте и советах других людей. В случае, если Вы обнаружите в нем ошибку, пожалуйста свяжитесь со мной.

Требования:
Samba версии 3.х.х собранная с опциями:
--with-ldap
--with-ads
--with-krb5
--with-pam
--with-winbind

heimdal >0.6.3(утилиты\библиотеки kerberos)
OpenLDAP >2.2.23
Сервер Windows 2003 sp1 с Active Directory :)

Все испытывалось на Suse Linux 9.1 и Windows 2003 Standart Server SP1

Условимся что:
192.168.0.1 – server.domain.com – это сервер Windows 2003
192.168.0.10 – client.domain.com – клиентская машина Linux с Samba

Настройка разрешения имен
Надеюсь что на вашем контроллере домена поднят DNS с зонами прямого и обратного просмотра.
Если поднят, то в файле /etc/resolv.conf прописываем следующее:

search domain.com
domain domain.com
nameserver 192.168.0.1

Если же в сети нет DNS(что вряд ли) сервера - можно воспользоваться файлами hosts на обеих машинах.

На машине с Samba в файл /etc/hosts добавляем:

192.168.0.1 server.domain.com server
192.168.0.10 client.domain.com client

На контроллере домена в файле %Systemroot%\System32\drivers\etc\hosts пишем следующее:

192.168.0.1 server server.domain.com
192.168.0.10 client client.domain.com

%Systemroot% - папка WINNT или WINDOWS(на системном диске)

Настройка Kerberos.

Часть этого документа использует DOMAIN.COM прописными буквами. Удостоверьтесь, что в вашем конфиге krb5.conf правильный регистр!

Приводим файл krb5.conf в соответствие с настройками вашей сети(не забывайте про регистр!).

[libdefaults]
default_realm = DOMAIN.COM

[realms]
SERVER.DOMAIN.COM = {
kdc = server.domain.com
}

[domain_realms]
.domain.com = DOMAIN.COM

После этого выполняем команду(необходимо знать пароль администратора КД):

pfil:/etc/samba # kinit Admin@DOMAIN.COM
Admin@DOMAIN.COM 's Password:
kinit: NOTICE: ticket renewable lifetime is 1 week
pfil:/etc/samba #

Возможные проблемы на этом этапе:

pfil:/etc/samba # kinit Admin@DOMAIN.COM
Admin@DOMAIN.COM 's Password:
kinit: krb5_get_init_creds: Client (Admin@DOMAIN.COM) unknown
pfil:/etc/samba #

Надо проверить правильность ввода логина\пароль админа.

pfil:/etc/samba # kinit Admin@DOMAIN.COM
Admin@DOMAIN.COM 's Password:
kinit: krb5_get_init_creds: unable to reach any KDC in realm (DOMAIN.COM)
pfil:/etc/samba #

Проверьте правильность настроек DNS и конфига krb5.conf

pfil:/etc/samba # kinit Admin@DOMAIN.COM
Admin@DOMAIN.COM 's Password:
kinit: krb5_get_init_creds: Clock skew too great
pfil:/etc/samba #

Рассинхронизация времени на КД и клиенте – выполните команду net time set(в linux) Желательно выполнять данную команду раз в неделю(можно через cron).

Настройка Samba и Winbind:
Пожалуй, самая легкая часть настройки.

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

[global]
log file = /var/log/samba/log.%m
socket options = TCP_NODELAY SO_SNDBUF=8192 SO_RCVBUF=8192
null passwords = yes #Разрешить пустые пароли
interfaces = 192.168.0.10/255.255.255.0 #На каком интерфейсе работать
hosts allow = 192.168.0. 127.0.0.1 #Хостам из каких сетей разрешено
encrypt passwords = yes
idmap uid = 10000-20000
idmap gid = 10000-20000
auth methods = winbind
winbind enum groups = yes
winbind enum users = yes
winbind use default domain = yes
name resolve order = hosts wins bcast lmhosts
case sensitive = no
dns proxy = no
netbios name = client #NetBIOS имя машины
server string = My Linux
password server = server.domain.com #dns имя сервера win 2003
realm = DOMAIN.COM #Имя рилма
client use spnego = yes
client signing = yes
local master = no
domain master = no
preferred master = no
workgroup = DOMAIN #Укороченное имя домена
debug level = 2
security = ads
dos charset = 866
unix charset = UTF-8 #Кодировка ФС –UTF-8 или KOI8-R
max log size = 50
os level = 0
wins server = 192.168.0.1 #Укажите здесь WINS сервер, если он есть

[upload]
comment = Upload
path = /srv/smb/upload
browseable = yes
writeable = yes
directory mask = 0777
create mask = 0666
valid users = @”Администраторы домена”, DOMAIN\Пользователь

Входим в Active Directory
Убедившись, что на контроллере домена нет машин с именем, которое мы использовали в конфиге Samba. Выполняем команду:

net ads join -U Admin

Настройка PAM и Winbind

Перед выполнением нижеперечисленных действий рекомендуется сделать бэкап всех редактируемых файлов.

Файл /etc/pam.d/samba не требует редактирования, т.к. он уже содержит необходимое.
Редактируем /etc/pam.d/login

#%PAM-1.0
auth required pam_securetty.so
auth sufficient pam_winbind.so
auth sufficient pam_unix.so use_first_pass
auth required pam_stack.so service=system-auth
auth required pam_nologin.so
account sufficient pam_winbind.so
account required pam_stack.so service=system-auth
password required pam_stack.so service=system-auth
session required pam_stack.so service=system-auth
session optional pam_console.so

Теперь на машину с linux можно заходить используя доменные аккаунты(DOMAIN\User).

Поддержка SSH

Для того, чтобы можно было использовать доменные аккаунты для входа через ssh в файле /etc/pam.d/sshd делаем изменения аналогично /etc/pam.d/login.

Заключение
Ну вот и все. Теперь можно запустить Samba:

/etc/init.d/smb start
/etc/init.d/nmb start
/etc/init.d/winbind start

В случае неполадок смотрим: /var/log/samba

RSS-материал