Версия: 4.16.0
Samba - комплект серверного и клиентского программного обеспечения для осуществления связи UNIX-машин с сетями Microsoft и LanManager, которые сами по себе представляют собой подклассы сетей SMB.
Samba использует протокол «NetBIOS over TCP/IP»
, что позволяет ей успешно взаимодействовать с такими реализациями SMB, как входящие в OS/2 3-4, Windows 9X-ME, NT3.5-4/2000/XP/Vista/7/8/10, UNIX-системами с Samba и, возможно, другими подобными. Samba не может работать без использования TCP/IP (на NetBIOS и NetBEUI). Об этом не стоит забывать при проектировании сетей.
Для работы в сетях SMB необходимы:
При использовании SMB доступны следующие ресурсы:
Контактная информация:
Официальный сайт
Разработчик:
Andrew Tridgell
Samba Team
Лицензия:
Стандартная общественная лицензия GNU версии 3 (GPLv3)
Синтаксис:
samba: root process [OPTION...]
Опции:
Опция | Описание |
---|---|
-M, --model=MODEL | Выберите модель процесса |
--maximum-runtime=seconds | Установить максимальное время выполнения серверного процесса, до автотерминации |
-b, --show-build | Показать информацию о сборке |
-?, --help | Показать справку |
--usage | Отобразить краткое сообщение об использовании |
-d, --debuglevel=DEBUGLEVEL | Установить уровень отладки |
--debug-stdout | Отправить вывод отладки в стандартный вывод |
-s, --configfile=CONFIGFILE | Использовать альтернативный конфигурационный файл |
--option=name=value | Установите параметр smb.conf из командной строки |
-l, --log-basename=LOGFILEBASE | Базовое имя для файлов журнала/отладки |
--leak-report | Включить отчет об утечке talloc при выходе |
--leak-report-full | Включить полный отчет об утечке talloc при выходе |
-D, --daemon | Стать демоном (по умолчанию) |
-i, --interactive | Запустите интерактив (не демон) и войдите в стандартный вывод |
-F, --foreground | Запустите демон на переднем плане (для daemontools, и т.д.) |
--no-process-group | Не создавайте новую группу процессов |
-V, --version | Отображает версию программы |
Все файлы конфигурации и авторизации Samba расположены в каталоге /etc/samba
и его подкаталогах.
Файл конфигурации | Описание файла конфигурации |
---|---|
MACHINE.SID | Системный идентификатор машины, формируется автоматически при старте сервера и предназначен для идентификации компьютера в домене сети Microsoft. |
codepages/ | Каталог, содержащий файлы с таблицами перекодировки. |
Lmhosts | То же, что и /etc/hosts, но он предназначен для преобразования IP<=>NetBIOS. Как правило, содержит только одну запись: 127.1.0.1 localhost, но туда можно заносить хосты из других подсетей (когда по ряду причин невозможно надежно провести преобразование 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/* | Файлы (как правило, двоичные базы данных), формируемые в процессе работы различных компонентов Samba. |
Наиболее примечательны:
Файл конфигурации | Описание файла конфигурации |
---|---|
browse.dat и wins.dat | текстовые файлы, их названия говорят сами за себя; |
winbindd*.tdb | базы данных доменных пользователей, формируемых winbind. Время от времени их необходимо архивировать: если при апгрейде, «переезде» или переустановке сервера winbind сгенерирует эти файлы с нуля, то соответствия системных и доменных символьных и числовых имен изменятся, и права доступа на восстановленные из архива файлы окажутся заведомо перепутанными. Поэтому настоятельно рекомендуется архивировать файлы /var/cache/samba/winbindd*.tdb; |
/var/lib/samba/ | служебные каталоги для администратора сервера. |
Далее описаны самые важные и наиболее часто используемые компоненты.
Cерверные компоненты:
Компонента | Описание компоненты |
---|---|
/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, которые радикально отличаются следующими особенностями.
Клиентские компоненты:
Компонента | Описание компоненты |
---|---|
/usr/bin/smbclient | интерактивное приложение для просмотра сетевых ресурсов; |
/sbin/mount.smb, /sbin/mount.smbfs, /usr/bin/smbumount, /usr/sbin/smbmnt, /usr/bin/smbmount | средства монтирования/размонтирования сетевых файловых систем. |
Утилиты:
Утилита | Описание утилиты |
---|---|
/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
.
Обычный сервер - компьютер, предоставляющий в сеть файловые ресурсы. Фактически это простой независимый файловый сервер, имеющий собственную базу авторизации пользователей.
Для того чтобы создать такой сервер, необходимо немного подправить стандартный конфигурационный файл smb.conf (подставить требуемые имя рабочей группы и имена ресурсов) и создать учетные записи пользователей, а также учесть рекомендации по безопасности.
За настройку клиента отвечает пакет "smbclient".
smbclient требует наличия файла /etc/samba/smb.conf, можно просто создать пустой файл командой touch.
Для создания обычного сервера необходимо ввести основные записи в /etc/samba/smb.conf
.
Секция [global] определяет общие настройки серверной части Samba в целом для всех ресурсов.
[global]
# Имя рабочей группы OFFICE
workgroup = OFFICE
# Уровень определения прав доступа на уровне пользователей
security = user
# Приоритет данного сервера среди других компьютеров рабочей группы:
# определяет, кто именно будет главной машиной, отвечающей за
# отображение ресурсов сети. Для сравнения, у Win9X os level = 34, а
# у NT4 os level = 64.
os level = 65
# Если нет домена - нет мастера.
domain master = no
# Текущий сервер Samba не будет выступать в качестве контроллера домена:
domain logons = no
# Отключить поддержку службы WINS
wins support = no
Далее надо определить, какие именно каталоги предоставляются в сеть
. Для каждого ресурса существует отдельная секция.
Самый простой вариант для обычных ресурсов - обычный каталог с именем public:
# Имя ресурса, видимое в сети
[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
# Указывает путь к расположению файлов и папок, к которым
# предоставляется доступ через протокол SMB (Server Message Block).
# В данном случае, это директория "/var/spool/samba".
path = /var/spool/samba
# Указывает, будет ли данная ресурсная папка видимой при просмотре
# сетевых ресурсов. Если установлено значение "no", то папка не будет
# отображаться при просмотре
browseable = no
# Позволяет гостевому пользователю получить доступ к ресурсу без
# необходимости аутентификации (ввода логина и пароля).
guest ok = yes
# Определяет, разрешена ли запись в ресурсной папке. Если значение
# установлено в "no", то запись запрещена.
writable = no
# Указывает, что данная ресурсная папка предназначена для печати.
# Это означает, что файлы в этой папке будут обрабатываться как
# документы, готовые к печати.
printable = yes
# Устанавливает права доступа к новым файлам, создаваемым в данной
# ресурсной папке. В данном случае, новые файлы будут иметь права
# доступа "0700", что означает, что только владелец имеет права
# на чтение, запись и выполнение.
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
Подключить вновь созданную машину 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-сервер, если он работает, командой:
systemctl stop smb
Теперь необходимо послать запрос на 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 должен быть абсолютно пустым либо содержать только административные учетные записи, с доменом никак не связанные.
Данная логика работы применима только в том случае, если не используется 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 командой:
systemctl start smb
и работать в домене сети Windows.
Для создания 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). В этом каталоге будут храниться личные настройки пользователя.
Для того чтобы включить клиентскую машину в домен, необходимо произвести следующие действия:
Первый метод - вручную
Прежде всего, необходимо создать локального пользователя системы с именем, соответствующим NetBIOS-name подключаемой к домену машины. К имени на конце добавляется символ "$". Для добавления машины с именем machine_name необходимо от имени пользователя root выполнить следующие команды:
/usr/sbin/useradd -g machines -d /dev/null -c "machine nickname" -s /bin/false machine_name$
passwd -l machine_named$
Теперь, когда создан пользователь (символ "$" в конце имени означает что это NetBIOS-имя компьютера, а не имя пользователя), можно добавить его в домен, выполнив от имени root команду:
smbpasswd -a -m machine_name
Теперь компьютер подключен к домену.
Второй метод - автоматический.
Работу по созданию машинного аккаунта можно переложить на 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-сервера. Пользователи могут входить под своими именами и паролями с любой машины домена с сохранением настроек, а также самостоятельно менять свои пользовательские пароли без помощи администратора сети.
Для работы Samba требуется Linux-пользователь — можно использовать существующего пользователя или создать нового.
Пользователь и группа nobody изначально существуют в системе, используются как гостевой аккаунт (guest account) по умолчанию и могут быть использованы в ресурсах для общего доступа с опцией guest ok = yes, благодаря чему пользователям не понадобится логиниться для доступа к таким ресурсам.
Следует учитывать, что для того, что бы создать и использовать любую учётную запись в /etc/samba/smbpasswd, предварительно необходимо создать соответствующую запись в /etc/passwd. Общее правило — для каждого пользователя в /etc/samba/smbpasswd обязательно должен существовать пользователь в /etc/passwd. Обратное утверждение неверно.
Хотя имена пользователей Samba общие с системными пользователями, Samba использует для них отдельные пароли. Чтобы добавить нового пользователя Samba, следует ввести команду, заменив user_name на имя нужного пользователя:
smbpasswd -a user_name
Будет предложено задать пароль для этого пользователя.
В зависимости от роли сервера может понадобиться изменить разрешения и атрибуты файлов для аккаунта Samba.
Для смены пароля пользователя Samba открыть терминал и ввести команду:
smbpasswd user_name
Для удаления существующего пользователя Samba открыть терминал и ввести команду:
smbpasswd -x <User_name>
Для приостановления учётной записи без удаления Samba открыть терминал и ввести команду:
smbpasswd -d <User_name>
Для смены пароля пользователя Samba открыть терминал и ввести команду:
smbpasswd -j <Domain_name> -U <Administrator_name>
Чтобы вывести список общедоступных ресурсов на сервере:
$ smbclient -L hostname -U%
Также можно использовать команду smbtree -N, которая покажет древовидную диаграмму всех общих ресурсов. Она использует широковещательные (broadcast) запросы и потому не рекомендуется для использования в сетях с большим числом компьютеров, но может быть полезна для проверки правильности имён общих ресурсов. Опция -N (-no-pass) отключает запрос пароля.
Создание точки монтирования ресурса:
mkdir /mnt/точка_монтирования
Примонтировать сетевой каталог:
mount -t cifs //СЕРВЕР/имя_ресурса /mnt/точка_монтирования -o username=имя_пользователя,password=пароль,workgroup=рабочая_группа,iocharset=utf8,uid=пользователь,gid=группа
Где:
Опции uid и gid соответствуют локальному (клиентскому) пользователю/группе, которые получат доступ на чтение и запись по указанному пути.
Если используемые uid и gid не соответствуют пользователю на сервере, могут помочь опции
forceuid
иforcegid
. Но следует иметь в виду, что тогда права доступа, отображаемые на клиенте, могут не соответствовать реальным правам доступа на сервере. Подробнее на https://wiki.archlinux.org/.Для подключения общего ресурса Windows без аутентификации укажите "username=*".
Использование uid и/или gid может приводить к ошибкам ввода-вывода; вместо этого рекомендуется установить/проверить корректность разрешений и атрибутов файлов.
Не использовать слэш / в конце пути. //СЕРВЕР/имя_ресурса/ не будет работать.
Если примонтированный ресурс работает нестабильно или зависает, следует попробовать включить другую версию протокола SMB, используя опцию vers=. Например, vers=2.0 для Windows Vista.
Хранение паролей в доступном для чтения файле не рекомендуется. Более безопасным методом является использование файла, например, внутри /etc/samba/credentials:
/etc/samba/credentials/share
-------------------------------------------------------------------------------------------------
username=имя_пользователя
password=пароль
В команде mount необходимо заменить опции username=myuser,password=mypass на credentials=/etc/samba/credentials/share.
Для безопасности этот файл должен быть доступен только для root:
chown root:root /etc/samba/credentials
chmod 700 /etc/samba/credentials
chmod 600 /etc/samba/credentials/share
Клиенты Samba обрабатывают имена хостов NetBIOS автоматически по умолчанию (поведение регулируется опцией name resolve order
в smb.conf). Другие программы (в том числе mount.cifs) используют Name Service Switch
, который не использует NetBIOS по умолчанию.
Пакет smbclient предоставляет драйвер libnss для разрешения имён NetBIOS. Для его использования запустите и включите службу winbind.service и добавьте wins в строку hosts в файле nsswitch.conf:
/etc/nsswitch.conf
-------------------------------------------------------------------------------------------------
hosts: mymachines resolve [!UNAVAIL=return] files myhostname dns wins
Теперь в процессе разрешения имён (например, при использовании mount.cifs или просто ping имя-netbios) демон winbindd будет отправлять запросы с использованием протокола NetBIOS Name Service (NBNS, также известен как WINS).
По умолчанию он отправляет широковещательный (broadcast) запрос в локальную сеть. Если у вас есть WINS-сервер, вы можете добавить wins server = ip-сервера-wins в smb.conf и перезапустить winbind.service, тогда winbindd и другие клиенты Samba станут отправлять unicast-запросы на указанный IP.
Если вы хотите, чтобы разрешение имени локального компьютера (которое указывается в опции netbios name в smb.conf) тоже работало, запустите и включите службу nmb.service, которая будет обрабатывать входящие запросы.
Вы можете протестировать разрешение WINS с помощью nmblookup. По умолчанию он отправляет широковещательные запросы в вашу локальную сеть независимо от значения опции wins server.
Имейте в виду, что WINS использует трафик, приходящий из порта 137.
Отключение поддержки NetBIOS/WINS
Если разрешение имён хостов NetBIOS/WINS не используется, может быть предпочтительно отключение этого протокола:
/etc/samba/smb.conf
-------------------------------------------------------------------------------------------------
[global]
disable netbios = yes
dns proxy = no
Затем отключите/остановите winbind.service.
По умолчанию Samba сконфигурирована на использование CUPS в качестве спулера печати. Подразумевается, что CUPS уже настроен и запущен. В /etc/samba/smb.conf присутствуют следующие директивы:
[global]
printcap name = lpstat
load printers = yes
printing = cups
Также необходимо создать ресурс [printers] - его создание и назначение директив подробно описано в подпункте «Обычный сервер» в части «Особые ресурсы».
Для того, чтобы все компоненты Samba правильно работали с русскими именами файловых объектов и ресурсов, в /etc/samba/smb.conf необходимо добавить следующие директивы:
[global]
client code page =
character set =
Далее приводятся наборы значений этих директив и системных кодировок, наиболее часто используемых в России, Белоруссии и на Украине:
$LANG = ru_RU.KOI8-R
client code page = 866
character set = koi8-r
$LANG = ru_RU.CP2151 client code page = 866 character 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 определение удаленной кодировки делается по имени локальной.
Также необходимо проследить, чтобы на тех компьютерах Windows, с которыми предполагается взаимодействие через Samba, были установлены соответствующие системные настройки локализации. В противном случае велика вероятность, что вместо кириллических символов будут отображены знаки ''?'' либо другие символы.
Указанные директивы /etc/samba/smb.conf воздействуют на работу всех компонентов Samba - и серверных, и клиентских. На данный момент поддерживаются кириллические написания имен - файлов, каталогов и ресурсов.
Данный раздел относится в основном к серверной части 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
Для задания кодировок используются следующие новые параметры smb.conf:
unix charset = <charset>
dos charset = <charset>
display charset = <charset>
где <charset> - любая кодировка, поддерживаемая iconv.
Список возможных кодировок можно узнать, выполнив команду:
iconv -list
Параметры client code page и character set больше не поддерживаются. Параметр unix charset указывает кодировку, в которой будут храниться файлы на диске, в которой заданы параметры в smb.conf.
Параметр dos charset указывает кодировку, в которой Samba будет общаться с клиентами, не поддерживающими Unicode. Все версии Windows, начиная с 95, понимают Unicode - но все же стоит установить dos charset = cp866, что соответствует client code page = 866 в более старых версиях.
Параметр display charset указывает, в какой кодировке должны выводить информацию программы, непосредственно обменивающиеся информацией с пользователем, например smbclient, net, wbinfo и другие.
Начиная с версии 2.2, Samba имеет возможнось удаленного администрирования из MMC (Microsoft Management Console)
. Эта возможность полезна, когда Samba является членом NT-домена или AD. Администратор домена может создавать, удалять и изменять сетевые ресурсы на UNIX-машине с запущенной Samba.
Для управления ресурсами служат параметры /etc/samba/smb.conf:
[global]
add share command = <add script>
Параметр указывает скрипт, который будет вызван при попытке создания нового ресурса в MMC. Скрипту передается четыре параметра:
change share command = <change script>
Параметр указывает скрипт, который будет вызван при попытке изменения существующего ресурса в MMC.
Скрипту передается четыре параметра:
delete share command = <delete script>
Параметр указывает скрипт, который будет вызван при попытке удаления существующего ресурса в MMC (Stop sharing). Скрипту передается два параметра:
Чтобы скрипты могли изменять конфигурационные файлы 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, при котором имя пользователя и пароль не передаются по сети, а используется механизм так называемых билетов, выдаваемых сервером на определенное время. Получив билет, машина, входящая в домен, может авторизоваться на других машинах домена без участия сервера
/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 не запущена. Если запущена, ее нужно остановить:
systemctl stop smb
systemctl stop winbind
Чтобы включить компьютер в домен, выполните команду:
net ads join -U administrator
где administrator - имя пользователя домена, имеющего право создавать новые учетные записи.
Если не было выдано сообщение об ошибке, то машина успешно зарегистрирована в домене - иначе проверьте правильность задания параметров в /etc/samba/smb.conf и /etc/krb5.conf. Убедитесь, что пользователь, указанный после -U в net ads join, имеет необходимые права на создание новых учетных записей.
Теперь можно запустить необходимые службы:
systemctl start smb
systemctl start winbind
Для работы с компьютерами, зарегистрированными в 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 - ваше имя в Active Directory домене REALM.
Так что если smbclient вдруг перестает подключаться к доменным ресурсам, попробуйте обновить билет - скорее всего, дело именно в этом.
Для создания необходимо:
[global]
, указать следующие параметры:security = user
map to guest = bad user #(или bad password)
В случае значения bad user, при сетевом входе, будет запрошено имя пользователя и пароль. Ввести можно любые значения и вход будет выполнен. В случае значения bad password не будет запроса имени пользователя и пароля.
Параметр map to guest
в Samba указывает, что всех пользователей, которым не удалось пройти аутентификацию, необходимо всё же допускать в систему, но с правами гостя.
[shared]
comment = Public Folder
path = /share
public = yes
writable = yes
read only = no
guest ok = yes
create mask = 0777
directory mask = 0777
force create mode = 0777
force directory mode = 0777
Где:
Необходимо убедиться, что директория из параметра path существует, если она отсутствует в системе, то ее следует создать и добавить полные права.
mkdir /share
chmod 777 /share
systemctl restart smb.service
Внимание! Если система загружена в режиме полного сохранения, то внесенные изменения в систему будут сохранены после перезагрузки.
Если режим загрузки другой, то рекомендуется воспользоваться утилитой "Сохранение изменений" до перезагрузки системы.
Для создания сетевого ресурса, доступ к которому необходимо разграничить следует:
Далее следует создать каталог, например:
sudo mkdir -m 770 /home/share1
Где:
Установить владельца каталога:
sudo chown user-1:user-1 /home/share1
Где:
Добавить пользователя для Samba:
sudo smbpasswd -a user-1
Далее необходимо открыть файл /etc/samba/smb.conf с помощью любого текстового редактора с правами администратора и добавить в самый низ файла строки:
[share1]
valid users = user-1
path = /home/share1
invalid users = root,admin
directory mode = 0770
writeable = yes
create mode = 0770
Сохранить файл, закрыть.
Для примнения настроек следует перезагрузить сервис:
sudo systemctl restart smb nmb
Внимание! Если система загружена в режиме полного сохранения, то внесенные изменения в систему будут сохранены после перезагрузки.
Если режим загрузки другой, то рекомендуется воспользоваться утилитой "Сохранение изменений" до перезагрузки системы и выполнить сохранение настроек Samba .
Для проверки входа на сетевой ресурс следует войти в файловый менеджер и выполнить подключение с авторизацией, к примеру:
Пример в проводнике Windows:
Установить можно отдельным модулем или пакетом:
Для установки следует воспользоваться утилитой "Установка и удаление программ".
Модуль, необходимый для установки:
Для установки следует воспользоваться утилитой "Установка и удаление программ".
Пакет, необходимый для установки:
Внимание! Если система загружена в режиме полного сохранения, то внесенные изменения в систему будут сохранены после перезагрузки.
Если режим загрузки другой, то рекомендуется воспользоваться утилитой "Сохранение изменений" до перезагрузки системы .