настраиваем Samba для работы с Active Directory и Win 2003
Возникла у меня задача организовать небольшую файловую помойку на Linux для пользователей Windows, которыми руководит AD.
Перечитал кучу документации, но, делая, как сказано в документации, я никаких результатов не добился. Вот поэтому и решил написать данное небольшое руководство. Сразу оговорюсь, что за последствия, повлекшие за собой какие-либо деструктивные действия, ответственности не несу. Итак, первое, что нам надо сделать - это выяснить, как же, все-таки, работает домен на Windows 2003. Честно говоря, я и сам до сих пор в этом деле не разобрался, но могу сказать одно, что почти вся его работа с шарами происходит по протоколу Kerberos 5. Когда пользователь входит в систему, он проходит несколько этапов проверки на правильность логина и пароля. И на одном из этих этапов сервером выдается пользователю так называемый билет Kerberos, который в дальнейшем и используется для работы.
Если Windows использует Kerberos, то и Linux тоже надо научить общаться по этому протоколу. Но не стоит забывать, что Windows также работает и с протоколом LDAP. Ну ничего, научим.
Начнем собирать необходимые программы для обучения Linux. Так как в Slackware 10.2, которым я пользовался для решения описанной задачки, используется пакет Samba, то может показаться, что добывать его не понадобится, но это не совсем так. На самом деле этот пакет нам придется удалить из системы так как он собран без поддержки всех так необходимых нам вещей.
Удалить его можно с помощью утилиты pkgtool. Утилита довольно понятная, и, я думаю, вы сами с ней разберетесь. Далее нам понадобятся исходные коды:
- heimdal-0.7.tar.gz;
- openldap-2.3.20.tgz;
- samba-3.0.21c.tar.gz.
На момент моих долгих мучений с настройкой это были свежие версии.
Сначала надо собрать heimdal-0.7.tar.gz. Это собственно и есть реализация протокола Kerberos 5. Скачиваем из интернета, разархивируем и собираем с помощью ./configure make и make install. По умолчанию все собирается в папку, отличную от /usr, меня лично это не устраивает, так как потом при конфигурировании samba придется ручками указывать все пути, поэтому я собирал так:
./configure prefix=/usr
make
make install DESTDIR=/test/krb5
При сборке данным способом на Slackware 10.2 нужно будет установить еще дополнительный пакет - db4-4.4.20-i486-1.tgz. Для того, чтобы не устанавливать его, можно heimdal собрать так:
./configure --prefix=/usr --disable-berkeley-db
make
make install DESTDIR=/test/krb5
Последняя команда копирует все файлы в каталог /test/krb5 (перед выполнением этой команды сначала надо создать данную директорию). Это делается для того, что бы потом можно было создать пакет для Slackware, так как все-таки управлять пакетами проще, чем потом удалять файлы в системе вручную. Если все прошло успешно, то переходим в каталог /test/krb5 и с помощью команды
makepkg krb5.tgz
собираем пакет и устанавливаем:
installpkg krb5.tgz.
То же самое проделываем и с openldap-2.3.20.tgz. Замечу, что в Slackware 10.2 просто так он не собирался, так как требуется еще несколько пакетов. Если собираете в Slackware current, то должно собраться без вопросов, во всяком случае, у меня на current все собралось на ура. Для Slackware 10.2 еще понадобится пакет db4-4.4.20-i486-1.tgz, он нужен как для Kerberos (если собирать первым способом), так и для Ldap. Но можно собрать и без этого пакета:
./configure -enable-bdb=no -enable-hdb=no
Вот теперь можно переходить к самой главной программе - samba.
Samba надо собирать с поддержкой ldap, kerberos, AD и winbind.
Разархивируем исходники и перейдем в директорию, куда их разархивировали, в поддиректорию source. Первое, что надо сделать – это посмотреть помощь по сборке. Команда
./configure –help
выведет большой список с параметрами. Нам нужно только несколько из них, поэтому я не буду описывать все, а просто приведу нужную команду (конечно, если вам нужны и другие опции, просто добавьте их).
./configure -prefix=/usr --with-configdir=/etc/samba --with-winbind --with-ads --with-krb5 --with-smbmount -with-ldap
make
make install DESTDIR=/test/samba
cd /test/samba
makepkg samba.tgz
(не забудьте удалить старую samba перед установкой)
installpkg samba.tgz
Тех, кто считает, что пакет ldap не нужен для работы samba в режиме файлового сервера для пользователей AD, хочу сразу предупредить: если не поставить ldap, при конфигурировании samba с параметром --with-ads будет выдаваться ошибка (нет ldap-модулей в системе). Поэтому сборка ldap необходима.
Теперь надо сконфигурировать стартовые скрипты.
Переходим в каталог /etc/rc.d и в файле rc.samba добавляем такие строки.
samba_start() {
if [ -x /usr/sbin/smbd -a -x /usr/sbin/nmbd -a -r /etc/samba/smb.conf -a -x /usr/sbin/winbindd ];then
echo "Starting Samba: /usr/sbin/smbd -D"
/usr/sbin/smbd -D
echo " /usr/sbin/nmbd -D"
/usr/sbin/nmbd -D
echo " /usr/sbin/winbind"
/usr/sbin/winbindd
fi
}
samba_stop() {
killall smbd nmbd winbindd
}
Если вы придерживаетесь другой манеры написания стартовых скриптов – ваше право, пишите, как вам удобнее.
Не забудьте, что стартап-скрипт должен быть исполняемым ;)
Далее настраиваем Kerberos. Надо скопировать файл krb5.conf из папки, куда вы разархивировали исходники, в папку /etc и отредактировать его. Вот какой он у меня:
[libdefaults]
default_realm = LOCAL.NET
[realms]
LOCAL.NET = {
kdc = SERV.LOCAL.NET
}
[domain_realm]
.local.net = LOCAL.NET
где:
- LOCAL.NET - это имя домена;
- SERV.LOCAL.NET - имя компьютера под управлением Windows 2003, который является Primary Domain Controller.
Затем редактируем файл /etc/nsswitch.conf.
passwd: files winbind
shadow: files winbind
group:files winbind
#эти строчки должны быть обязательно закомментированы, иначе не будет работать.
#passwd: compat
#group:compat
hosts:files dns
networks: files
services: files
protocols:files
rpc:files
ethers: files
netmasks: files
netgroup: files
bootparams: files
automount:files
aliases:files
Теперь надо отредактировать самый главный файл для нашей задачи. Это /etc/samba/smb.conf:
[global]
auth methods = winbind # определяем метод аутентификации через winbind
netbios name = McLeodLinux # netbios-имя компьютера
workgroup = LOCAL # рабочая группа (имя домена без суффикса .NET)
realm = LOCAL.NET # имя домена
password server = serv.local.net # имя компьютера PDC
encrypt passwords = yes # при работе с AD шифровать пароли надо обязательно
server string = File Server # описание нашего Linux-сервера
security = ADS # говорим, что мы в AD
allow trusted domains = No # разрешить доверительные домены.
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
os level = 0
preferred master = No
local master = No
domain master = No
dns proxy = No
ldap ssl = no # отключаем ssl
idmap uid = 10000-20000 # интервал uid для пользователей
idmap gid = 10000-20000 # интервал gid для групп
hosts allow = 172.16., 127.
strict locking = No
time server = Yes
winbind use default domain = true # использовать домен по умолчанию
log file = /var/log/samba/connect/samba.%m
max log size = 50
log level = 1
unix charset = KOI8-R
dos charset = cp866
[public]
comment = Public
path = /mnt/samba/public
public = yes
writable = yes
printable = no
create mask = 0666
valid users = @"LOCAL\Domain Admins"
Если в описании шары в строке valid users поставить "LOCAL\Administrator", то вход будет разрешен только администратору.
Знак @ обозначает группу.
Тут вроде бы и все, но есть еще одна небольшая вещь, которую надо сделать. А именно - перейти в каталог, где лежат у вас исходники Samba, в подкаталог source/nsswitch и скопировать файл libnss_winbind.so в каталог /lib. Далее надо сделать символические ссылки на этот файл.
ln -s/lib/libnss_winbind.so /lib/libnss_winbind.so.2
ln -s/lib/libnss_winbind.so /lib/libnss_winbind.so.1
Ну, вроде все у нас готово для того чтобы ввести наш Linux в домен Windows.
Сначала надо синхронизировать время на Linux с PDC Windows.
net time set
Можно для большей уверенности сделать так:
net time set -S Name_Windows_PDC
Далее получим билет от нашего PDC:
kinit Administrator@LOCAL.NET
Можно просмотреть, каков результат, командой
klist
Если все нормально, подсоединяемся к домену:
net ads join -U Administrator@LOCAL.NET
Все должно пройти нормально. Если нет, то роем Google. При удаче перезапускаем Samba
/etc/rc.d/rc.samba restart
и начинаем давать (или закрывать :) доступ на шары.
Я не стал расписывать процесс проверки работы всех служб, потому что в интернете очень много документации по этому вопросу, Я только описал те действия, которые надо сделать обязательно, потому как сам настраивал все это не одну неделю и всю информацию собирал по кусочкам из разных источников, включая даже эксперименты с другими дистрибутивами и поиск отличий.
Если у кого-нибудь работает команда
smbmount //server/share /mountpoint -o krb
с 2003 сервером в AD, отпишите, как заставили ее работать на mcleod095@gmail.com.
Знаю, что не работает так как даже сами разработчики об этом говорят, но, может быть, у кого-нибудь это дело проходит.
Сергей Дергачев
Перечитал кучу документации, но, делая, как сказано в документации, я никаких результатов не добился. Вот поэтому и решил написать данное небольшое руководство. Сразу оговорюсь, что за последствия, повлекшие за собой какие-либо деструктивные действия, ответственности не несу. Итак, первое, что нам надо сделать - это выяснить, как же, все-таки, работает домен на Windows 2003. Честно говоря, я и сам до сих пор в этом деле не разобрался, но могу сказать одно, что почти вся его работа с шарами происходит по протоколу Kerberos 5. Когда пользователь входит в систему, он проходит несколько этапов проверки на правильность логина и пароля. И на одном из этих этапов сервером выдается пользователю так называемый билет Kerberos, который в дальнейшем и используется для работы.
Если Windows использует Kerberos, то и Linux тоже надо научить общаться по этому протоколу. Но не стоит забывать, что Windows также работает и с протоколом LDAP. Ну ничего, научим.
Начнем собирать необходимые программы для обучения Linux. Так как в Slackware 10.2, которым я пользовался для решения описанной задачки, используется пакет Samba, то может показаться, что добывать его не понадобится, но это не совсем так. На самом деле этот пакет нам придется удалить из системы так как он собран без поддержки всех так необходимых нам вещей.
Удалить его можно с помощью утилиты pkgtool. Утилита довольно понятная, и, я думаю, вы сами с ней разберетесь. Далее нам понадобятся исходные коды:
- heimdal-0.7.tar.gz;
- openldap-2.3.20.tgz;
- samba-3.0.21c.tar.gz.
На момент моих долгих мучений с настройкой это были свежие версии.
Сначала надо собрать heimdal-0.7.tar.gz. Это собственно и есть реализация протокола Kerberos 5. Скачиваем из интернета, разархивируем и собираем с помощью ./configure make и make install. По умолчанию все собирается в папку, отличную от /usr, меня лично это не устраивает, так как потом при конфигурировании samba придется ручками указывать все пути, поэтому я собирал так:
./configure prefix=/usr
make
make install DESTDIR=/test/krb5
При сборке данным способом на Slackware 10.2 нужно будет установить еще дополнительный пакет - db4-4.4.20-i486-1.tgz. Для того, чтобы не устанавливать его, можно heimdal собрать так:
./configure --prefix=/usr --disable-berkeley-db
make
make install DESTDIR=/test/krb5
Последняя команда копирует все файлы в каталог /test/krb5 (перед выполнением этой команды сначала надо создать данную директорию). Это делается для того, что бы потом можно было создать пакет для Slackware, так как все-таки управлять пакетами проще, чем потом удалять файлы в системе вручную. Если все прошло успешно, то переходим в каталог /test/krb5 и с помощью команды
makepkg krb5.tgz
собираем пакет и устанавливаем:
installpkg krb5.tgz.
То же самое проделываем и с openldap-2.3.20.tgz. Замечу, что в Slackware 10.2 просто так он не собирался, так как требуется еще несколько пакетов. Если собираете в Slackware current, то должно собраться без вопросов, во всяком случае, у меня на current все собралось на ура. Для Slackware 10.2 еще понадобится пакет db4-4.4.20-i486-1.tgz, он нужен как для Kerberos (если собирать первым способом), так и для Ldap. Но можно собрать и без этого пакета:
./configure -enable-bdb=no -enable-hdb=no
Вот теперь можно переходить к самой главной программе - samba.
Samba надо собирать с поддержкой ldap, kerberos, AD и winbind.
Разархивируем исходники и перейдем в директорию, куда их разархивировали, в поддиректорию source. Первое, что надо сделать – это посмотреть помощь по сборке. Команда
./configure –help
выведет большой список с параметрами. Нам нужно только несколько из них, поэтому я не буду описывать все, а просто приведу нужную команду (конечно, если вам нужны и другие опции, просто добавьте их).
./configure -prefix=/usr --with-configdir=/etc/samba --with-winbind --with-ads --with-krb5 --with-smbmount -with-ldap
make
make install DESTDIR=/test/samba
cd /test/samba
makepkg samba.tgz
(не забудьте удалить старую samba перед установкой)
installpkg samba.tgz
Тех, кто считает, что пакет ldap не нужен для работы samba в режиме файлового сервера для пользователей AD, хочу сразу предупредить: если не поставить ldap, при конфигурировании samba с параметром --with-ads будет выдаваться ошибка (нет ldap-модулей в системе). Поэтому сборка ldap необходима.
Теперь надо сконфигурировать стартовые скрипты.
Переходим в каталог /etc/rc.d и в файле rc.samba добавляем такие строки.
samba_start() {
if [ -x /usr/sbin/smbd -a -x /usr/sbin/nmbd -a -r /etc/samba/smb.conf -a -x /usr/sbin/winbindd ];then
echo "Starting Samba: /usr/sbin/smbd -D"
/usr/sbin/smbd -D
echo " /usr/sbin/nmbd -D"
/usr/sbin/nmbd -D
echo " /usr/sbin/winbind"
/usr/sbin/winbindd
fi
}
samba_stop() {
killall smbd nmbd winbindd
}
Если вы придерживаетесь другой манеры написания стартовых скриптов – ваше право, пишите, как вам удобнее.
Не забудьте, что стартап-скрипт должен быть исполняемым ;)
Далее настраиваем Kerberos. Надо скопировать файл krb5.conf из папки, куда вы разархивировали исходники, в папку /etc и отредактировать его. Вот какой он у меня:
[libdefaults]
default_realm = LOCAL.NET
[realms]
LOCAL.NET = {
kdc = SERV.LOCAL.NET
}
[domain_realm]
.local.net = LOCAL.NET
где:
- LOCAL.NET - это имя домена;
- SERV.LOCAL.NET - имя компьютера под управлением Windows 2003, который является Primary Domain Controller.
Затем редактируем файл /etc/nsswitch.conf.
passwd: files winbind
shadow: files winbind
group:files winbind
#эти строчки должны быть обязательно закомментированы, иначе не будет работать.
#passwd: compat
#group:compat
hosts:files dns
networks: files
services: files
protocols:files
rpc:files
ethers: files
netmasks: files
netgroup: files
bootparams: files
automount:files
aliases:files
Теперь надо отредактировать самый главный файл для нашей задачи. Это /etc/samba/smb.conf:
[global]
auth methods = winbind # определяем метод аутентификации через winbind
netbios name = McLeodLinux # netbios-имя компьютера
workgroup = LOCAL # рабочая группа (имя домена без суффикса .NET)
realm = LOCAL.NET # имя домена
password server = serv.local.net # имя компьютера PDC
encrypt passwords = yes # при работе с AD шифровать пароли надо обязательно
server string = File Server # описание нашего Linux-сервера
security = ADS # говорим, что мы в AD
allow trusted domains = No # разрешить доверительные домены.
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
os level = 0
preferred master = No
local master = No
domain master = No
dns proxy = No
ldap ssl = no # отключаем ssl
idmap uid = 10000-20000 # интервал uid для пользователей
idmap gid = 10000-20000 # интервал gid для групп
hosts allow = 172.16., 127.
strict locking = No
time server = Yes
winbind use default domain = true # использовать домен по умолчанию
log file = /var/log/samba/connect/samba.%m
max log size = 50
log level = 1
unix charset = KOI8-R
dos charset = cp866
[public]
comment = Public
path = /mnt/samba/public
public = yes
writable = yes
printable = no
create mask = 0666
valid users = @"LOCAL\Domain Admins"
Если в описании шары в строке valid users поставить "LOCAL\Administrator", то вход будет разрешен только администратору.
Знак @ обозначает группу.
Тут вроде бы и все, но есть еще одна небольшая вещь, которую надо сделать. А именно - перейти в каталог, где лежат у вас исходники Samba, в подкаталог source/nsswitch и скопировать файл libnss_winbind.so в каталог /lib. Далее надо сделать символические ссылки на этот файл.
ln -s/lib/libnss_winbind.so /lib/libnss_winbind.so.2
ln -s/lib/libnss_winbind.so /lib/libnss_winbind.so.1
Ну, вроде все у нас готово для того чтобы ввести наш Linux в домен Windows.
Сначала надо синхронизировать время на Linux с PDC Windows.
net time set
Можно для большей уверенности сделать так:
net time set -S Name_Windows_PDC
Далее получим билет от нашего PDC:
kinit Administrator@LOCAL.NET
Можно просмотреть, каков результат, командой
klist
Если все нормально, подсоединяемся к домену:
net ads join -U Administrator@LOCAL.NET
Все должно пройти нормально. Если нет, то роем Google. При удаче перезапускаем Samba
/etc/rc.d/rc.samba restart
и начинаем давать (или закрывать :) доступ на шары.
Я не стал расписывать процесс проверки работы всех служб, потому что в интернете очень много документации по этому вопросу, Я только описал те действия, которые надо сделать обязательно, потому как сам настраивал все это не одну неделю и всю информацию собирал по кусочкам из разных источников, включая даже эксперименты с другими дистрибутивами и поиск отличий.
Если у кого-нибудь работает команда
smbmount //server/share /mountpoint -o krb
с 2003 сервером в AD, отпишите, как заставили ее работать на mcleod095@gmail.com.
Знаю, что не работает так как даже сами разработчики об этом говорят, но, может быть, у кого-нибудь это дело проходит.
Сергей Дергачев
Сетевые решения. Статья была опубликована в номере 09 за 2006 год в рубрике sysadmin