Утверждение, что самой популярной операционной системой для клиентских машин, является Windows, думаю не вызовет больших споров. Несмотря на то, что рабочая среда многих дистрибутивов Linux становится все более дружелюбней и проще в использовании, пользователи не спешат менять свои предпочтения. Есть еще, конечно, третий игрок на рынке по имени MacOS, но это уже совсем другая история. А вот для серверов, тут уже соотношение Windows/Linux координально меняется и процент ОС на Linux растет. По этой причине, системным администраторам, приходится зачастую решать проблемы интеграции Linux-серверов в сеть, где преобладают клиентские машины на Windows. В основном в качестве файловых серверов, серверов БД и серверов печати.
В настоящее время, последние версии Windows умеют обращаться с файловой системой NFS, но так было не всегда. В недалеком прошлом, разработчики Linux систем от Windows встречных движений не ждали. А просто научили Linux прикидываться Windows.
В среде Windows взаимодействие компьютеров проходит по протоколу smb ( Server Message Block — Блоки серверных сообщений). Этот протокол выполняет все необходимые задачи по работе с файлами, каталогами и печатью. Все необходимые для этого действия в среде Linux можно реализовать с использованием пакета SAMBA. Что же обеспечивает этот пакет?
Во-первых, контроль доступа. Это осуществляется двумя способами. На уровне ресурсов, при котором ресурсу в сети назначается пароль и правила использования, при этом имя пользователя не имеет значение. Либо более совершенная система на уровне пользователя. При такой организации для каждого пользователя создается учетная запись, где содержится имя и пароль, а так же вся необходимая информация о правах доступа к ресурсу. Прежде чем получить доступ к ресурсу пользователь проходит аутентификацию. И уже согласно учетным записям ему предоставляются права на использование ресурса.
Во-вторых, эмуляция прав доступа согласно используемой файловой системы. В системах Linux и Windows права доступа к файлам организованы по разному. В Linux традиционно используют три категории пользователей файла — владелец, группа и остальные. Каждой категории могут быть предоставлены права на чтение, запись и выполнение. В Windows доступ предоставляется нескольким группам или пользователям, при этом права доступа предоставляются для каждого субъекта отдельно. Поэтому полноценно эмулировать права доступа заложенные в NTFS, Samba не может.
Ну с проблемами немного разобрались, давайте теперь разберемся с реализацией SAMBA в Linux.
Samba. Реализация в Linux.
Для работы SAMBA необходимо, чтобы были запущены два демона: smbd и nmbd. smbd — обеспечивает работу службы печати и разделения файлов для клиентов Samba. nmbd — обеспечивает работу службы имен, а также используется для запрос других демонов служб имен. Доступ к клиентам осуществляется по протоколу TCP/IP.
Обычно, Samba устанавливается вместе с дистрибутивом. Проверить это можно, например, следующей командой:
$ whereis samba
samba: /usr/lib64/samba /etc/samba /usr/libexec/samba /usr/share/man/man7/samba.7.gz
Если вы не получили не одного пути расположения samba, то вы можете установить либо, скачав пакет с официального сайта здесь. Либо установить из стандартного репозитария вашего дистрибутива.
Теперь проверим запущенна ли служба.
$ systemctl status smb
● smb.service - Samba SMB Daemon
Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled)
Active: active (running) since Sun 2023-08-06 10:28:08 UTC; 2s ago
Docs: man:smbd(8)
man:samba(7)
man:smb.conf(5)
Main PID: 2346 (smbd)
Status: "smbd: ready to serve connections..."
CGroup: /system.slice/smb.service
├─2346 /usr/sbin/smbd --foreground --no-process-group
├─2348 /usr/sbin/smbd --foreground --no-process-group
├─2349 /usr/sbin/smbd --foreground --no-process-group
└─2350 /usr/sbin/smbd --foreground --no-process-group
У меня включена, если у вас нет, то можно запустить ее следующей командой:
$ systemctl start smb && systemctl enable smb
# либо
$ service smb start
Конфигурационный файл для SAMBA находится обычно в /etc/samba/smb.conf либо /etc/smb.conf. Сервис Samba считывает его каждые 60 секунд. Поэтому изменения в конфиге вступают в силу без перезагрузки, но надо учитывать, что не распространяются на текущие соединения.
Одним из плюсов Linux для работы системных администраторов, это то, что конфигурационные файлы почти всегда — это текстовый файл, хорошо комментируемый внутри. А для того, чтобы активировать большинство параметров, достаточно просто раскомментировать соответствующую строку. smb.conf не исключение. Он состоит из разделов, которые начинается с имени раздела, заключенного в квадратные скобки. Каждый раздел состоит из ряда параметров в виде ключ=значение. В файле имеется четыре специальных раздела: [global], [homes], [printers] и отдельные ресурсы [shares]. Рассмотрим их чуть ближе.
[global]
В этом разделе содержатся общие характеристики, которые распространяются везде, но могут быть переопределены в других секциях. Значения типичных параметров следующие:
workgroup = имя группы (название рабочей группы в сети Windows)
netbios name = имя сервера в сети
server string = комментарий, который виден в окне свойств просмотра сети
guest ok = yes разрешение гостевого входа, значение no - гостевой вход запрещен.
guest account = nobody (имя под которым разрешен гостевой вход в систему)
security = user (Уровень доступа, user - на уровне пользователя, share - аутентификация на основе имени и пароля.
Если вы храните базу паролей на другом SMB-сервере, используется значение security=server и password server=имя_сервера. Если сервер входит в домен, то используется значение security=domain. Пароль для доступа указывается в файле определенном с помощью опции smb passwd file = /путь/до/файла.
При регистрации могуь использоваться шифрованные и незашифрованные пароли. Для включения варианта шифрования используется параметр encrypt password = yes.
Для корректного отображения имен файлов на кириллице, необходимо использовать следующие опции: client code page = 866 и character set = koi8-r
Если сервер работает сразу в нескольких сетях, с помощью опции interfaces = xxx.xxx.xxx.xxx/xx можно указать в какой сети должна работать программа. А при установке параметра bind interfaces only = yes, сервер будет реагировать только на запросы из этих сетей. Так же можно определить клиентов для которых разрешен доступ к ресурсам с помощью опции hosts allow = 192.168.1 192.168.2 127.
Еще одно удобство, которое есть в секции global — это использование различных переменных. После установки соединения, вместо них подставляются реальные значения. Это хорошо при гибкой настройке сервера. Например, можно определить отдельный лог-файл для каждой клиентской машины. Для этого достаточно указать следующую опцию log file= /var/log/samba/%m.log. Наиболее употребительные переменные следующие:
%a - ОС на клиентской машине
%m - NetBIOS-имя компьютера клиента
%L - NetBIOS-имя сервера SAMBA
%v - версия SAMBA
%I - IP-адрес компьютера клиента
%T - дата и время
%u - имя пользователя, работающего с сервисами
%H - домашняя директория пользователя %u
В Linux и Windows определен разный подход к именованию файлов. Linux чувствителен к регистру символов, а Windows — регистр не имеет значение. Включение параметров preserve case и short preserve case — позволяет сохранять всю вводимую информацию с учетом регистра символов.
[homes]
Этот раздел позволяет пользователям подключаться к своим рабочим каталогам без явного их описания. При обращении клиентом, например, к своему каталогу //sambaserver/user, система ищет соответствующее описание в файле. Если не находит его, то просматривает наличие этого раздела. При существовании раздела, просматривается файл паролей для поиска рабочего каталога пользователя, сделавшего запрос. После нахождения, делает его доступным для пользователя.
Типичное описание раздела следующее:
[homes]
comment = комментарий, который виден в окне свойств сети
browseable = yes. Определяет выводить ли ресурс в списке просмотра
writeable = yes - разрешает запись в домашнюю директорию (no - запрещает)
create mode = 0750. Права доступа для вновь созданных файлов.
directory mode = 0775. Права доступа для созданных каталогов.
Далее можно настроить доступ для определенных пользователей и групп пользователей. Это делается для существующего каталога. Для этого в файле пишем:
[public]
comment = Public Staff #комментарий
path = /home/samab #указывает на каталог, в котором располагается ресурс
public = yes # может ли ресурсом пользоваться гость
writeable = no # запрещает запись
printable = no # может ли ресурс использоваться для печати
write list = administrator, @group # Указание пользователей, которым разрешена запись в ресурс
несмотря на параметр writeable.
В Linux для того, чтобы сделать файл скрытым используют точку в начале имени файла. Чтобы эти файлы были скрыты и в Windows, необходимо добавить параметр hide dot files = yes. Кроме этого, есть возможность задать шаблон имен скрытых файлов, с помощью параметра hide files. Каждый шаблон начинается и заканчивается с символа «/». В шаблонах можно использовать символы регулярных выражений. Например, hide files= / *.log/*.tmp/123??.txt/. Эти все ограничения на отображение очень легко обходятся в WIndows установкой режима «показывать скрытые и системные файлы» проводника Windows. Для ограничения доступности файла (каталога) используются параметры: veto files и delete veto files.
[printers]
С помощью SAMBA можно организовать возможность сетевой печати с Windows машин. Для этого сначала в секции [global] необходимо указать следующие строки:
printcap name = /etc/printcap # файл описания принтеров, подключенных к системе.
load printers = yes # указывает на необходимость автоматического включения в список сетевых ресурсов
printing = lprng # система печати ( для Linux может еще использоваться bsd)
Далее каждый принтер описывается как дисковый ресурс. Единственное, параметр printable должен быть yes. Например:
[printers]
path = /var/spool/samba # каталог, в который помещаются задания на печать
browseable = yes
printable = yes
read only = yes
Создание учетных записей.
После того, как установили все параметры в smb.conf, можно протестировать его с помощью утилиты testparm. Программа проверяет синтаксические ошибки, а не логические. Но если программа отработала без ошибок, есть надежда, что ктнфиг будет загружен без проблем. Далее, при необходимости, можно проверить правильность установки принтера с помощью утилиты testprns.
Теперь, когда все настроено, создаем учетные записи. После настройки уже имеется одна учетная запись с минимальными правами nobody. Осталось добавить остальных. Для идентификации пользовтаелей SAMBA используется файл /etc/samba/smbpasswd. В нем содержатся имна и зашифрованные пароли для каждого пользователя. Механизм шифрования в Windows не совместим со стандартными Linux механизмами. Поэтому для заполнения файла паролей используется отдельная утилита — smbpasswd.
В следующем примере добавим пользователя user c фиктивной оболочкой, группой group и домашним каталогом /home/samba/user.
$ useradd -s /bin/false -d /home/samba/user -g group user
Теперь создадим для него пароль.
$ smbpasswd -a user
Резюме
Настройка SAMBA — довольно сложная процедура. После всех действий по конфигурированию, иногда может потребоваться перезапустить сервис. Если после всех настроек и перезагрузок, доступ к ресурсам организовать не удалось, то советую смотреть в сторону использования команд ping, tcpdump и т.д.