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

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

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

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

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

Вот основные записи в 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[10] :

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

[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.
		

все работает; иначе в 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
    		

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

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

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

Все учётные записи хранятся в файле /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 в домены 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]; его создание и назначение директив подробно описано в разделе “Обычный сервер” в части Особые ресурсы.



[10] Так называемая “файлопомойка” :-).