Среда интеграции с Windows (Samba)

Александр Боковой, Игорь Вергейчик, Олег Власенко

Аннотация

Данный раздел документации предназначен прежде всего для тех, кто только начинает знакомиться с Samba, но между тем уже имеет достаточные знания в области TCP/IP и сетей Microsoft™.

Всё, что сказано ниже, относится непосредственно к пакету samba-2.2.5, входящему в состав ALT Linux 2.4, тем не менее, многое будет справедливо как для предыдущих, так и для последующих версий.

Общие сведения о Samba

Данный продукт представляет собой комплект серверного и клиентского программного обеспечения для осуществления связи UNIX-машин с сетями Microsoft™ и LanManager, которые сами по себе представляют собой подклассы[13] сетей SMB.

Изначально сети SMB были разработаны фирмой IBM™, базировались на протоколе NetBIOS, предназначались прежде всего для сетей Token Ring и были в полной мере реализованы в OS/2 Warp LanServer. Позднее в Windows 95 этот протокол был заменён на NetBEUI (несколько упрощённая версия NetBIOS).

Чуть ранее в OS/2 Warp и NT 3.5 была реализована более удобная для сложных гетерогенных сетей реализация, работающая поверх TCP/IP — «NetBIOS over TCP/IP». Ввиду явных преимуществ данного подхода он используется и поныне. Когда где-либо в Windows вы организовываете работу с сетевыми разделяемыми ресурсами по TCP/IP, то на самом деле используется «NetBIOS over TCP/IP» (о чём, например, в Win95 в свойствах TCP/IP в закладке NetBIOS есть соответствующая отметка).

Samba также использует протокол «NetBIOS over TCP/IP», что позволяет ей успешно взаимодействовать с такими реализациями SMB, как входящие в OS/2 3-4, Windows 9x/Me, NT3.5-4/2000/XP, UNIX-системы с SambaSamba; и, возможно, другими подобными. Менее очевидно то, что Samba не может работать без использования TCP/IP (на NetBIOS и NetBEUI). Об этом не стоит забывать при проектировании сетей.

Итак, для работы в сетях SMB необходимы:

  • клиент;

  • сервер;

  • средства администрирования.

Всё это есть в пакетах samba-client, samba-client-cups, samba-common, samba, samba-swat, входящих в состав дистрибутива.

При использовании SMB доступны следующие ресурсы:

  • сетевые диски;

  • прямые пути к дискам;

  • принтеры;

  • доменная авторизация и управление.

Первые три пункта поддерживаются Samba в полном объёме, последний — частично, но это направление стремительно развивается и весьма полно реализовано в Samba 3.0, описанной ниже.

Также доступен весьма объёмный комплект документации в пакете samba-doc; большинство ссылок данного раздела будут указывать именно на содержимое этого пакета.

Краткий обзор каталогов и файлов

Все файлы конфигурации и авторизации Samba расположены в каталоге /etc/samba и его подкаталогах. Рассмотрим их несколько подробнее.

MACHINE.SID

системный идентификатор машины, формируется автоматически при старте сервера и предназначен для идентификации компьютера в домене сети Microsoft™;

codepages/

каталог, содержащий файлы с таблицами перекодировки;

lmhosts

то же, что и /etc/hosts, но предназначен для преобразования IP<=>NetBIOS. Как правило содержит только одну запись:

127.0.0.1 localhost

но можно считать удачной идеей[14] заносить туда хосты из других подсетей (когда по ряду причин невозможно надёжно провести преобразование IP<=>NetBIOS ни широковещательными запросами, ни с использованием WINS) или наоборот — ключевые сервера собственного домена;

secrets.tdb

