Linux Slackware Энциклопедия от А до Я
Сайт посвящен свободно распространяемому ПО и Linux Slackware в частности.
Разделы:
Раздел/Тема
Главная -> Настройка -> Файловый сервер под руководством AD (Samba).
Возникла у меня такая задача как организовать небольшую файловую помойку на Linux для пользователей Windows, которыми руководит AD. Перечитал кучу документации, но, делая, как сказано в документации у меня ничего не получалось. Вот поэтому и решил написать данное небольшое руководство. Сразу оговорюсь, что за последствия, повлекшие за собой какие-либо деструктивные действия, ответственности не несу. И еще на статью меня подтолкнуло то, что почти вся документация написана для отличных от мню любимого дистрибутива Linux Slackware.

Начнем.

Итак, первое, что нам надо сделать это разобраться, как же, все-таки, работает домен на 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 нужно будет установить еще дополнительный пакет, Какой я вроде писал ниже. Для того чтобы не устанавливать его можно 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 все собралось на ура. ./configure make depend make make install DESTDIR=/usr/ldap cd /usr/ldap makepkg ldap.tgz installpkg ldap.tgz Для Slackware 10.2 еще понадобится пакет db4-4.4.20-i486-1.tgz, он нужен для Kerberos (если собирать первым способом) и также для Ldap, можно ldap собрать и на Slackware 10.2, без требования этого пакета сделав ./configure -enable-bdb=no -enable-hdb=no Я не пробовал на Salckware 10.2 как собирается без этих опций, поэтому не могу сказать какие пакеты могут потребоваться еще.

Вот теперь можно переходить к самой главной программе - 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 } Для того чтобы Samba стартовала при запуске системы файл /etc/rc.d/rc.samba должен быть исполняемым. Далее настраиваем Kerberos. Надо скопировать файл krb5.conf из папки, куда Вы разархивировали архив с исходниками в папку /etc и отредактировать его. Вот какой он у меня. [libdefaults] default_realm = LOCAL.NET #091;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 Все должно пройти нормально, если нет, то роем Гугл. При удаче перезапускаем Samba /etc/rc.d/rc.samba restart После чего начинаем давать закрывать доступ на шары. Я не стал при расписывать процесс проверки работы всех служб, потому что в интернете очень много документации по этому вопросу, Я только описал те действия, которые надо сделать обязательно, потому как сам настраивал не одну неделю и всю информацию собирал по кусочкам из разных источников, включая даже эксперименты с другими дистрибутивами и поиск отличий. Mcleod095 25.12.2006