Samba 3.0 имеет заметные отличия от более ранних версий; наиболее выдающимися из них являются улучшенная по сравнению с версией 2.2 поддержка Unicode, поддержка гораздо большего количества кодовых страниц, новая утилита администрирования net, призванная заменить smbpasswd.
В поставку входят пакеты samba3-client, samba3-client-cups, samba3-common, samba3, samba3-swat.
Для задания кодировок используются следующие новые параметры smb.conf:
unix charset = <charset> dos charset = <charset> display charset = <charset>
где <charset> — любая кодировка, поддерживаемая iconv. Список возможных кодировок можно узнать, выполнив команду iconv -list.
Параметры client code page и character set больше не поддерживаются. Параметр unix charset указывает кодировку, в которой будут храниться файлы на диске, в которой заданы параметры в smb.conf. Наконец-то появилась возможность хранить имена файлов в UTF-8!
Параметр dos charset указывает кодировку, в которой Samba будет общаться с клиентами, не поддерживающими Unicode. Все версии Windows, начиная с 95, понимают Unicode — но все же стоит установить dos charset = cp866, что соответствует client code page = 866 в более старых версиях.
Параметр display charset указывает в какой кодировке должны выводить информацию программы, непосредственно обменивающиеся информацией с пользователем, например smbclient, net, wbinfo и другие.
Утилита net призвана заменить smbpasswd и обеспечивает гораздо большие возможности по получению информации о сети и управлению сетью. Формат команд утилиты очень похож на формат одноимённой команды Windows NT/2000.
Основные применения команды net:
создание и удаление пользователей: net user
включение машины в домен: net ads join — Active Directory; net rpc join — NT Domain;
получение информации о домене, машине, открытых файлах, сессиях: net info, net ads status, net rpc status;
создание и удаление разделяемых ресурсов на удалённых машинах: net share;
синхронизация времени с windows-сервером: net time
Начиная с версии 2.2, Samba имеет возможность удалённого администрирования из MMC (Microsoft Management Console). Эта возможность полезна, когда Samba является членом NT-домена или AD. Администратор домена может создавать, удалять и изменять сетевые ресурсы на UNIX-машине с запущенной Samba.
Как сконфигурировать Samba для удалённого администрирования? Для управления ресурсами служат параметры /etc/samba/smb.conf:
[global] add share command = <add script>
Параметр указывает скрипт, который будет вызван при попытке создания нового ресурса в MMC. Скрипту передаётся четыре параметра:
имя конфигурационного файла (например, /etc/samba/smb.conf);
имя создаваемого ресурса;
путь к существующей директории на диске;
комментарий.
Скрипт должен завершаться с кодом 0 в случае успешного создания и ненулевым в случае ошибки.
change share command = <change script>
Параметр указывает скрипт, который будет вызван при попытке изменения существующего ресурса в MMC. Скрипту передаётся четыре параметра:
имя конфигурационного файла (например, /etc/samba/smb.conf);
имя создаваемого ресурса;
путь к существующей директории на диске;
комментарий.
Скрипт должен завершаться с кодом 0 в случае успешного создания и ненулевым в случае ошибки.
delete share command = <delete script>
Параметр указывает скрипт, который будет вызван при попытке удаления существующего ресурса в MMC (Stop sharing). Скрипту передаётся два параметра:
имя конфигурационного файла (например, /etc/samba/smb.conf);
имя создаваемого ресурса;
Скрипт должен завершаться с кодом 0 в случае успешного создания и ненулевым в случае ошибки.
Чтобы скрипты могли изменять конфигурационные файлы Samba, они должны выполняться с правами root. Для этого нужно установить отображение пользователей домена, имеющих право изменять ресурсы, в root. Это можно сделать либо с помощью файла /etc/samba/smbusers, прописав там строку вида
root = administrator <user 1> ... <user n>
либо с помощью параметра admin users в /etc/samba/smb.conf:
admin users = administrator
При создании нового ресурса Windows позволяет просматривать дерево директорий. Для этого в /etc/samba/smb.conf нужно задать служебные ресурсы, заканчивающиеся символом “$”, например:
[C$] path = /drives/c
После этого при создании нового ресурса можно будет просматривать и выбирать все директории ниже /drives/c.
Для объединения компьютеров в домены Widows 2000 Server использует схему, отличную от NT-доменов, которая называется Active Directory; эта схема обладает гораздо большей масштабируемостью и позволяет централизованно администрировать машины, входящие в домен. Active Directory базируется на протоколе авторизации Kerberos, при котором имя пользователя и пароль не передаются по сети, а используется механизм так называемых билетов, выдаваемых сервером на определённое время. Получив билет, машина, входящая в домен, может авторизоваться на других машинах домена без участия сервера.
Samba 3.0, в отличие от более ранних версий Samba, имеет возможность работать в сетях Wndows, работающих в режиме Active Directory (или Windows 2000 native mode). Если требуется эта функциональность, следует установить пакет samba3-3.0 вместо samba-2.2.
Active Directory имеет другую схему именования доменов, компьютеров и пользователей, основанную на DNS. Допустим, существует сеть с именем my.firm.com и компьютерами host1.my.firm.com, host2.my.firm.com, host3.my.firm.com; тогда домен Active Directory будет называться my.firm.com, а пользователи Active Directory будут иметь имена вида user@my.firm.com.
/etc/krb5.conf должен содержать по крайней мере следующие строки:
[realms] MY.FIRM.COM = { kdc = your.kerberos.server }
где MY.FIRM.COM - имя домена (или “царства”, в терминологии Kerberos; задаётся обязательно в верхнем регистре), а your.kerberos.server — имя или IP-адрес KDC (Kerberos Domain Controller), аналог PDC (Primary Domain Controller) в доменах Windows NT — например, server.my.firm.com или 192.168.117.11.
Правильность указания параметров можно проверить, выполнив команду (замените имя пользователя на актуальное — например, administrator@MY.FIRM.COM):
# kinit username@REALM
и убедившись, что пароль был принят сервером. REALM всегда задаётся в верхнем регистре.
Вы также должны убедиться, что возможно получить имя KDC по его IP адресу (так называемый Reverse DNS lookup). Имя KDC должно либо совпадать с NetBIOS-именем компьютера (имя машины в сети Windows без указания домена) либо состоять из NetBIOS-имени и имени домена. Если получить имя KDC по адресу невозможно, вы получите ошибку “local error” при попытке войти в домен.
Если ваш DNS не поддерживает Reverse lookup либо KDC не зарегистрирован в DNS, вы можете указать соответствие IP-адреса и имени в /etc/hosts.
Для работы в Active Directory smb.conf должен содержать следующие параметры:
[global] # Задаёт Kerberos realm, обычно совпадает с именем домена в # верхнем регистре, например realm = MY.FIRM.COM realm = <REALM> # Это обычно часть реалма до первой точки, например # workgroup = MY workgroup = <WORKGROUP> # Тип домена - Active Directory. security = ADS # В случае Active Directory пароли всегда шифруются. encrypt passwords = true # Обычно этот параметр указывать не обязательно, т.к. Samba сама # определяет адрес KDC, если в сети есть WINS-сервер и он указан # в smb.conf ads server = <your.kerberos.server>
Убедитесь что Samba не запущена. Если запущена, её нужно остановить:
# service smb stop; service winbind stop
Чтобы включить компьютер в домен, выполните команду:
# net ads join -U administrator
где administrator — имя пользователя домена, имеющего право создавать новые учётные записи.
Если не было выдано сообщение об ошибке, то машина успешно зарегистрирована в домене — иначе проверьте правильность задания параметров в /etc/samba/smb.conf и /etc/krb5.conf. Убедитесь, что пользователь, указанный после -U в net ads join, имеет необходимые права на создание новых учётных записей.
Теперь можно запустить необходимые службы:
# service smb start; service winbind start
Для работы с компьютерами, зарегистрированными в Active Directory, не требуется указывать имя пользователя и пароль. Попробуйте выполнить команду:
$ smbclient -k -L <имя компьютера в домене>
Вы должны получить список доступных ресурсов, при этом smbclient не должен запрашивать имя пользователя и пароль.
Чтобы проверить, что доступ к ресурсам вашей машины возможен с других машин домена, вы можете попробовать выполнить все ту же команду:
$ smbclient -k -L <имя вашего компьютера в домене>
и получить список доступных ресурсов. Можно также попробовать открыть какой-нибудь ресурс на вышей машине с Windows-машины, входящей в домен. В любом случае имя пользователя и пароль запрашиваться не должны.
В отличие от доменов Windows NT, авторизация в Active Directory производится не по имени и паролю, а c помощью билетов протокола Kerberos. Из-за этого работа с smbclient может поначалу показаться необычной.
Во-первых, при вызове smbclient нужно указывать параметр -k. Во-вторых, билеты Kerberos даются на определённое время (обычно на сутки, но это зависит от настроек сервера). Поэтому их нужно периодически обновлять с помощью команды kinit:
# kinit username@REALM
где username — ваше имя в Actiev Directory домене REALM.
Так что если smbclient вдруг перестаёт подключаться к доменным ресурсам, попробуйте обновить билет — скорее всего, дело именно в этом.