ключевой файл для идентификации машины в домене сети Microsoft™. С точки зрения безопасности имеет ту же ценность, что и файлы /etc/tcb/*/shadow — а потому права доступа должны быть root.root 0600;

smb.conf

основной конфигурационный файл Samba. Он нужен не только серверной части, но и всем остальным компонентам этой системы;

smbpasswd

аналог /etc/passwd и /etc/tcb/*/shadow — файл пользователей сервера Samba с паролями. С точки зрения безопасности имеет ту же ценность, что и /etc/tcb/*/shadow — а потому права доступа должны быть root.root 0600. Соответствие пользователей Samba и системных производится на основе общего UID; данный файл используется Samba при отсутствии данных о пользователе на PDC или при отсутствии самого PDC;

smbusers

файл соответствий имён сетевых и локальных пользователей SMB; это удобный метод для организации административных и гостевых входов на сервер. Соответствие пользователей Samba и системных производится на основе символьных имён;

/var/log/samba/*

файлы журнала серверной части Samba. Из них log.smbd, log.nmbd, log.winbind — журналы соответствующих процессов, а все прочие — журналы взаимодействия сервера с отдельными клиентскими хостами в формате именования по умолчанию — log.<Client_NetBIOS_NAME>. При превышении заданного в smb.conf предела производится ротация журналов и формируются файлы *.old;

/var/spool/samba

каталог динамического спулинга печати сервера Samba. На несильно загруженных серверах печати он обычно пуст; наличие там множества файлов в то время, когда ни один из клиентов не печатает — явный признак сбоя сервера печати;

/var/cache/samba/*

файлы (как правило, двоичные базы данных), формируемые в процессе работы различных компонентов SambaSamba;. Наиболее примечательны:

browse.dat и wins.dat

текстовые файлы, их названия говорят сами за себя;

winbindd*.tdb

базы данных доменных пользователей, формируемых winbind (см. Использование winbind). Время от времени их необходимо архивировать: если при апгрейде, «переезде» или переустановке сервера winbind сгенерирует эти файлы с нуля, то соответствия системных и доменных символьных и числовых имён изменятся и права доступа на восстановленные из архива файлы окажутся заведомо перепутанными. Поэтому настоятельно рекомендуется архивировать файлы /var/cache/samba/winbindd*.tdb;

/var/lib/samba/*

служебные каталоги для администратора сервера.

Список исполняемых файлов Samba можно получить командой:

$ rpm -ql `rpm -qa | grep samba` | grep bin/

и подробно ознакомиться с каждым, прочитав соответствующие разделы документации.

Здесь же мы остановимся лишь на самых важных и наиболее часто используемых компонентах.

  1. серверные компоненты:

    /usr/sbin/nmbd

    сервер преобразования имён и адресов;

    /usr/sbin/smbd

    файловый сервер;

    /usr/sbin/winbindd

    сервер импорта пользователей и групп с PDC;

    /usr/sbin/swat

    средство настройки Samba с web-интерфейсом;

    /etc/init.d/smb и /etc/init.d/winbind

    управляющие скрипты инициализации сервисов.

    Следует отметить, что у сценария /etc/init.d/smb есть два режима перезагрузки — restart и reload, которые радикально отличаются следующими особенностями:

    1. restart производит полный перезапуск процессов smbd и nmbd со сбросом текущих соединений. Как правило, клиенты сами производят автоматическое переподключение к ресурсам, однако, если в момент перезапуска были открыты файлы, то возможны проблемы с клиентскими приложениями (например, MS Office и 1C).

    2. reload заставляет smbd и nmbd только перечитывать файлы настройки без перезапуска и сброса соединений. При этом старые соединения продолжают существовать по старым правилам, а ко всем новым соединениям будут применены уже новые правила на основании файлов настройки.

  2. клиентские компоненты:

    /usr/bin/smbclient

    интерактивное приложение для просмотра сетевых ресурсов;

    /sbin/mount.smb, /sbin/mount.smbfs, /usr/bin/smbumount, /usr/sbin/smbmnt, /usr/bin/smbmount

    средства монтирования/размонтирования сетевых файловых систем.

  3. утилиты:

    /usr/bin/smbpasswd

    управление пользователями и подключением к домену;

    /usr/bin/wbinfo

    отображение списка пользователей, импортированных winbindd;

    /usr/bin/testparm

    проверка синтаксиса конфигурационных файлов;

    /usr/bin/smbstatus

    отображение статуса процессов smbd и nmbd;

    /usr/bin/nmblookup

    программа разрешения имён WINS (аналог nslookup для DNS).

Настройка сервера

В большинстве случаев настройка Samba заключается в редактировании основного конфигурационного файла /etc/samba/smb.conf и управлении пользователями с помощью smbpasswd. Если это непривычно — попробуйте использовать web-интерфейс SWAT (Samba Web Administration Tool); для этого установите пакет samba-swat и откройте URL http://localhost:901/ в броузере.

Обычный сервер

Под таковым мы понимаем компьютер, предоставляющий в сеть файловые ресурсы. Фактически, это простейший независимый файловый сервер, имеющий собственную базу авторизации пользователей.

Для того, чтобы создать такой сервер, необходимо лишь немного подправить стандартный конфигурационный файл /etc/smb.conf, подставив требуемые имя рабочей группы и имена ресурсов, а затем создать учётные записи пользователей, как описано ниже. Следует обратить внимание на рекомендации по безопасности, изложенные в конце параграфа.

Вот основные записи в /etc/smb.conf, которые создадут нам «обычный» сервер.

[global]

# Секция [global] определяет общие настройки серверной части Samba в
# целом для всех ресурсов.
# Имя рабочей группы OFFICE
workgroup = OFFICE

# Уровень определения прав доступа на уровне пользователей
security = user

# Приоритет данного сервера среди других компьютеров рабочей группы:
# определяет, кто именно будет главной машиной, отвечающей за
# отображение ресурсов сети. Для сравнения, у Win9X os level = 34, а
# у NT4 os level = 64.
os level = 65

# Очевидно, что раз нет домена - нет и мастера.
domain master = no

# Не стоит становиться сервером паролей для окрестных машин. Так что
# если к вам прибежал разъярённый администратор соседнего NT-сервера с
# жалобами на то, что его не пускают на его собственный сервер - 
# поставьте 
# domain logons = no
domain logons = no

# Как правило, в простейшей сети WINS не нужен, поэтому мы его отключаем также и у себя.
wins support = no

Ну а теперь надо определить, какие именно каталоги мы предоставим в сеть. Для каждого ресурса существует отдельная секция.

Самый простейший вариант для обычных ресурсов — обычный каталог с именем public[15] :

# имя ресурса, видимое в сети

[public]

# комментарий, видимый в сети как комментарий к ресурсу
comment = Public Stuff

# путь к каталогу ресурса
path = /home/samba/public

# отметка о доступе на чтение всем авторизованным пользователям (в том
# числе и гостевым, если они определены)
public = yes

# запрещение на запись всем пользователям
writable = no

# разрешение на запись всем пользователям, входящим в системную
# группу staff
write list = @staff

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

Поскольку Samba исполняется не в chroot, внутри ресурсов можно использовать любые символические ссылки на расположенные локально и в сети (NFS, SMB, Coda и т. д.) файловые объекты, что очень удобно в плане администрирования системы.

Особые ресурсы — например, домашние каталоги пользователей:

# имя ресурса, которое автоматически будет заменено именем
# домашнего каталога пользователя, под которым подключился клиент
# и именно название его домашнего каталога будет отображено в сети
# как имя ресурса.

# Для получения доступа к этому ресурсу клиент должен предоставить
# серверу соответствующие имя и пароль, все прочие пользователи к
# этому ресурсу доступа не имеют вовсе.

[homes]

# комментарий, видимый в сети как комментарий к ресурсу
comment = Home Directories

# признак невидимости - данный ресурс виден в сети только тому
# пользователю, который является его владельцем. К этому
# ресурсу можно обратиться непосредственно задав его имя, но при 
# просмотре ресурсов сети он будет виден только владельцу.
browseable = no

# Разрешение на запись.
writable = yes

Принтеры:

# имя ресурса, которое будет видно в сети. Кроме него, в сети будут
# также видны и локальные принтеры под теми же именами, что и в
# системе по команде lpq.

[printers]

# комментарий, который игнорируется.
comment = All Printers

# Путь к каталогу, в котором располагается спул принтеров,
# предоставляемых в сеть через Samba
path = /var/spool/samba

# невидимость ресурса в браузинге, он подменяется системным
# ресурсом.
browseable = no

# разрешение на печать для гостевого захода.
guest ok = yes

# запрещение на запись, поскольку в спул пишет сама Samba, а не
# пользователь.
writable = no

# признак того, что это именно принтер, а не файловый ресурс
printable = yes

# маска для создания файлов заданий на печать
create mode = 0700

# Команды, выполняемые Samba для того, чтобы напечатать документ.
# Использование драйвера клиента, применяется для не-UNIX
# клиентов.
print command = lpr-cups -P %p -o raw %s -r

# Использование драйвера CUPS на стороне сервера (на стороне
# клиентов используется generic PostScript драйвер).
; print command = lpr-cups -P %p %s

# Следующие команды являются стандартными при установке printing=cups,
# их можно изменить в случае необходимости.
lpq command = lpq -P %p
lprm command = cancel %p-%j

Сервер в составе существующего домена NT

Подключим вновь созданную машину Samba с именем COMP к существующему домену DOM, администратором которого является пользователь Administrator и PDC этого домена реализован на другом компьютере.

Первым делом необходимо убедиться, что машины с таким же именем, как и та, которую мы собираемся подключить, в домене ещё нет. В противном случае эту машину необходимо удалить из состава домена средствами самого PDC или выбрать другое имя.

На машине COMP в /etc/samba/smb.conf необходимо внести следующие изменения:

[global]

workgroup = DOM
netbios name = COMP
security = domain
password server = *
allow trusted domains = yes
nt acl support = yes

После чего необходимо остановить Samba-сервер, если он работает, командой service smb stop.

Теперь необходимо послать запрос на PDC с целью авторизации нового члена домена с помощью следующей команды:

$ smbpasswd -j DOM -r DOMPDC -U Administrator

и в ответ на запрос ввести пароль пользователя Administrator — тот самый, с которым этот пользователь зарегистрирован в домене.

Если получено сообщение:

Joined domain DOM.

то всё работает; в противном случае в /etc/smb.conf необходимо написать:

[global]

log level = 4                  

затем повторить последнюю команду и по подробным журналам разбираться, что пошло не так. При таком уровне log level в log.smbd содержится подробный отчёт об обмене данными с PDC. Вполне возможно, что были допущены ошибки в написании имён или ошибочно введён пароль; также возможны какие-либо неполадки на стороне PDC.

С этого момента, когда к Samba обратился пользователь «user123» с паролем «passw», она:

  • сначала ищет его в /etc/samba/smbpasswd, если пароль и имя совпадают — пускает, иначе отказывает в авторизации или считает гостем (в зависимости от настройки);

  • если такого имени в упомянутом файле нет — смотрит в /etc/passwd (проверив соответствия через файл /etc/samba/smbusers) и

  • если такой пользователь есть — спрашивает PDC, числится ли за пользователем «user123» полученный пароль «passw»;

  • если это так — пускает, иначе отказывает в авторизации либо переключает на гостевой заход, в соответствии с настройкой.

Обычно, при работе в домене на рядовых рабочих станциях /etc/samba/smbpasswd должен быть абсолютно пустым, либо содержать только административные учётные записи, с доменом никак не связанные.

Данная логика работы применима только в том случае, если не используется winbind. Для того, чтобы доменные пользователи автоматически оказывались в /etc/passwd при первом же удачном обращении (правильность паролей была подтверждена PDC), в /etc/samba/smb.conf необходимо написать одну строку

[global]

add user script = /usr/sbin/useradd -d /home/domain/%u -g 600 -m\
-k /etc/skel_domain -s /bin/false %u

соответственно каталоги /home/domain и /etc/skel_domain, а также группа 600 должны уже существовать. Все конкретные имена и параметры useradd можно менять в зависимости от конкретных применений.

По директиве add user script, которая активизируется в тех случаях, когда пользователь ещё не зарегистрирован на данной машине, можно вызывать не только /usr/sbin/useradd с ключами, но и любые другие программы; если подойти с фантазией, то с помощью данной директивы можно делать очень интересные вещи.

Не стоит забывать и о безопасности — программы, запущенные при помощи add user script, будут выполняться от всемогущего в пределах системы пользователя root, а параметры их вызова частично определяются пользователем, что потенциально опасно!

Теперь можно включить сервер Samba командой service smb start и работать в домене сети Windows на правах рядового члена.

Сервер как PDC домена

Для создания Primary Domain Controller (PDC) необходимо в smb.conf внести или изменить следующие записи

[global]

# Имя сервера; если данный параметр не определён,
# то он примет значение, соответствующее имени хоста.
netbios name = COOLSERVER

# Имя домена
workgroup = COOLDOMAIN

# Режим работы системы авторизации сервера.
security = user

# Разрешение на использование шифрованных паролей
encrypt passwords = yes

# Путь к локальному файлу паролей
smb passwd file = /etc/samba/smbpasswd

# Стать мастер-броузером для домена
local master = yes

# Быть PDC
domain master = yes

# Сразу при старте постараться стать мастер-броузером домена
preferred master = yes

# Быть сервером паролей домена
domain logons = yes

# Расположение профайла пользователей домена
logon path = \\%L\Profiles\%U

# Административная группа домена, присутствие в списке
# пользователя "administrator" весьма желательно, без
# этого данный пользователь не получит административных
# прав на клиентских машинах Windows.
domain admin group = root @wheel administrator

# Быть WINS-сервером. WINS-сервер имеет смысл когда в сети более 10
# машин, работающих по протоколу SMB. Наличие такого сервера в сложных
# сетях существенно снижает широковещательный трафик.
wins support = yes

# Порядок разрешения имён NetBIOS, по аналогии с записью в
# /etc/host.conf для разрешения имён DNS. Значение wins
# имеет смысл только при наличии в сети wins-сервера,
# в противном случае оно замедлит работу.
name resolve order = wins lmhosts bcast

Также необходимо создать ресурсы для работы домена.

Ресурс netlogon необходим для работы PDC и домена в целом. Он просто должен существовать.

[netlogon]

comment = Network Logon Service
path = /var/lib/samba/netlogon
guest ok = yes
writable = no
write list = admin, administrator

Данный ресурс необходим для создания и хранения профилей пользователей домена:

[Profiles]

path = /var/lib/samba/profiles
browseable = no
read only = no
create mask = 0600
directory mask = 0700

При создании пользователя домена в /var/lib/samba/profiles автоматически создаётся каталог с именем, идентичным имени создаваемого пользователя и принадлежащий ему (с правами 0700). В этом каталоге будут храниться личные настройки пользователя.

Для того, чтобы включить клиентскую машину в домен, необходимо произвести следующие действия:

  1. Первый метод — вручную:

    Прежде всего необходимо создать локального пользователя системы с именем, соответствующим NetBIOS-name подключаемой к домену машины. К имени на конце добавляется символ «$». Для добавления машины с именем machine_name необходимо от имени пользователя root выполнить следующие команды:

    # /usr/sbin/useradd -g machines -d /dev/null -c "machine nickname" -s
    /bin/false machine_name$
    
    # passwd -l machine_name$
    

    Теперь, когда создан пользователь (символ «$» в конце имени означает что это NetBIOS-имя компьютера, а не имя пользователя), можно добавить его в домен, выполнив от имени root команду: smbpasswd -a -m machine_name.

    Теперь компьютер подключён к домену.

  2. Второй метод — автоматический:

    Работу по созданию машинной учётной записи можно переложить на Samba, включив в smb.conf следующую запись:

    [global]
    
    add user script = /usr/sbin/useradd -d /dev/null -g machines -s
    /bin/false -M %u
    

    Теперь SambaSamba; будет принимать от клиентских машин запросы на включение в домен и автоматически регистрировать их аналогично NT Server.

    С этого момента начинает существовать домен и PDC на базе SambaSamba;-сервера. Пользователи могут входить под своими именами и паролями с любой машины домена с сохранением настроек, а также самостоятельно менять свои пользовательские пароли без помощи администратора сети.

Учётные записи пользователей

Все учётные записи хранятся в файле /etc/samba/smbpasswd.

Учётные записи пользователей, используемые Samba делятся на две категории:

  • записи о компьютерах, входящих в домен;

  • записи о пользователях, зарегистрированных на данном сервере.

Следует учитывать, что для того, чтобы создать и использовать любую учётную запись в /etc/samba/smbpasswd, предварительно необходимо создать соответствующую запись в /etc/passwd. Общее правило — для каждого пользователя в /etc/samba/smbpasswd обязательно должен существовать пользователь в /etc/passwd. Обратное утверждение неверно.

Для управления учётными записями предназначена утилита smbpasswd; полный список её возможностей можно узнать из соответствующей man-страницы, здесь же рассмотрим наиболее частые методы использования.

Создание нового пользователя:

# smbpasswd -a <User_name>

Смена пароля у существующего пользователя:

# smbpasswd <User_name>

Удаление существующего пользователя:

# smbpasswd -x <User_name>

Приостановление учётной записи без удаления:

# smbpasswd -d <User_name>

Подключение данного компьютера к существующему домену:

# smbpasswd -j <Domain_name> -U <Administrator_name>

Использование winbind

Сервис winbind является новым средством, предназначенным для более полной интеграции Samba в домены Microsoft Windows он появился, в Samba 2.2.0. Данный сервис считывает свою конфигурацию из /etc/samba/smb.conf и динамически взаимодействует с PDC домена, автоматически синхронизируя списки пользователей и групп домена и машины Samba. Таким образом, winbind является весьма удобным средством для автоматического поддержания актуальности базы пользователей домена на рабочих станциях Samba.

Работа данного сервиса происходит без изменения содержимого каких либо авторизационных файлов в /etc и при перезагрузке машины доменные пользователи появляются в системе только после запуска winbindd. Если во время работы остановить winbindd, то доменные пользователи и группы не исчезнут из системы до перезагрузки, однако динамического обновления списков имён и паролей происходить не будет.

Для того, чтобы при перезагрузке компьютера (или только сервиса winbindd) не нарушались соответствия внутренних UID и доменных SID, он сохраняет текущее состояние списков в файлах /var/cache/samba/winbindd*.tdb.

Для нормального функционирования winbindd в файле /etc/samba/smb.conf обязательно должны быть объявлены следующие директивы:

[global]

# Диапазон номеров локальных пользователей, который будет
# использован для динамического создания пользователей домена.
winbind uid = 10000-20000

# Диапазон номеров локальных групп пользователей, который будет
# использован для динамического создания групп пользователей
# домена.
winbind gid = 10000-20000

# Символ-разделитель, используемый для составления доменных имён
# пользователей и располагающийся между именем домена и именем
# пользователя.
winbind separator = +

# Интервал времени (в секундах) между запросами winbind к PDC
# в целях синхронизации списков пользователей и групп.
winbind cache time = 10

# Шаблон имени домашних каталогов доменных пользователей,
# автоматически присваиваемых каждому пользователю. Сами каталоги,
# однако, динамически не создаются. Вместо переменой %D подставляется
# имя домена, а вместо %U подставляется имя пользователя.
template homedir = /home/%D/%U

# Командный интерпретатор, назначаемый по умолчанию для
# пользователей, авторизованных через winbindd.
template shell = /bin/bash

Также необходимо внести изменения в файл /etc/nsswich.conf в разделы passwd и group, вписав директиву winbind — например, таким образом:

passwd: files winbind
group: files winbind

С этого момента можно использовать имена доменных пользователей в /etc/samba/smb.conf с целью разграничения доступа, в правах на файлы и каталоги, для подключения к сетевым ресурсам данного хоста со стороны других хостов.

Сервер печати на CUPS

По умолчанию Samba сконфигурирована на использование CUPS в качестве спулера печати. Подразумевается, что CUPS уже настроен и запущен. В /etc/samba/smb.conf присутствуют следующие директивы:

[global]

printcap name = lpstat
load printers = yes
printing = cups

Также необходимо создать ресурс [printers]; его создание и назначение директив подробно описано в разделе Обычный сервер.

Настройка клиента

Для подключения компьютера Linux к сетям Общие сведения о Samba существуют клиентские функции Samba.

Обычный клиент

Клиентские функции Samba представлены средствами просмотра сетевого окружения и монтирования файловых систем /usr/bin/smbclient и /usr/bin/smbmount соответственно. Также доступны mount.smb и mount.smbfs, являющиеся символическими ссылками на /usr/bin/smbount.

При запуске эти программы считывают текущую конфигурацию из файла /etc/samba/smb.conf и используют доменные функции в случае, если машина подключена к домену Windows.

Также файловые системы возможно монтировать системной командой mount, указав в качестве типа файловой системы smbfs, и использовать эти записи в /etc/fstab для автоматического монтирования при загрузке системы.

Например, для того, чтобы смонтировать в каталог /mnt/disk ресурс public с машины SMALLSERVER под именем cooluser, нужно выполнить команду: smbmount //smallserver/public /mnt/disk -o username=cooluser

Регистр написания имён компьютеров, ресурсов и пользователей роли не играет. Для того, чтобы получить список Samba-ресурсов данной машины и список машин рабочей группы или домена достаточно выполнить команду: smbclient -L localhost -N

Более подробные сведения можно прочесть в man-страницах по smbclient и smbmount.

В составе дистрибутива поставляются два графических клиентских приложения — LinNeighborhood и gnomba [16], которые работают поверх утилит smbclient и smbmount.

По адресу http://www.public.iastate.edu/~chadspen/homepage.html можно получить весьма качественное графическое клиентское приложение xSMBrowser.

Клиент в составе существующего домена NT

Подключение происходит аналогично рассмотренному в п. Сервер в составе существующего домена NT . Далее вся работа происходит точно так же, как описано в предыдущем пункте.

Особенности локализации клиента и сервера

Для того, чтобы все компоненты Samba правильно работали с русскими именами файловых объектов и ресурсов, в /etc/samba/smb.conf необходимо добавить следующие директивы:

[global]

client code page =
character set =

Далее приводятся наборы значений этих директив и системных кодировок, наиболее часто используемых в России, Белоруссии и на Украине:

$LANG = ru_RU.KOI8-R
client code page = 866
characte set = koi8-r

$LANG = ru_RU.CP1251
client code page = 866
characte set = 1251

$LANG = be_BY.CP1251
client code page = 866
character set = 1251

$LANG = uk_UA.KOI8-U
client code page = 1125
character set = koi8-u

$LANG = uk_UA.CP1251
client code page = 1125
character set = 1251U

$LANG = ru_UA.CP1251
client code page = 1125
character set = 1251U

В двух последних случаях 1251U — специальное обозначение внутри Samba для комбинации «локально 1251 — удалённо 1125». В Samba определение удалённой кодировки делается по имени локальной [17].

Также необходимо проследить, чтобы на тех компьютерах Windows, с которыми предполагается взаимодействие через Samba, были установлены соответствующие системные настройки локализации. В противном случае велика вероятность, что вместо кириллических символов будут отображены знаки ? либо другие «непрошеные» символы.

Указанные директивы /etc/samba/smb.conf воздействуют на работу всех компонентов SambaSamba; — и серверных, и клиентских. На данный момент поддерживаются кириллические написания имён — файлов, каталогов и ресурсов.

Некоторые вопросы безопасности

Данный раздел относится в основном к серверной части Samba.

Прежде всего необходимо определить, какие интерфейсы должны «прослушиваться» Samba в ожидании запроса на соединение (по умолчанию прослушиваются все имеющиеся в системе).

Например, для того, чтобы ограничить прослушивание локальным хостом и первой сетевой картой, необходимо написать в /etc/samba/smb.conf:

[global]

interfaces = 127.0.0.1 eth0
bind interfaces only = Yes

Далее можно ограничить диапазоны адресов, с которых позволительно обращаться к данному серверу. Действие данных директив аналогично воздействию /etc/hosts.allow и /etc/hosts.deny на xinetd и ssh: если IP-адрес хоста не подпадает под разрешающее правило, то соединение не будет установлено вовсе. Для того, чтобы ограничить доступ двумя подсетями и локальной системой, дополнительно исключив при этом один хост, можно написать:

[global]

hosts allow = 192.168.1. 192.168.2. 127.
hosts deny = 192.168.1.12

Все вышеперечисленные директивы ограничивают соединения на уровне интерфейсов и IP-адресов до какой либо авторизации. Следующие директивы управляют режимом авторизации пользователей.

Во избежание перехвата чувствительных данных при передаче их по сети открытым текстом принято шифровать пароли. Samba и все версии Windows, начиная с версии Win98, по умолчанию используют шифрование паролей. Данная директива включает его в Samba:

[global]

encrypt passwords = yes

Файл переопределений имён пользователей является весьма мощным средством управления пользовательскими аккаунтами, однако при неразумном использовании это средство опасно и поэтому по умолчанию отключено. Внимательно ознакомьтесь с содержимым файла /etc/samba/smbusers, прежде чем использовать его.

[global]

; username map = /etc/samba/smbusers

Особенности использования Samba 3.0

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 указывает кодировку, в которой будут храниться файлы на диске. Наконец-то появилась возможность хранить имена файлов в UTF-8!

Параметр dos charset указывает кодировку, в которой Samba будет общаться с клиентами, не поддерживающими Unicode. Все версии Windows, начиная с 95, понимают Unicode — но всё же стоит установить dos charset = cp866, что соответствует client code page = 866 в более старых версиях.

Параметр display charset указывает, в какой кодировке должны выводить информацию программы, непосредственно обменивающиеся информацией с пользователем (например smbclient, net, wbinfo и другие).

Утилита net

Утилита 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

Управление машиной с Samba из Microsoft Management Console

Начиная с версии 2.2, Samba имеет возможность удалённого администрирования из MMC (Microsoft Management Console). Эта возможность полезна, когда Samba является членом NT-домена или AD. Администратор домена может создавать, удалять и изменять сетевые ресурсы на UNIX-машине с запущенной Samba.

Как сконфигурировать Samba для удалённого администрирования? Для управления ресурсами служат параметры /etc/samba/smb.conf:

[global]

add share command = <add script>

Параметр указывает скрипт, который будет вызван при попытке создания нового ресурса в MMC. Скрипту передаётся четыре параметра:

  1. Имя конфигурационного файла (например, /etc/samba/smb.conf).

  2. Имя добавляемого ресурса.

  3. Путь к существующей директории на диске.

  4. Комментарий.

Скрипт должен завершаться с кодом 0 в случае успешного создания и ненулевым в случае ошибки.

change share command = <change script>

Параметр указывает сценарий, который будет вызван при попытке изменения существующего ресурса в MMC. Сценарию передаётся четыре параметра:

  1. Bмя конфигурационного файла (например, /etc/samba/smb.conf)/

  2. Имя изменяемого ресурса.

  3. Путь к существующей директории на диске.

  4. Комментарий.

Скрипт должен завершаться с кодом 0 в случае успешного создания и ненулевым в случае ошибки.

delete share command = <delete script>

Параметр указывает скрипт, который будет вызван при попытке удаления существующего ресурса в MMC (Stop sharing). Скрипту передаётся два параметра:

  1. Имя конфигурационного файла (например, /etc/samba/smb.conf).

  2. Имя удаляемого ресурса.

Скрипт должен завершаться с кодом 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.

Работа в среде Active Directory

Для объединения компьютеров в домены Widows 2000 Server использует схему, отличную от NT-доменов, которая называется Active Directory; эта схема обладает гораздо большей масштабируемостью и позволяет централизованно администрировать машины, входящие в домен. Active Directory базируется на протоколе авторизации Kerberos, при котором имя пользователя и пароль не передаются по сети, а используется механизм так называемых билетов, выдаваемых сервером на определённое время. Получив билет, машина, входящая в домен, может авторизоваться на других машинах домена без участия сервера.

Установка Samba

Samba 3.0, в отличие от более ранних версий Samba, имеет возможность работать в сетях Windows, работающих в режиме 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.

Редактирование /etc/samba/smb.conf

Для работы в 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>

Регистрация компьютера в Active Directory домене

Убедитесь что 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

Для работы с компьютерами, зарегистрированными в Active Directory, не требуется указывать имя пользователя и пароль. Попробуйте выполнить команду:

$ smbclient -k -L <имя компьютера в домене>

Вы должны получить список доступных ресурсов, при этом smbclient не должен запрашивать имя пользователя и пароль.

Чтобы проверить, что доступ к ресурсам вашей машины возможен с других машин домена, вы можете попробовать выполнить всё ту же команду:

$ smbclient -k -L <имя вашего компьютера в домене>

и получить список доступных ресурсов. Можно также попробовать открыть какой-нибудь ресурс на вашей машине с Windows-машины, входящей в домен. В любом случае имя пользователя и пароль запрашиваться не должны.

Некоторые особенности работы в Active Directory

В отличие от доменов Windows NT, авторизация в Active Directory производится не по имени и паролю, а c помощью билетов протокола Kerberos. Из-за этого работа с smbclient может поначалу показаться необычной.

Во-первых, при вызове smbclient нужно указывать параметр -k. Во-вторых, билеты Kerberos даются на определённое время (обычно на сутки, но это зависит от настроек сервера). Поэтому их нужно периодически обновлять с помощью команды kinit:

# kinit username@REALM

где username — ваше имя в Active Directory домене REALM.

Так что если smbclient вдруг перестаёт подключаться к доменным ресурсам, попробуйте обновить билет — скорее всего, дело именно в этом.



[13] На самом деле Microsoft™ существенно расширила исходную спецификацию SMB.

[14] Как и в случае с /etc/hosts, увлекаться содержанием распределённых данных в локальных файлах не стоит.

[15] Так называемая «файлопомойка».

[16] Предпочтительнее использовать первый из них.

[17] Например, кодовая страница 1251 в качестве локальной однозначно задаёт удалённую 866.