Чтобы решить проблемы, вызванные разобщенностью Microsoft Windows и Linux в корпоративных сетях и добиться «прозрачности» и доступности для администраторов и пользователей одной корпоративной сети к другой, применяется протоколы SMB/CIFS и программа Samba со стороны UNIX/Linux.
Что умеет Samba?
Samba представляет собой программный пакет с открытым исходным кодом, дающий сетевым администраторам возможность гибко и свободно настраивать, конфигурировать и выбирать системы и оборудование, то есть устанавливать на компьютерах UNIX/Linux имитации устройств с Windows. Это упрощает выполнение задач по обмену файлами (как файл-серверам) или задавать параметры печати в качестве принт-серверов.
Принцип программы Samba
Samba обеспечивает свободный доступ к:
- дискам Linux к Windows-компьютерам;
- дискам Windows к оборудованию с ПО Linux;
- принтерам Linux к Windows-компьютерам;
- принтерам Windows к Linux-системам.
Протоколы SMB/CIFS: что это такое, в чем различия
Говоря о программе Samba немаловажно упомянуть о протоколах SMB и CIFS:
- SMB (Server Message Block) – это один из наиболее старых протоколов (был разработан в 1983 году). SMB изначально существовал как клиент-серверный протокол для получения доступа к файлам, каталогам и сетевым ресурсам, а также для обмена информацией по межсистемным процессам. На сегодняшний день основное назначение SMB (версия 3.1.1.) – это установка соединения с устройствами со старыми версиями ОС Microsoft для подключения к серверам и обмена файлами.
- CIFS (Common Internet File System) представляет собой часть протокола SMB и применяется для удаленного подключения нескольких платформ – Windows, Linux или macOS. Отличительная характеристика CIFS – это его универсальность, позволяющая идентифицировать и читать файлы системы NTFS, применяемой в Windows, и HFS из macOS, чтобы совместно использовать эти файлы и принтеры между машинами с Windows и UNIX.
В отличие от SMB, CIFS имеет более широкий функционал – этот протокол способен поддерживать символические и жесткие ссылки, а также файлы больших размеров.
Но сейчас CIFS почти не используется, так как в последних версиях Windows (начиная с версии используются протоколы SMB 2 или SMB 3, которые по сути являются обновленной версией CIFS.
Настройка сети
Первым этапом нужно создать в панели управления все необходимые для этой сети серверы. Затем следует объединение всех машин через панель управления (раздел «Сети») в единую локальную сеть с присвоением каждому серверу локального IP-адреса. После того, как сеть будет создана, нужно провести настройки сетевых адаптеров для каждого сервера.
Настройка сетевого адаптера ОС Centos для Linux проводится так. Подключаемся к виртуальному серверу с правами суперпользователя и выполняем команду:
ifconfig -a
В результате должен отобразиться перечень подключенных интерфейсов:
eth0: flags=4163 mtu 1500
inet 5.200.47.73 netmask 255.255.255.0 broadcast 5.200.47.255
inet6 fe80::250:56ff:fe01:29a9 prefixlen 64 scopeid 0x20
ether 00:50:56:01:29:a9 txqueuelen 1000 (Ethernet)
RX packets 760 bytes 57362 (56.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth1: flags=4163 mtu 1500
inet6 fe80::8f6:6de2:ec53:e800 prefixlen 64 scopeid 0x20
ether 00:50:56:01:03:59 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 22 bytes 3580 (3.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1 (Local Loopback)
RX packets 64 bytes 5184 (5.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 64 bytes 5184 (5.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
В настройках сети находим поле MAC, для которого в списке интерфейсов вывелся параметр ether; теперь надо зафиксировать название интерфейса, в этом примере – eth1.
Прежде чем настраивать адаптер в ОС, понадобится уточнить в параметрах сети, была ли выполнена активация для опции DHCP в панели управления рабочей сетью.
Затем перейти в каталог с конфигурационными файлами сетевых интерфейсов:
cd /etc/sysconfig/network-scripts/
Скопировать конфигурационный файл существующего интерфейса, указав имя нового интерфейса:
cp ifcfg-<существующий_интерфейс> ifcfg-<новый_интерфейс>
Далее проверить в настройках сети в панели управления активирована ли опция DHCP. Если активирована, то нужно скопировать файл и отредактировать с помощью текстового редактора и внести исправления, указав собственные значения:
HWADDR=<mac_из_панели_управления>
NAME=<имя_интерфейса>
DEVICE=<имя_интерфейса>
ONB OOT=yes
USERCTL=no
BOOTPROTO=dhcp
check_link_down() {
return 1;
}
Сохраняем изменения.
После всех действий перезапустите сетевые службы сервера, чтобы изменения вступили в силу:
service network restart
Для проверки корректности работы выполните команду ping до другого сервера в частной или публичной сети:
ping 10.0.1.3
Для сетевых интерфейсов Windows настройка будет проводиться по следующей схеме:
- подключаемся к виртуальному серверу по RDP и открываем Network and Sharing Center. Для этого на рабочем столе Windows выбираем и открываем настройки сетевых подключений. В появившемся окне выбираем требуемый интерфейс, не имеющий доступа к сети. Для проверки состояния этого интерфейса откроем его детализацию (кнопка Details). Затем сравниваем значение поля Physical Address со информацией поля MAC в панели управления;
- если при создании сети в панели была активирована опция DHСP, то сетевой адаптер настроится автоматически. Уточнить состояние этой опции можно через свойства сети в панели управления;
- если опция DHCP при создании сети активирована не была, настраивать сеть понадобится вручную. Для этого свойства адаптера открываются через клавишу Properties (выбирается соединение IPv4 и нажимается Properties), затем в появившемся окне в поле IP-address вводится выданный адрес, а в поле Subnet mask – маска подсети. Все значения можно найти в панели в настройках сервера (раздел Сети) или в меню Сеть. После этого все изменения обязательно сохраняются.
Для проверки настроек сетевого адаптера выполняем команду:
ping 10.0.1.1
Чтобы проверить Windows Server 2016, пинг проводится на другой локальный сервер.
Настройка общей папки в Linux и Windows
Linux
Установка и настройка Samba-сервер для Linux состоит из следующих этапов:
1.Обновления информации о репозиториях и для существующих пакетов в системе:
apt-get update && apt-get upgrade
2.Установки пакета Samba:
apt-get install -y samba samba-client
3.Создания резервной копии файла конфигурации:
cp /etc/samba/smb.conf /etc/samba/smb.conf_sample
4.Создания директории для файлов, так чтобы все пользователи имели к ней доступ:
mkdir -p /samba/public
5.Создания каталога для всех пользователей:
mkdir /media/samba/public
6.Изменения прав доступа к каталогу:
cd /samba
chmod -R 0755 public
Важно! Для смены владельца и/или группы пользуемся командой chown
7.Создания директории для ограниченного круга лиц
8.Создания групп пользователей с применением системных инструментов:
groupadd smbgrp
9.Добавления пользователей Samba:
useradd user1
10.Внесения созданных пользователей в группу:
chgrp smbgrp /samba/private
11.Изменения группы, к которой относится приватная директория:
chgrp smbgrp /samba/private
12.Создания с помощью инструментов Samba пароля для добавленного пользователя:
smbpasswd -a user1
13.Редактирования конфигурационного файла samba с помощью текстового редактора:
текстовый редактор /etc/samba/smb.conf
Все строки из файла удаляются, а вместо них вставляются следующие:
[global]
workgroup = WORKGROUP
security = user
map to guest = bad user
wins support = no
dns proxy = no
[public]
path = /samba/public
guest ok = yes
force user = nobody
browsable = yes
writable = yes
[private]
path = /samba/private
valid users = @smbgrp
guest ok = no
browsable = yes
writable = yes
Сохранения введенных строк с использованием комбинации клавиш Ctrl + X, затем с нажатием Y и Enter.
Названия строк при этом обозначают:
- наименование одной из трех секций конфигурационного файла: global – данная секция отвечает за общие настройки Samba-сервера; public и private – секции, описывающие настройки директорий общего доступа;
- пять параметров в секции global: workgroup – наименование рабочей группы, security – уровень безопасности сервера с авторизацией по паре логин/пароль при значении user, map to guest — способ обработки запросов с отклонением неправильного пароля даже для существующего пользователя (значение bad user), wins support – включение/выключение поддержки WINS, dns proxy – обеспечение проксирования запросов к DNS;
- настройки директорий в секциях: path – полный путь до директории на жестком диске, guest ok – возможность доступа к каталогу без пароля (гостевой), force user – пользователь, ведущий работу с каталогом (для безопасности сервера используется значение nobody) , browsable — демонстрация конкретного каталога на сервере; writable – право пользователя при значении “yes” переименовывать, добавлять, удалять, редактировать файлы и перемещать их в каталоги; valid users – список пользователей с предоставленным доступом к каталогу.
14.Проверку настроек проводим командой:
testparm -s
15.Выполняем перезапуск сервера:
service smbd restart
service nmbd restart
Для настройки межсетевого экрана нужно открыть в правилах TCP-порты 139 и 445, а также UDP-порты 137 и 138 (для подсетей с высоким уровнем доверия). Если нужно указать собственный диапазон адресов, значение после ключа “-s” заменяется:
iptables -A INPUT -p tcp -m tcp --dport 445 -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 139 -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 137 -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 138 -s 10.0.0.0/24 -j ACCEPT
16.После перезагрузки сервера сохранить правила и применять их поможет пакет iptables-persistent. Для его установки вводится команда:
apt-get install iptables-persistent
Далее понадобится подтверждение запоминаний существующих правил iptables и их проверка:
iptables -L
Настройка общей папки в ОС Windows
Настройки общего доступа к папкам public и private в ОС Windows выполняются аналогично с Linux. Чтобы обеспечить беспарольный доступ к каталогу, настроим ограничения защиты в панели управления:
Панель управления → Сеть → Центр управления сетями и общим доступом → Расширенные настройки общего доступа
В обновленном окне надо открыть раздел “Все сети” и выбрать секцию “Общий доступ с парольной защитой”, после чего отключить этот параметр и сохранить изменения. Доступ к самому каталогу открывается так: кликом по папке правой кнопки мыши разворачивается контекстное меню, в котором выполняются действия:
Свойства → Доступ → Расширенная настройка → Открыть общий доступ к этой папке
В поле “Имя общего ресурса” указывается название, отображаемое для пользователей. После этого кликается кнопка “Разрешения”, выбирается “Все” и устанавливается “Полный доступ”, и все это подтверждается.Затем в свойствах папки public выбирается “Общий доступ”, добавляются все пользователи, делегируются права на чтение и запись, и кликаются кнопки “Поделиться” и “Готово”.
Порядок настройки папки общего доступа для ограниченного числа пользователей будет таким:
- выбираем “Свойства” папки, открываем вкладку “Доступ” и разворачиваем “Расширенные настройки”;
- в открывшемся окне выбираем опцию “Открыть общий доступ к этой папке” и нажимаем “Разрешения”;
- выбираем “Все” в поле “Группы или пользователи” и жмем “Удалить” — это закрывает анонимный доступ к папке;
- во вновь появившемся окне выполняем следующие действия: “Добавить” → “Дополнительно” → “Поиск” → выбор пользователя, которому нужно предоставить доступ к каталогу. Точно по такой же схеме можно добавить пользователей в составе группы;
- устанавливаем права доступа (или полного доступа к директории) для выбранных лиц: нажимая “OK” переходим к окну свойств папки, выбираем “Общий доступ”, ищем в поле выбора пользователей и групп и добавляем нужного человека (“Дополнительно” → “Поиск” → установка пользователя двойным кликом);
- проверяем правильность выбора пользователя, кликаем “OK”, задаем все требуемые уровни разрешений, прожимаем “Поделиться” и “Готово”.
Чтобы подключиться к общим папкам из среды Linux, понадобится установить отдельный пакет ПО — smbclient. Для этого вводим команду:
sudo apt-get install smbclient
Для подключения к серверу применяется команда:
smbclient -U<Имя_пользователя><Имя_пользователя>
Эту команду не обязательно вводить каждый раз — для этого монтируем общую директорию как сетевой диск через установку пакета cifs-utils:
sudo apt-get install cifs-utils
и применяем шаблон:
mount -t cifs -o username=<Имя_пользователя>,password= //<IP-адрес>/<Общий каталог> <Точка монтирования>
Важно! При подключении к общепользовательским папкам для Windows-сервера в не защищенных паролями директориях устанавливается имя пользователя “Everyone”, для Linux-сервера — “nobody”.
Подключение к общим папкам из среды Windows проводится по иной схеме. Для этого в проводнике или окне запуска программ (Windows + R), применяется шаблон:
<IP-адрес><имя_папки>
Указанный только один IP-адрес сервера выдает список общих папок.
Если при подключении к Windows-серверу всплывает окно с требованием ввода учетной записи, в строку имени пользователя заносится Everyone, а пароль остается пустым.
Подключение к Linux-серверу из ОС Windows выполняется через шаблон <IP-адрес><имя_папки> или через адрес сервера.
Как создать общий сетевой ресурс в Samba
Создание общего сетевого ресурса в Samba включает этапы:
–формирования директории, которую надо установить общедоступной:
mkdir /home/<user_name>/<folder_name>
–создания бэкапа для подстраховки:
sudo cp /etc/samba/smb.conf ~
–редактирования файла «/etc/samba/smb.conf»:
sudo nano /etc/samba/smb.conf
–добавления в файл следующих сведений:
[<folder_name>]
path = /home/<user_name>/<folder_name>
valid users = <user_name>
read only = no
–после заполнения файла своими данными сохраняем введенные сведения и перезапускаем Samba:
sudo service smbd restart
–затем проверяем директорию smb.conf наличие неточностей:
testparm
–доступ к общему сетевому ресурсу предоставляется так:
sudo apt-get install smbclient
# Просмотр всех общих ресурсов:
smbclient -L //<host_ip_or_name>/<folder_name> -U <user>
# Подключение:
smbclient //<host_ip_or_name>/<folder_name> -U <user>
Примечание 1: Для подключения к вашему общему сетевому ресурсу задействуйте имя вашего пользователя () и пароль, который располагается в «smb:////»
Стоит запомнить, что «» значение переводится в «[]», иначе говоря, в название общепользовательского ресурса, вписанного вами в «/etc/samba/smb.conf».
Примечание 2: Группа пользователей samba по умолчанию носит название «WORKGROUP».
Пожалуй нет ни одного офиса, в котором не применялись бы общие ресурсы локальной сети, будь то папки или принтеры. Крупные и средние компании используют возможности Active Directory, компании поменьше – используют штатные средства ОС Windows или Samba, но на серверах под управлением ОС Linux. Рассмотрим все случаи, как настроить Samba.
Что такое Samba?
Samba – серверное приложение, реализующее доступ клиентских терминалов к папкам, принтерам и дискам про протоколу SMB/CIFS.
Настройка общих папок в Linux
Установка и настройка Samba-сервер для Ubuntu выполняется следующими этапами.
Обновляем информацию о репозиториях и устанавливаем обновления для существующих пакетов в системе:
apt-get update && apt-get upgrade
Устанавливаем пакет Samba:
apt-get install -y samba samba-client
Создадим резервную копию файла конфигурации:
cp /etc/samba/smb.conf /etc/samba/smb.conf_sample
Создадим директории для файлов, например в каталоге /media:
mkdir /media/samba
Важно! По умолчанию, директория /media располагается в корне системы /, для нее редко создается свой раздел. По этой причине возможно переполнение корневого раздела. Во избежание этой неприятной ситуации, рекомендуем монтировать отдельный жесткий диск в /media/samba.
Создаем каталог для всех пользователей:
mkdir /media/samba/public
Изменим права доступа к каталогу:
chmod -R 0755 /media/samba/public
Также следует воспользоваться командой chown для смены владельца и/или группы.
Создаем директорию для ограниченного круга лиц:
mkdir /media/samba/private
С помощью системных инструментов создадим группу пользователей:
groupadd smbgrp
Добавляем пользователей Samba:
useradd user1
Созданных пользователей добавляем в группу:
usermod -aG smbgrp user1
Изменим группу, которой принадлежит приватная директория:
chgrp smbgrp /media/samba/private
С помощью инструментов Samba создадим пароль для добавленного пользователя:
smbpasswd -a user1
С помощью текстового редактора, например, nano, редактируем конфигурационный файл samba:
nano /etc/samba/smb.conf
Удаляем все строки из файла. Вставляем следующие:
[global]
workgroup = WORKGROUP
security = user
map to guest = bad user
wins support = no
dns proxy = no
[public]
path = /media/samba/public
guest ok = yes
force user = nobody
browsable = yes
writable = yes
[private]
path = /media/samba/private
valid users = @smbgrp
guest ok = no
browsable = yes
writable = yes
Сохраняем используя сочетание Ctrl + X, затем нажимаем Y и Enter.
Объясним значения строк. конфигурационный файл состоит из трех секций:
global – данная секция отвечает за общие настройки Samba-сервера;
public и private – секции описания настроек директорий общего доступа.
В секции global присутствуют пять параметров:
- workgroup – рабочая группа. Для упрощения работы пользователей WORKGROUP указывается, как группа по умолчанию. Если в вашей сети имя рабочей группы изменено, то следует изменить это значение и для Samba;
- security – уровень безопасности сервера. Значение user означает авторизацию по паре логин/пароль;
- map to guest – параметр определяет способ обработки запросов. Значение bad user означает, что запросы с неправильным паролем будут отклонены, даже если такое имя пользователя существует;
- wins support – включить или выключить поддержку WINS;
- dns proxy – возможность проксирования запросов к DNS.
Настройки директорий выполняются в соответствующих секциях:
path – полный путь до директории на жестком диске;
guest ok – возможность доступа к каталогу без пароля (гостевой);
browsable – показывать ли каталог (“шару”) на сервере среди прочих. Если параметр установлен как “no”, то доступ будет возможен по полному пути, например ip-addresshidden_directory;
force user – пользователь от которого ведется работа с каталогом. Для повышения безопасности сервера, обычно используют nobody. Главное, не использовать пользователя root – это небезопасно.
writable – установка значения как “yes” позволяет пользователю выполнять действия над файлами внутри каталога – переименование, добавление, удаление, перемещение в подкаталог и копирование;
valid users – список пользователей у которых есть доступ к каталогу. Если пользователей несколько, их имена указываются через запятую. Если необходим доступ для пользователей принадлежащих группе, перед именем группы устанавливается символ ”at” @ (“собака”).
Важно! Имя директории общего доступа, отображаемое пользователям, равно имени секции в которой оно описано.
Проверяем настройки с помощью команды:
testparm -s
Перезапускаем сервер:
service smbd restart
service nmbd restart
Настроим межсетевой экран. Для этого в правилах откроем TCP-порты 139 и 445, а также UDP-порты 137 и 138, но только для тех подсетей, которым доверяете. Для указания собственного диапазона адресов, замените значение после ключа “-s”:
iptables -A INPUT -p tcp -m tcp --dport 445 -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 139 -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 137 -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 138 -s 10.0.0.0/24 -j ACCEPT
Для сохранения правил и применения их после перезагрузки сервера следует воспользоваться пакетом iptables-persistent. Установим его:
apt-get install iptables-persistent
Входе установки пакета, программа предложит запомнить существующие правила iptables. Подтверждаем это действие.
Для проверки существующих правил используем:
iptables -L
Настройка общих папок в Windows
По аналогии с Linux, настроим общий доступ к папкам public и private, но в ОС Windows.
Для создания общего доступа к каталогу без парольной защиты, необходимо настроить ограничения защиты в панели управления. Для этого открываем:
Панель управления → Сеть → Центр управления сетями и общим доступом → Расширенные настройки общего доступа.
В обновленном окне открываем раздел “Все сети” и ищем секцию “Общий доступ с парольной защитой”. Устанавливаем параметр в положение “Отключить общий доступ с парольной защитой”. Для сохранения значений параметра кликаем по кнопке “Сохранить изменения”.
Теперь откроем доступ к самому каталогу. Кликаем по папке правой кнопкой мыши, в контекстном меню выбираем “Свойства”. Открываем вкладку “Доступ” и кликаем по “Расширенная настройка”.
В открывшемся окне расширенных настроек общего доступа отмечаем галочкой “Открыть общий доступ к этой папке”, в поле “Имя общего ресурса” указываем название, которое будет отображено пользователям. Кликаем по кнопке “Разрешения”.
В открывшемся окне, в группах пользователей выбираем “Все”, а в разрешениях для группы, устанавливаем галку “Полный доступ”. Нажимаем “OK” в этом и остальных окнах.
В окне свойств папки public кликаем по кнопке “Общий доступ”.
В открывшемся окне добавляем пользователя “Все”, а также делегируем права на “Чтение и запись”. Кликаем по кнопке “Поделиться”.
В обновленном окне нажимаем “Готово”.
Настроим папку общего доступа, но для ограниченного круга лиц.
Кликаем правой кнопкой мыши по папке, выбираем “Свойства”.
В открывшемся окне переходим на вкладку “Доступ”. Кликаем по кнопке “Расширенные настройки”.
В новом открывшемся окне, устанавливаем галку “Открыть общий доступ к этой папке”. Затем кликаем по кнопке “Разрешения”.
В открывшемся окне, в поле “Группы или пользователи” выбираем “Все” и нажимаем кнопку “Удалить”.
Таким образом установлен запрет на анонимный доступ к папке.
Окно обновится. Кликаем по кнопке “Добавить”.
В открывшемся окне кликаем по кнопке “Дополнительно”.
Окно изменится в размере. Кликаем по кнопке “Поиск”. Двойным кликом выбираем пользователя, которому необходим доступ к этому каталогу, например, buhgalter.
В открывшемся окне, при желании, можем добавить еще одного пользователя через “Дополнительно” – “Поиск”. Аналогичным образом можно добавить группу пользователей, например, “Администраторы”, при этом следует понимать, что доступ будет предоставлен всем пользователям из этой группы.
Установим права доступа для пользователя “buhgalter”. Если требуется полный доступ к директории, устанавливаем галку в соответствующем месте.
Нажимая кнопки “OK” возвращаемся к окну свойств папки, в котором кликаем по кнопке “Общий доступ”.
В данном окне необходимо найти и добавить пользователя “бухгалтер”.
В окне выбора пользователей и групп кликаем по кнопке “Дополнительно”.
Окно снова изменит свои размеры. Кликаем по кнопке “Поиск”. В найденном ниже списке пользователей и групп выбираем искомого пользователя. Выбираем его двойным кликом.
В оставшемся окне проверяем правильно ли указан пользователи и нажимаем кнопку “OK”.
Устанавливаем требуемый уровень разрешений для пользователя и кликаем по кнопке “Поделиться”.
Кликаем по кнопке “Готово”.
Подключение к общим папкам из Linux
Для подключения к общим папкам из среды Linux требуется установка отдельного программного обеспечения – smbclient. Установим:
sudo apt-get install smbclient
Для подключения к серверу используется следующий формат команды:
smbclient -U <Имя_пользователя> <IP-адрес><Имя_каталога_на_сервере>
Пример:
smbclient -U buhgalter 10.0.0.1public
Для того, Чтобы не вводить эту команду каждый раз, можно настроить монтирование общей директории как сетевого диска. Для этого установим пакет cifs-utils:
sudo apt-get install cifs-utils
Монтирование выполняется по следующему шаблону:
mount -t cifs -o username=<Имя_пользователя>,password= //<IP-адрес>/<Общий каталог> <Точка монтирования>
Пример:
mount -t cifs -o username=Everyone,password= //10.0.0.1/public /media
Важно! Если требуется подключение к общим папкам расположенным на Windows-сервере, то в для не защищенных паролем директорий, в качестве имени пользователя, следует использовать “Everyone”. Для подключения к Linux-серверу рекомендуем использовать в качестве имени пользователя “nobody”. В случае доступа к защищенным директориям следует использовать те учетные данные, которые вы указали.
Подключение к общим папкам из Windows
Подключение к удаленным папкам из среды Windows выполняется немного иначе. Для этого в проводнике или окне запуска программ (Windows + R), следует использовать следующий шаблон:
<IP-адрес><имя_папки>
Указав просто IP-адрес сервера вы получите список общих папок.
При подключении к Windows-серверу, система безопасности может потребовать ввод учетных данных. Для подключения к общей открытой папке используем Everyone, а поле пароля оставляем пустым.
При подключении к Linux-серверу из ОС Windows, следует использовать указанный ранее шаблон:
<IP-адрес><имя_папки>
или просто адрес сервера:
<IP-адрес>
Как создать общий сетевой ресурс в Samba
Создайте директорию, которую в хотите сделать общей:
mkdir /home//
Создайте бэкап, если что-то пойдет не так:
sudo cp /etc/samba/smb.conf ~
Отредактируйте файл “/etc/samba/smb.conf”:
sudo nano /etc/samba/smb.conf
Добавьте следующее содержимое в файл:
[]
path = /home//
valid users =
read only = no
Заполните файл своими данными, сохраните его и затем закройте
Перезапустим Samba:
sudo service smbd restart
Использую данную команду проверьте вашу директорию smb.conf на ошибки:
testparm
Чтобы получить доступ к вашему общему сетевому ресурсу:
sudo apt-get install smbclient
# Просмотр всех общих ресурсов:
smbclient -L /// -U
# Подключение:
smbclient /// -U
Note 1: Чтобы подключиться к вашему общему сетевому ресурсу используйте имя вашего пользователя () и пароль, который находится “smb:////”
Учтите, что “” значение передается в “[]”,
другими словами, имя общего ресурса, которое вы ввели в “/etc/samba/smb.conf”.
Note 2: Группа пользователей samba по умолчанию это – “WORKGROUP”.
From Wikipedia, the free encyclopedia
Initial release | 1992; 31 years ago[1] |
---|---|
Stable release |
4.19.0[2] |
Repository |
|
Written in | C, Python |
Operating system | Multiplatform |
Type | Network file system |
License | 2008: GPL-3.0-or-later[a] 1993: GPL-2.0-or-later[b] 1992: Proprietary[c] |
Website | www |
Samba is a free software re-implementation of the SMB networking protocol, and was originally developed by Andrew Tridgell. Samba provides file and print services for various Microsoft Windows clients and can integrate with a Microsoft Windows Server domain, either as a Domain Controller (DC) or as a domain member. As of version 4, it supports Active Directory and Microsoft Windows NT domains.
Samba runs on most Unix-like systems, such as Linux, Solaris, AIX and the BSD variants, including Apple’s macOS Server, and macOS client (Mac OS X 10.2 and greater). Samba also runs on a number of other operating systems such as OpenVMS and IBM i. Samba is standard on nearly all distributions of Linux and is commonly included as a basic system service on other Unix-based operating systems as well. Samba is released under the terms of the GNU General Public License. The name Samba comes from SMB (Server Message Block), the name of the proprietary protocol used by the Microsoft Windows network file system.
Early history[edit]
Andrew Tridgell developed the first version of Samba Unix in December 1991 and January 1992, as a PhD student at the Australian National University, using a packet sniffer to do network analysis of the protocol used by DEC Pathworks server software. It did not have a formal name at the time of the first releases, versions 0.1, 0.5, and 1.0, all from the first half of January 1992; Tridgell simply referred to it as «a Unix file server for Dos Pathworks.» He understood that he had «in fact implemented the netbios protocol» at the time of version 1.0 and that «this software could be used with other PC clients.»[citation needed]
With a focus on interoperability with Microsoft’s LAN Manager, Tridgell released «netbios for unix», observer, version 1.5 in December 1993. This release was the first to include client-software as well as a server. Also, at this time GPL2 was chosen as license.[citation needed]
Midway through the 1.5-series, the name was changed to smbserver. However, Tridgell got a trademark notice from the company «Syntax», who sold a product named TotalNet Advanced Server and owned the trademark for «SMBserver». The name «Samba» was derived by running the Unix command grep through the system dictionary looking for words that contained the letters S, M, and B, in that order (i.e. grep -i '^s.*m.*b' /usr/share/dict/words
).[5]
Versions 1.6, 1.7, 1.8, and 1.9 followed relatively quickly, with the latter being released in January 1995. Tridgell considers the adoption of CVS in May 1996 to mark the birth of the Samba Team, though there had been contributions from other people, especially Jeremy Allison, previously.[6]
Version 2.0.0 was released in January 1999, and version 2.2.0 in April 2001.
Version history[edit]
Version 3.0.0, released on 23 September 2003, was a major upgrade. Samba gained the ability to join Active Directory as a member, though not as a domain controller.[7] Subsequent point-releases to 3.0 have added minor new features. Currently, the latest release in this series is 3.0.37, released 1 October 2009, and shipped on a voluntary basis.[8] The 3.0.x series officially reached end-of-life on 5 August 2009.[8]
Version 3.1 was used only for development.
With version 3.2, the project decided to move to time-based releases. New major releases, such as 3.3, 3.4, etc. will appear every six months. New features will only be added when a major release is done, point-releases will be only for bug fixes.[9] Also, 3.2 marked a change of license from GPL2 to GPL3, with some parts released under LGPL3.[4] The main technical change in version 3.2 was to autogenerate much of the DCE/RPC-code that used to be handcrafted. Version 3.2.0 was released on 1 July 2008.[10] and its current release is 3.2.15 from 1 October 2009. The 3.2.x series officially reached end-of-life on 1 March 2010.[10]
Date | Version | Description |
---|---|---|
23 September 2003 | 3.0 | Active Directory support[11] |
1 July 2008 | 3.2 | It will be updated on an as-needed basis for security issues only[12] |
27 January 2009 | 3.3 | |
3 July 2009 | 3.4 | This was the first release to include both Samba 3 and Samba 4 source code.[13] |
1 March 2010 | 3.5 | This was the first release to include experimental support for SMB2.[14] |
9 August 2011 | 3.6 | This is the first branch which includes full support for SMB2.[15] |
11 December 2012 | 4.0 | It is a major rewrite that enables Samba to be an Active Directory domain controller, participating fully in a Windows Active Directory Domain. Its first technical preview (4.0.0TP1) was released in January 2006 after 3 years of development.[16][17] |
10 October 2013 | 4.1 | support for SMB3 |
4 March 2015 | 4.2 | Btrfs based file compression, snapshots and winbind integration[18] |
8 September 2015 | 4.3 | New Logging features, SMB 3.1.1 support[19] |
22 March 2016 | 4.4 | Asynchronous flush requests[20] |
7 September 2016 | 4.5 | NTLM v1 disabled by default, Virtual List View, Various performance improvements |
7 March 2017 | 4.6 | Multi-process Netlogon support |
21 September 2017 | 4.7 | Samba AD with MIT Kerberos |
13 March 2018 | 4.8 | Apple Time Machine Support. Setups using ‘domain’ or ‘ads’ security modes now require ‘winbindd’ to be running.[21] |
13 September 2018 | 4.9 | Many changes[22] |
19 March 2019 | 4.10 | |
17 September 2019 | 4.11 | SMB1 is disabled by default as a mitigation for the WannaCry vulnerability. |
3 March 2020 | 4.12 | |
22 September 2020 | 4.13 | Samba 4.13 raises the minimum version of Python to 3.6. |
9 March 2021 | 4.14 | Major overhaul of VFS subsystem and more.[23] |
20 September 2021 | 4.15 | Many changes.[24] |
21 March 2022 | 4.16 | Many changes.[25] |
13 September 2022 | 4.17 | Many changes.[26] |
8 March 2023 | 4.18 | Many changes.[27] |
Legend: Old version Older version, still maintained Latest version Latest preview version Future release |
Security[edit]
Some versions of Samba 3.6.3 and lower suffer serious security issues which can allow anonymous users to gain root access to a system from an anonymous connection, through the exploitation of an error in Samba’s remote procedure call.[28]
On 12 April 2016, Badlock,[29] a crucial security bug in Windows and Samba, was disclosed. Badlock for Samba is referenced by CVE|2016-2118 (SAMR and LSA man in the middle attacks possible).[30]
On 24 May 2017, it was announced that a remote code execution vulnerability had been found in Samba named EternalRed or SambaCry, affecting all versions since 3.5.0.[31] This vulnerability was assigned identifier CVE|2017-7494.[31][32]
On 14 September 2020, a proof-of-concept exploit for the netlogon vulnerability called Zerologon (CVE|2020-1472) for which a patch exists since August was published.[33] Some federal agencies using the software have been ordered to install the patch.[34]
Features[edit]
Samba allows file and print sharing between computers running Microsoft Windows and computers running Unix. It is an implementation of dozens of services and a dozen protocols, including:
- NetBIOS over TCP/IP (NBT)
- SMB (known as CIFS in some versions)
- Samba supports POSIX extensions for CIFS/SMB. The initial extension was CIFS VFS (CAP_UNIX) from 2004, which has been somewhat superseded by SMB3.[35]
- DCE/RPC or more specifically, MSRPC, the Network Neighborhood suite of protocols
- A WINS server also known as a NetBIOS Name Server (NBNS)
- The NT Domain suite of protocols which includes NT Domain Logons
- Security Account Manager (SAM) database
- Local Security Authority (LSA) service
- NT-style printing service (SPOOLSS)
- NTLM
- Active Directory Logon using modified versions of Kerberos and LDAP
- DFS server
All these services and protocols are frequently incorrectly referred to as just NetBIOS or SMB. The NBT (NetBIOS over TCP/IP) and WINS protocols, and their underlying SMB version 1 protocol, are deprecated on Windows. Since Windows Vista the WS-Discovery protocol has been included along with SMB2 and its successors, which supersede these. (WS-Discovery is implemented on Unix-like platforms by third party daemons which allow Samba shares to be discovered when the deprecated protocols are disabled).
Samba sets up network shares for chosen Unix directories (including all contained subdirectories). These appear to Microsoft Windows users as normal Windows folders accessible via the network. Unix users can either mount the shares directly as part of their file structure using the mount.cifs command or, alternatively, can use a utility, smbclient (libsmb) installed with Samba to read the shares with a similar interface to a standard command line FTP program. Each directory can have different access privileges overlaid on top of the normal Unix file protections. For example: home directories would have read/write access for all known users, allowing each to access their own files. However they would still not have access to the files of others unless that permission would normally exist. Note that the netlogon share, typically distributed as a read only share from /etc/samba/netlogon
, is the logon directory for user logon scripts.
Samba services are implemented as two daemons:
- smbd, which provides the file and printer sharing services, and
- nmbd, which provides the NetBIOS-to-IP-address name service. NetBIOS over TCP/IP requires some method for mapping NetBIOS computer names to the IP addresses of a TCP/IP network.
Samba configuration is achieved by editing a single file (typically installed as /etc/smb.conf
or /etc/samba/smb.conf
). Samba can also provide user logon scripts and group policy implementation through poledit
.
Samba is included in most Linux distributions and is started during the boot process. On Red Hat, for instance, the /etc/rc.d/init.d/smb
script runs at boot time, and starts both daemons. Samba is not included in Solaris 8, but a Solaris 8-compatible version is available from the Samba website. The OS/2-based ArcaOS includes Samba to replace the old IBM LAN Server software.[36]
Samba includes a web administration tool called Samba Web Administration Tool (SWAT).[37][38]
SWAT was removed starting with version 4.1.[39]
Samba TNG[edit]
|
This section needs to be updated. Please help update this article to reflect recent events or newly available information. (January 2016) |
Samba TNG (The Next Generation) was forked in late 1999, after disagreements between the Samba Team leaders and Luke Leighton about the directions of the Samba project. They failed to come to an agreement on a development transition path which allowed the research version of Samba he was developing (known at the time as Samba-NTDOM) to slowly be integrated into Samba.[40] Development has been minimal, due to a lack of developers. The Samba TNG team frequently directed potential users towards Samba because of its better support and development.[41]
A key goal of the Samba TNG project was to rewrite all of the NT Domains services as FreeDCE projects.[42] This was made difficult as the services were developed manually through network reverse-engineering, with limited or no reference to DCE/RPC documentation.[citation needed]
A key difference from Samba was in the implementation of the NT Domains suite of protocols and MSRPC services. Samba makes all the NT Domains services available from a single place, whereas Samba TNG separated each service into its own program.[citation needed]
ReactOS started using Samba TNG services for its SMB implementation. The developers of both projects were interested in seeing the Samba TNG design used to help get ReactOS talking to Windows networks. They worked together to adapt the network code and build system. The multi-layered and modular approach made it easy to port each service to ReactOS.[43]
See also[edit]
- LM hash
- SSLBridge
Notes[edit]
- ^ GPL-3.0-or-later and LGPL-3.0-or-later since 2008-07-01, version 3.2.0.[3][4]
- ^ GPL-2.0-or-later from 1993, version 1.5, until 2009-10-01, version 3.0.37.
- ^ Proprietary from 1992 until 1993.
References[edit]
- ^ «Samba Latest News». Retrieved 28 November 2017.
- ^ «[Announce] Samba 4.19.0 Available for Download».
- ^ «Samba Copyright Policy».
- ^ a b «Samba Adopts GPLv3 for Future Releases». Retrieved 21 September 2015.
- ^ Andrew Tridgell and the Samba Team (27 June 1997). «A bit of history and a bit of fun». Archived from the original on 15 August 2020. Retrieved 28 May 2009.
- ^ «10 years of Samba!». Retrieved 21 September 2015.
- ^ «The first stable release of Samba 3.0 is available». Retrieved 21 September 2015.
- ^ a b «Release Planning for Samba 3.0». Retrieved 21 September 2015.
- ^ «Monday, April 28 — Samba Mashup Report». Retrieved 21 September 2015.
- ^ a b «Release Planning for Samba 3.2». Retrieved 21 September 2015.
- ^ «Samba Team announces the first official release of Samba 3.0». Retrieved 24 September 2003.
- ^ «[ANNOUNCE] Samba 3.2.0 Available for Download». Retrieved 21 September 2015.
- ^ «Samba — Release Notes Archive». Retrieved 21 September 2015.
- ^ «Samba — Release Notes Archive». Retrieved 21 September 2015.
- ^ «Samba — Release Notes Archive». Retrieved 21 September 2015.
- ^ «Samba — opening windows to a wider world». Retrieved 21 September 2015.
- ^ «Samba 4.0.0TP1 Available for Download». Archived from the original on 22 July 2006. Retrieved 11 January 2014.
- ^ «Samba — Release Notes Archive». Retrieved 21 September 2015.
- ^ «Samba — Release Notes Archive». Retrieved 8 September 2015.
- ^ «Samba — Release Notes Archive». Retrieved 22 March 2016.
- ^ «Release Notes for Samba 4.8.0». 13 March 2018. Retrieved 19 March 2019.
- ^ «Samba 4.9.0 — Release Notes».
- ^ «Samba 4.14.0 — Release Notes».
- ^ «Samba 4.15.0 — Release Notes».
- ^ «Samba 4.16.0 — Release Notes».
- ^ «Samba 4.17.0 — Release Notes».
- ^ «Samba 4.18.0 — Release Notes».
- ^ CVE-2012-1182 — A security announcement regarding a major issue with Samba 3.6.3 and lower.
- ^ «Badlock». Archived from the original on 12 April 2016. Retrieved 12 April 2016.
- ^ «Microsoft, Samba Patch «Badlock» Vulnerability». Retrieved 13 April 2016.
- ^ a b «Samba 4.6.4 — Release Notes». 24 May 2017. Retrieved 24 May 2017.
- ^ «SambaCry is coming». Securelist — Kaspersky Lab’s cyberthreat research and reports. Retrieved 19 March 2018.
- ^ Cimpanu, Catalin. «Microsoft says it detected active attacks leveraging Zerologon vulnerability». ZDNet. Retrieved 9 October 2020.
- ^ Constantin, Lucian (23 September 2020). «What is Zerologon? And why to patch this Windows Server flaw now». CSO Online. Retrieved 9 October 2020.
- ^ «UNIX Extensions». SambaWiki.
- ^ «ArcaMapper». arcanoae.com. Retrieved 11 September 2020.
- ^ «Chapter 37. SWAT: The Samba Web Administration Tool». Retrieved 21 September 2015.
- ^ «SWAT your Samba problems». linux.com. 31 January 2008.
- ^ «Samba 4.1 Features added/changed». Retrieved 21 September 2015.
- ^ «Project FAQ — What is the relationship between Samba and Samba TNG?». Retrieved 19 February 2008.
- ^ «Project FAQ — Which should I use — Samba or Samba TNG?». Retrieved 19 February 2008.
- ^ «Project FAQ — What’s all this about FreeDCE?». Retrieved 19 February 2008.
- ^ Vincent, Brian. «Interview with Steven Edwards». Wine HQ. Retrieved 19 February 2008.
External links[edit]
Wikibooks has a book on the topic of: Samba
- Official website
Contents
-
Samba
-
About
- Links
- Why Samba
- Alternatives
- Releases
- Samba versions and features
- 3 Daemons and a supervisor
- Requirements
- Ports
- SRV records
-
Definitions
- Active Directory forest
- Active Directory domain
- Active Directory organizational units
- Active Directory global catalog
- NOTES
-
Installation
-
Server
- NT4
- AD DC
- AD fileserver
- Client
-
Server
-
Configure
- Test and show configuration and their defaults
- Logging
-
Flexiblity
- macros
- Include
- Dedicated resources
- Interfaces
- Ports
- Server aliases
- Security
-
Backends
- Backend smbpasswd
- Backend tdbsam
- Backend ldapsam
-
Accounts
- NT4 Accounts
- AD DC accounts
-
AD DC DNS
- BIND9_DLZ
- Username map
-
Shares
- Options
- Default shares
- Guest shares
- Usershares
- DOS-Attributes
- Control filesystem permissions
- Templating
- VFS modules
-
FSMO
- Flexible Single Master Operations roles
- Distributed File System (DFS)
-
GUIs
- gadmin-samba
- SWAT
- netdomjoin-gui
-
Local Master Browser
- Samba OS Levels
- Configure election
-
Domain Master Browser
- Host announcement and its timeout
- MSBROWSE — Browsing other workgroups
-
WINS
- WINS Client
- WINS Server
- WINS Proxy
- Name Resolve Order
- Print Server
-
Registry configuration
- Shares from registry
- Configuration only from registry
- Configuration from file and registry
- RODC
- DHCP server
-
Tools Samba3
- smbstatus
- smbclient
- smbcontrol
-
net
- net ads
- net groupmap
- net getlocalsid
- net setlocalsid
- net conf
- net dom
-
net registry
- net rpc
- net sam
- net usershare
- smbldap-tools
-
smbpasswd
- Add user account
- Add machine account
- Set ldap password
- Other actions
-
pdbedit
- Actions on backends
-
NetBIOS
- nmblookup
- nbtstat in Windows
- smbtorture
- tdbbackup
- tdbdump
-
mount.cifs
- Mount as guest
- Trouble Shooting
- wbinfo
- testparm
-
Tools Samba 4
-
Common Samba4 management utilities
- RSAT
- samba_dnsupdate
- samba_downgrade_db
- samba-gpupdate
- samba_kcc
- samba-regedit
- samba_spnupdate
-
samba-tool
- samba-tool kerberos
- samba-tool dns
- samba-tool domain demote
- samba-tool domain info
- samba-tool domain join
- samba-tool domain provision
- samba-tool fsmo
- samba-tool gpo
- samba-tool group
- samba-tool ntacl
- samba-tool rodc
- samba-tool user
- samba_upgradedns
-
Common Samba4 management utilities
- ctdb
-
About
- Install
- Debian locations
-
Tools
- ctdb
- tdbtool
- Clustered Samba
-
About
-
Kerberos
-
About
- Pros
- Cons
- Notes
- DNS SRV records for Kerberos
- Configuration
- Univention Domain Join
-
About
- Acronyms
About
Samba is the standard Windows interoperability suite of programs for Linux and Unix.
Samba is Free Software licensed under the GNU General Public License, the Samba project is a member of the Software Freedom Conservancy.
Since 1992, Samba has provided secure, stable and fast file and print services for all clients using the SMB/CIFS protocol, such as all versions of DOS and Windows, OS/2, Linux and many others.
Samba is an important component to seamlessly integrate Linux/Unix Servers and Desktops into Active Directory environments. It can function both as a domain controller or as a regular domain member.
— Citation from the Samba homepage.
I tried to provide a little list for all the fancy #Acronyms.
The name was filtered from a dictonary.
1 grep '^s.*m.*b.*' /usr/share/dict/american-english\ 2 |grep -v -e 'ed$' -e 'ing$' -e 'ly$' -e 's$' \ 3 |head -n1
Links
-
Samba Homepage
-
SambaXP — The International User and Developer Conference
-
Samba+ — Samba for Enterprise Linux and more
-
Samba Git-Repository
-
Samba Wiki
-
Samba Mailing Lists
-
Samba Mailing Lists
-
Samba Bugtracker
-
Setting up Samba as an Active Directory Domain Controller
-
LPIC-300 Objectives V3.0
-
docs.microsoft.com — Glossary
Why Samba
- Free libre open-source software (GNU GPL)
- No Microsoft licenses for the windows operating system and for client access (CALs) to the machine necessary
- Simple and flexible
- Many compatibility options
- e.g. 2 Samba-Versions on the same machine
- CLI administration
- Configuration in a file (easy backup/restore/migration)
- Every client has its own process
- Stability (only one process dies)
- Scales well on multi-core systems
- Good hardware abstraction with linux or unix
- log-files better to read than event-log
Alternatives
- Bare LDAP
- FreeIPA
- Univention Corporate Server (essentially Samba in a appliance)
- Freedombox for small deployments
Releases
-
Samba Wiki — Samba Release Planning
-
Samba Wiki — Samba Security Process
The regular Samba release cycle intends a new release series
- six months fully supported,
- another six months in the maintenance mode,
- six months in the security fixes only mode.
In total, each series is maintained for a period of approximately 18 months.
So there are three minor releases in active maintenance by the Samba Team:
- x.y+1 — next upcoming release series
-
x.y — current stable release
-
x.y-1 — maintenance mode — fixing security and severe bugs
-
x.y-2 — security fixes only
- x.y-3 — Discontinued (EOL)
Security fixes may also be back-ported by the distributions to their frozen versions.
You better stick with the pace.
Your old OpenWRT router is probably out of bug-fixes.
Samba versions and features
Samba is changing rapidly with huge differences between versions. It’s important to know, which features are necessary to select a version to install minimally to carry your setup.
Too keep track you may read
-
Samba Homepage — Release Announcements
-
Samba Homepage — Samba Security Releases
-
Samba Wiki — Category:Release Notes
3.5
- Experimental SMB2.0 support
3.6
- Full SMB2.1 support
4.0
- AD DC support
- Ships with built-in
- LDAP server
- Kerberos KDC (can generate PAC)
- Introduction of the
-
supervisor process samba
-
cli-management tool samba-tool
-
- Introduction of 2 DNS-solutions
- Built-in DNS
- BIND9-plugin (with DLZ)
4.2
- SMB3 support
4.3
- SMB3.1.1 support
4.7
- MIT-Kerberos support
- The dynamic port range for RPC services has been changed from the old default value «1024-1300» to «49152-65535».
- Self-signed certs with SHA256
4.8
- Domain member setups require winbindd
- No simple downgrade (GUID index)
- Time Machine Support with vfs_fruit
- Support for RODC setups
4.10
- MIT-Kerberos support disabled (at compile time)
- Python 3 support
4.11
- SMB1 is disabled by default
- Default schema updated to 2012_R2
4.13
- Samba 4.13 deprecates Samba’s original domain controller mode.
Please also take a look at the protocol support at SMB versions
3 Daemons and a supervisor
-
nmbd — NetBIOS name server to provide NetBIOS over IP naming services to clients
-
smbd — server to provide SMB/CIFS services to clients
-
winbindd
- Name Service Switch daemon for resolving names from NT servers
- Idmapping Unix — Samba
-
samba
1 systemctl status nmbd.service 2 systemctl status smbd.service 3 systemctl status winbind.service 4 systemctl status samba-ad-dc.service
Requirements
- At least 2 domain controllers
- Improvement of maintenance and availability
- Resources:
- CPU: 4
- RAM: 8GiB
- Storage: 20GiB
- Separated file servers
- Resources:
- CPU: 4
- RAM: 8GiB
- Storage: according to your demands,
but > 128GiB makes sense …
- Resources:
- Knowlegde about corporate structure to map the company on the LDAP directory.
Ports
Protocol |
Port |
Purpose |
Daemon |
icmp |
only required by Windows XP and Windows Server 2003 |
||
tcp |
53 |
DNS |
|
udp |
53 |
DNS |
|
udp |
67 |
DHCP-Server |
|
udp |
68 |
DHCP-Client |
|
tcp |
88 |
Kerberos |
|
udp |
88 |
Kerberos |
|
tcp |
135 |
RPC, WMI |
|
udp |
137 |
MS Cluster Administrator |
|
udp |
137 |
NetBIOS Name Resolution |
|
tcp |
137 |
RPC/named pipes (NP) |
|
udp |
138 |
NetBIOS Datagram Service |
|
udp |
138 |
RPC/named pipes (NP) |
|
tcp |
139 |
NetBIOS Session Service |
smbd |
tcp |
139 |
RPC/named pipes (NP) |
smbd |
tcp |
389 |
ldap |
|
udp |
389 |
ldap |
|
tcp |
445 |
File and printer shares via SMB |
smbd |
tcp |
464 |
Kerberos Password V5 |
|
udp |
464 |
Kerberos Password V5 |
|
tcp |
593 |
RPC over HTTPS |
|
tcp |
636 |
ldaps |
|
tcp |
3268 |
MS Global Catalog ###TO_PROOF |
|
tcp |
3269 |
MS Global Catalog over TLS ###TO_PROOF |
|
tcp |
3343 |
Cluster Service (necessary for node join) |
|
udp |
3343 |
with DTLS Cluster Service |
|
tcp |
3389 |
RDP |
|
tcp |
5722 |
RPC for DFS Replication |
|
tcp |
6600 |
Hyper-V Live Migration |
|
tcp |
9389 |
Active Directory Web Services (ADWS) |
|
tcp |
9389 |
Active Directory Management Gateway Service |
|
tcp |
1024 — 5000 |
RPC randomly allocated high TCP ports on |
|
tcp |
1024 — 65535 |
RPC randomly allocated high TCP ports for CertSRV, ClusSvc, DFS on |
|
tcp |
49152 — 65535 |
RPC randomly allocated high TCP ports on |
See also:
-
Microsoft Docs — Service overview and network port requirements for Windows
-
Microsoft Docs — How to configure a firewall for Active Directory domains and trusts
-
Samba Domain Member Port Usage
SRV records
Always check SRV records on each domain controller
1 $ORIGIN rockstable.it. 2 _ldap._tcp SRV 0 100 389 dc1 3 _ldap._tcp SRV 0 100 389 dc2 4 5 _kerberos._tcp SRV 0 100 88 dc1 6 _kerberos._tcp SRV 0 100 88 dc2 7 _kerberos._udp SRV 0 100 88 dc1 8 _kerberos._udp SRV 0 100 88 dc2 9 10 _gc._tcp SRV 3268 dc1 11 _gc._tcp SRV 3268 dc2
Definitions
-
docs.microsoft.com — Understanding the Active Directory Logical Model
-
docs.microsoft.com — Glossary
-
docs.microsoft.com — [MS-ADTS]: Active Directory Technical Specification
Active Directory forest
German: Gesamtstruktur
A forest is a collection of one or more Active Directory domains that share a common logical structure, directory schema (class and attribute definitions), directory configuration (site and replication information), and global catalog (forest-wide search capabilities). Domains in the same forest are automatically linked with two-way, transitive trust relationships.
Active Directory domain
A domain is a partition in an Active Directory forest. Partitioning data enables organizations to replicate data only to where it is needed. In this way, the directory can scale globally over a network that has limited available bandwidth. In addition, the domain supports a number of other core functions related to administration, including:
-
Network-wide user identity. Domains allow user identities to be created once and referenced on any computer joined to the forest in which the domain is located. Domain controllers that make up a domain are used to store user accounts and user credentials (such as passwords or certificates) securely.
-
Authentication. Domain controllers provide authentication services for users and supply additional authorization data such as user group memberships, which can be used to control access to resources on the network.
-
Trust relationships. Domains can extend authentication services to users in domains outside their own forest by means of trusts.
-
Replication. The domain defines a partition of the directory that contains sufficient data to provide domain services and then replicates it between the domain controllers. In this way, all domain controllers are peers in a domain and are managed as a unit.
Active Directory organizational units
OUs can be used to form a hierarchy of containers within a domain. OUs are used to group objects for administrative purposes such as the application of Group Policy or delegation of authority. Control (over an OU and the objects within it) is determined by the access control lists (ACLs) on the OU and on the objects in the OU. To facilitate the management of large numbers of objects, AD DS supports the concept of delegation of authority. By means of delegation, owners can transfer full or limited administrative control over objects to other users or groups. Delegation is important because it helps to distribute the management of large numbers of objects across a number of people who are trusted to perform management tasks.
Active Directory global catalog
A unified partial view of multiple naming contexts (NCs) in a distributed partitioned directory. The Active Directory directory service GC is implemented by GC servers. The definition of global catalog is specified in [MS-ADTS] section 3.1.1.1.8.
In AD DS, the global catalog (GC) is a partial view of a forest’s NCs, with these properties:
- The GC view includes all domain NCs, the config NC, and the schema NC.
- The GC view is partial. It includes all objects in the included NCs, but only those attributes defined as members of the partial attribute set in the schema NC (as specified in section 3.1.1.2). If the GC is an RODC, the attribute list is further restricted to those attributes not present in the filtered attribute set in the schema NC (as specified in section 3.1.1.2).
- The GC view is read-only.
The GC has no state model impact outside the schema NC, which defines the forest’s partial attribute set. The implementation of the GC (that is, actually providing the specified view to LDAP clients) does have impact, explained in section 3.1.1.1.9.
In AD LDS there is no support for the GC.
NOTES
- In opposite to the Microsoft implementation the Samba ‘Administrator’ password expires, too. This behavour may be changed with.
1 #Disable password expiration for the Administrator account. 2 samba-tool user setexpiry Administrator --noexpiry
-
ntpd >= 4.2.6 to support signing, which is required by Active Directory
- In Samba every DC is global catalog
- With Samba4 data should not be saved on a AD DC, since they use their own ID-mapping. Dedicated fileservers should be used to provide data instead.
- Always document your GPOs.
Installation
Server
NT4
Bare Samba
1 apt install \ 2 samba smbclient \ 3 acl attr
Samba with #ctdb
1 apt install \ 2 samba smbclient \ 3 acl attr \ 4 winbind libnss-winbind libpam-winbind \ 5 ctdb
Samba with ldap
1 apt install \ 2 samba smbclient \ 3 acl attr \ 4 winbind libnss-winbind libpam-winbind \ 5 libnss-ldap smbldap-tools
AD DC
Integrated DNS
1 apt install \ 2 samba smbclient \ 3 acl attr \ 4 winbind libnss-winbind libpam-winbind \ 5 ldb-tools \ 6 heimdal-clients libpam-heimdal \ 7 ntp \ 8
With Bind9 DLZ
1 apt install \ 2 samba smbclient \ 3 acl attr \ 4 winbind libnss-winbind libpam-winbind \ 5 ldb-tools \ 6 heimdal-clients libpam-heimdal \ 7 bind9 bind9utils dnsutils \ 8 ntp
Due to collision with ntp, systemd-timesyncd will be removed.
AD fileserver
Install a AD fileserver
1 apt install \ 2 samba smbclient \ 3 acl attr \ 4 winbind libnss-winbind libpam-winbind \ 5 ldb-tools \ 6 heimdal-clients libpam-heimdal \ 7 ntp
Due to collision with ntp, systemd-timesyncd will be removed.
Client
# TODO
Configure
Test and show configuration and their defaults
Of cause all defaults are documented in
man 5 smb.conf
But there is a more comfortable way to find out bulks of defaults.
Please see #testparm
Logging
Defaults compiled in (Debian)
1 [global] 2 ### DEFAULT 3 #logging = 4 #log file = 5 #log level = 1 6 ### FILE SIZE IN KILOBYTE 7 #max log size = 5000 8 #syslog = 1 9 #syslog only = No
Default configuration (Debian)
1 ### DEFAULT DEBIAN 2 log level = 1 3 logging = file 4 ### LOG FILE BY NETBIOS NAME 5 log file = /var/log/samba/log.%m 6 ### FILE SIZE IN KILOBYTE 7 max log size = 1000 8 syslog = 1 9 syslog only = No
The logfile may not work, when using SMB over tcp/445.
The log level is even more flexible. For more information please see
man -P «less -p ‘log level \(G\)'» 5 smb.conf
1 ### DEFAULT DEBIAN 2 log level = 1 winbind:3@/var/log/samba/winbind.log 3 ### LOG FILE BY IP 4 log file = /var/log/samba/log.%I
A high log level may impact system performance.
You may change the log level of a running smbd instance with #smbcontrol
Flexiblity
macros
The Samba configuration can be very dynamic. There are several macros which may be used, to achieve e.g. interface-IP- %i, client-IP- %I or protocol-version-specific %R configurations. Even environment variables (dereferenced to their value) may be used as a macro %$(envvar).
man -P «less -p ‘^VARIABLE SUBSTITUTIONS'» 5 smb.conf
Be careful: Netbios macros are not resolved, when using SMB over tcp/445 %m, %L.
Include
Other files may be included into smb.conf.
Macros may be combined with the include statement.
1 install -d /etc/samba/conf.d 2 cat <<EOF > /etc/samba/conf.d/ldap.conf 3 ldap … = … 4 EOF
1 [global] 2 include = /etc/samba/conf.d/ldap.conf
Dedicated resources
Some resources cannot not be shared between two samba instance:
interfaces, lock directory, netbios name, pid directory, workgroup
Some resources may/should not be shared between two samba instance:
passdb backend, log file
Interfaces
Bind only to specified interfaces
1 [global] 2 interfaces = eth0 3 bind interfaces only = yes
Ports
Prohibit NetBIOS on tcp/445 and disable SMB over NetBIOS over tcp/139
1 [global] 2 ### DISABLE NETBIOS ON TCP/445 3 netbios ports = 139 4 ### DISABLE SMB ON TCP/139 5 ### DEFAULT: 139, 445 6 smb ports = 445
NetBIOS Macros like %L are not resolved with SMB over tcp/445.
Server aliases
Consolidate multiple servers to a single node
1 [global] 2 netbios name = sambasrv 3 netios aliases = win-old1 win-old2
Security
Security modes
-
share level «tree connect»
- every authenticated user can read the share
- not recommended
- removed with Samba 4.0
-
server
- Samba 2.0 option, still supported in Samba 3.0
- high load
- problematic
- removed with Samba 4.0
-
user level -> «session setup»
- Permissions based on user name
-
domain
- like user but auth backend is domain logon server
-
adc methods may be disabled with
winbind rpc only = yes
-
adc
- auth backend is domain logon server with kerberos
-
system clocks must be in sync (tΔ < 5min)
- DNS-Server required (NetBIOS and DNS-Name must be identical)
-
realm and domain are defined in smb.conf
1 [global] 2 security = <MODE>
Backends
Please also see #Actions on backends
Backend smbpasswd
- deprecated
- plaintext
-
/etc/samba/smbpasswd
- 6 columns
username
Unix UID
LANMGR-hash
NT-hash
account flag
mtime
- most simple
- no additional attributes (like HOME directory, …)
/etc/samba/smb.conf
1 [global] 2 passdb backend = smbpasswd 3 passdb backend = smbpasswd
Backend tdbsam
- trivial database Security Accounts Manager (SAM)
-
Default and recommended for normal usage
- binary
- offers concurrency and locking
-
path in private dir name passdb.tdb
- long cache times, not always in sync with disk
-
backup at runtime with #tdbbackup
- Do backups!
See also #ctdb
/etc/samba/smb.conf
1 [global] 2 passdb backend = tdbsam 3 private dir = /var/lib/samba/private 4 #passdb backend = tdbsam:/var/lib/samba/private/passdb.tdb
Backend ldapsam
- bigger networks
- replication backbone of PDCs and BDCs
- tools to modify ldap and unix databases necessary
like smbldap-tools
1 #add machine script = /usr/sbin/useradd -d /dev/null -s /bin/false '%u' 2 add machine script = /usr/sbin/smbldap-useradd -w '%u'
/etc/samba/smb.conf
1 [global] 2 ### DEFAULT: localhost 3 passdb backend = ldapsam 4 #passdb backend = ldapsam:"ldap://ldap1.example.com ldap://ldap2.example.com ldap://ldap3.example.com" 5 #passdb backend = ldapsam:"ldaps://ldap1.example.com ldaps://ldap2.example.com ldaps://ldap3.example.com" 6 ### PLEASE DON'T USE ROOTDN 7 ldap admin dn = cn=samba,dc=rockstable,dc=it 8 ldap suffix = dc=rockstable,dc=it 9 ldap user suffix = ou=users 10 ldap group suffix = ou=groups 11 ldap machine suffix = ou=computers 12 ldap idmap suffix = ou=idmaps 13 ### SECURE BACKEND LDAP CONNECTION OF RPC CALLS (MIND THE SPACE) 14 ldap ssl = start tls 15 ### SECURE BACKEND LDAP CONNECTION OF ADC CALLS (MIND THE SPACE) 16 ldap ssl adc = start tls
ldap ssl should be set explicitly, because the defaults may vary, and depend on the configuration at compile time.
It is subsequently necessary to #Set ldap password
When local system is attached to ldap via NSS and the information in ldap is sufficient to qualify the system. Local NSS may be bypassed and samba built-in optimized ldap-queries used instead to read information stored in the ldap-tree (users, groups, …) directly. During the bootstrapping of the ldap-tree, NSS is configured after preparing the ldap-tree for/by/with samba, of cause.
1 ### DEFAULT 2 ldapsam:trusted = no 3 ### SPEED UP UID/GID LOOKUPS 4 ldapsam:trusted = yes
Please see
man -P «less -p ‘^\s*ldapsam:trusted \(G\)'» 5 smb.conf
The write path may also be optimized using direct write access to the ldap-tree (without using scripts). In this scenario windbindd allocates uids/gids and has therefor to be installed on the Samba-DC. Furthermore the id ranges have to be defined for windbind.
1 ### ENABLE OPTIMIZED MODIFICATION OF LDAP 2 ldapsam:editposix = yes 3 ### ALSO DELETE DN NOT ONLY SAMBA ATTRIBUTES 4 ldap delete dn = yes 5 ### WINBIND RANGES 6 idmap uid = 10000-19999 7 idmap gid = 10000-19999
Please make sure samba has sufficient access to the ldap-tree.
Now the ldap-tree needs to be structured as defined in smb.conf. This may be achieved using a hand crafted ldif-file or a script from the smbldap-tools called smbldap-populate, which is quite flexible.
Futhermore some essential accounts need to be created, which can be achieved with
For NSS name resolution over ldap a package has to be installed.
1 apt install libnss-ldap
/etc/nsswitch.conf
1 # /etc/nsswitch.conf 2 # 3 # Example configuration of GNU Name Service Switch functionality. 4 # If you have the `glibc-doc-reference' and `info' packages installed, try: 5 # `info libc "Name Service Switch"' for information about this file. 6 7 passwd: compat systemd ldap 8 group: compat systemd ldap 9 shadow: compat 10 gshadow: files 11 12 hosts: files mdns4_minimal [NOTFOUND=return] dns myhostname mymachines 13 networks: files 14 15 protocols: db files 16 services: db files 17 ethers: db files 18 rpc: db files 19 20 netgroup: nis
During the test you may stop then name service caching daemon (nscd), to always get fresh (but much more expensive) results.
Accounts
NT4 Accounts
Before adding the samba account make sure a corresponding Unix account (for its UID-number) exists.
The Unix user does not need to have a existing home directory. The home may even be /dev/null
User with UID 0 on DC is domain admin, when created in Samba.
The Unix and the Samba password do not need to match.
AD DC accounts
Samba user no longer need a Unix account to be created before. The Samba ID-mapping is sufficient.
AD DC DNS
BIND9_DLZ
Bind9 has a richer feature set, than the internal DNS-service. For example it allows load-balancing using round robin, which is not supported with SAMBA_INTERNAL.
Adjust forwarders and Kerberos keytab in Bind9 configuration.
/etc/bind9/named.conf.options
1 forwarders { 2 192.168.1.1; 3 } 4 tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab";
Include the configuration generated by Samba in Bind9
/etc/bind9/named.conf.options
1 include "/var/lib/samba/bind-dns/named.conf"
Bind9 must be able to read both files (via group permissions)
1 ls -l \ 2 "/var/lib/samba/private/dns.keytab" \ 3 "/var/lib/samba/bind-dns/named.conf"
Make sure SELinux or Apparmor do not interfere.
Username map
Map Samba users to unix accounts
Acts differently in different security modes.
Therefor read the docs
man -P «less -p ‘^\s*username map \(G\)'» 5 smb.conf
/etc/samba/smb.conf
1 [global] 2 username map = /etc/samba/username.map
/etc/samba/username.map
1 ### UNIX = SAMBA 2 root = admin administrator 3 nobody = guest smbguest pcguest
Shares
Options
Are suffixed with (S) in man 5 smb.conf
Unix groups are prefixed by @
Example
1 valid users = tobias, @samba 2 write list = tobias, @adm
Default shares
There are some default share definitions in
/etc/samba/smb.conf
homes
Unix home directory exported for a user.
The default value of the path to the home directory
1 #template homedir = /home/%D/%U 2 template homedir = /srv/samba/%D/home/%U
The directory for the domain should already be created for Samba4 to be able to create user home directories.
Home directories
1 #======================= Share Definitions ======================= 2 3 [homes] 4 comment = Home Directories 5 browseable = no 6 7 # By default, the home directories are exported read-only. Change the 8 # next parameter to 'no' if you want to be able to write to them. 9 read only = no 10 11 # File creation mask is set to 0700 for security reasons. If you want to 12 # create files with group=rw permissions, set next parameter to 0775. 13 create mask = 0700 14 15 # Directory creation mask is set to 0700 for security reasons. If you want to 16 # create dirs. with group=rw permissions, set next parameter to 0775. 17 directory mask = 0700 18 19 # By default, \\server\username shares can be connected to by anyone 20 # with access to the samba server. 21 # The following parameter makes sure that only "username" can connect 22 # to \\server\username 23 # This might need tweaking when using external authentication schemes 24 valid users = %S
netlogon
The logon scripts of a domain controller are stored here.
1 # Un-comment the following and create the netlogon directory for Domain Logons 2 # (you need to configure Samba to act as a domain controller too.) 3 ;[netlogon] 4 ; comment = Network Logon Service 5 ; path = /home/samba/netlogon 6 ; guest ok = yes 7 ; read only = yes
profiles
Store roaming profile, which is downloaded on logon and uploaded on logout. This feature requires a fast network and sufficient disk-IO especially in the peak time.
1 # Un-comment the following and create the profiles directory to store 2 # users profiles (see the "logon path" option above) 3 # (you need to configure Samba to act as a domain controller too.) 4 # The path below should be writable by all users so that their 5 # profile directory may be created the first time they log on 6 ;[profiles] 7 ; comment = Users profiles 8 ; path = /home/samba/profiles 9 ; guest ok = no 10 ; browseable = no 11 ; create mask = 0600 12 ; directory mask = 0700
printers
Manage printers
1 [printers] 2 comment = All Printers 3 browseable = no 4 path = /var/spool/samba 5 printable = yes 6 guest ok = no 7 read only = yes 8 create mask = 0700
Manage printer drivers
1 # Windows clients look for this share name as a source of downloadable 2 # printer drivers 3 [print$] 4 comment = Printer Drivers 5 path = /var/lib/samba/printers 6 browseable = yes 7 read only = yes 8 guest ok = no 9 # Uncomment to allow remote administration of Windows print drivers. 10 # You may need to replace 'lpadmin' with the name of the group your 11 # admin users are members of. 12 # Please note that you also need to set appropriate Unix permissions 13 # to the drivers directory for these users to have write rights in it 14 ; write list = root, @lpadmin
sysvol
# WIP
Store group policy objects (GPOs).
1 [sysvol] 2 comment = Store GPOs 3 path = /var/lib/samba/sysvol 4 browseable = no 5 ### ON REPLICATION TARGETS 6 #read only = yes 7 guest ok = no
The content of the share sysvol must be the same on all DCs, but the synchronization is not managed by Samba. It does not need to be stricly synchronized, it’s sufficient to use rsync or another custom script based approach. (Please don’t use a unencrypted rsync daemon module over tcp consider the rsync features of utilizing a remote shell like ssh.) But you may have to designate a primary server, who acts as a replication source. A good choice could be the server with the #FSMO-role «PDCEmulationMaster». This server must then always be used to change GPOs. RSAT can be pointed specifically to this primary server.
- Open RSAT Group Policy Management
- Right click on domain
- Change domain controller
- Chose «Domain-Controller with the token for PDC-Emulation»
The replication may than be triggered by
- a cron-job
- a systemd-timer or
- inotify
Another possibility is to use a distributed filesystem like GlusterFS to share the directory.
Guest shares
May also be combined with
#Username map
Do not combine valid users = with guest ok = yes or guest won’t be able to connect.
/etc/samba/smb.conf
1 [global] 2 security = user 3 ### DEFAULT GUEST ACCOUNT 4 guest account = nobody 5 ### MAP USERS, THAT ARE NOT MAPPABLE TO A UNIX ACCOUNT, 6 ### E.G. THEY DON'T EXIST, TO THE GUEST ACCOUNT 7 map to guest = Bad User 8 9 ### PUBLIC READ-ONLY SHARE 10 [DVD-ROM] 11 comment = DVD-Drive 12 path = /media/sr0 13 guest ok = yes 14 15 ### PUBLIC WRITEABLE SHARE 16 ### UNIX PERMISSIONS CONTROL WRITING 17 [tmp] 18 comment = Insecure temporary share. 19 path = /mnt/sda2/tmp 20 read only = no 21 guest ok = yes 22 create mask = 664 23 directory mask = 775 24 browseable = yes
For the mount please see
#Mount as guest
Usershares
man -P «less -p ‘^USERSHARES'» 5 smb.conf
Starting with Samba version 3.0.23 the capability for non-root users to add, modify, and delete their own share definitions has been added. This capability is called usershares and is controlled by a set of parameters in the [global] section of the smb.conf.
Usershare options with their defaults on Debian 10.
1 [global] 2 usershare allow guests = Yes 3 usershare max shares = 100 4 usershare owner only = Yes 5 usershare path = /var/lib/samba/usershares 6 usershare prefix allow list = 7 usershare prefix deny list = 8 usershare template share =
Authorization to the creation of usershares is managed by filesystem permissions to /var/lib/samba/usershares.
The group and the directory usually exist, because the installation takes care of it. But in case it doesn’t, this is how to create it.
1 addgroup sambashare 2 install -o root -g sambashare -m 4770 \ 3 -d /var/lib/samba/usershares
The directory usershares is sticky and can only be written to by root and the group sambashare.
ls -ld /var/lib/samba/usershares
1 drwxrwx--T 1 root sambashare 0 12. Nov 2017 /var/lib/samba/usershares
So the group sambashare controls access to the managemant of user shares and should not be reused to grant access to other branches on the filesystem-tree. Just create a separate group for this purpose.
Add a user to the group sambashare
1 adduser "$USERNAME" sambashare
Now shares can be managed by a user.
If you are using KDE Plasma, make sure some packages are installed
1 aptitude install samba kdenetwork kdenetwork-filesharing
A directory can now be shared via filesystem browser (like dolphin or konqueror). Just navigate to the directory, open the properties and chose the tab «share».
Or just use the cli with #net usershare.
DOS-Attributes
DOS-Attributes are
- SYSTEM
- HIDDEN
- ARCHIVE
- READ-ONLY
DOS attributes are mapped to UNIX-Attributes prior to evaluating Unix-permissions. When store dos attributes is set to true the mappings to Unix-permissions are simply ignored. Please see
man -P «less -p ‘store dos attributes \(S\)'» 5 smb.conf
Defaults
1 [share] 2 store dos attributes = yes # Store DOS flags in extended attributes (EA) 3 map archive = yes # UNIX owner execute bit 4 map hidden = no # UNIX world execute bit 5 map system = no # UNIX group execute bit 6 map readonly = no # inverse of the user or owner write bit
On Linux the filesystem must have been mounted with the mount option user_xattr in order for extended attributes to work, also extended attributes must be compiled into the Linux kernel.
Control filesystem permissions
In somewhat simpler setups utilizing the SET-UID/GID-BIT may be sufficient.
Samba has some nice filesystem permission semantics, that help in controlling access to the share.
1 [operations] 2 path = /srv/samba/operations 3 ### ANONYMIZE WRITING USER OR 4 ### MANAGE VIA USER PERMISSIONS 5 #force user = operator 6 ### ENFORCE ENTITY TO BE OWNED BY GROUP 7 force group = operations 8 ### LIMIT ACCESS TO GROUPS AND SINGLE USERS 9 valid users = @operations, @management, ceo, cto 10 ### ONLY MEMBERS OF GROUP OPERATIONS MAY WRITE 11 write list = @operations 12 ### SET FILE CREATE MASK 13 ### (BIT-WISE "AND"ED WITH REQUEST) 14 ### DEFAULT: 0744 15 create mask = 0740 16 ### FORCE FILE PERMISSION 17 ### (BIT-WISE "OR"ED WITH REQUEST) 18 ### DEFAULT: 0000 19 force create mode = 0020 20 ### SET DIR CREATE MASK 21 ### (BIT-WISE "AND"ED WITH REQUEST) 22 ### DEFAULT: 0755 23 directory mask = 0770 24 ### FORCE DIR PERMISSION 25 ### (BIT-WISE "OR"ED WITH REQUEST) 26 ### DEFAULT: 0000 27 force directory mode = 0020
It’s also possible to use POSIX-ACLs within the filesystem achieve even more flexible permissions. But this raises the bar quite a bit, because this requires kernel support, mount-options, vfs objects and a adapted backup strategy, which secures the additional info.
Templating
The share [operations] from #Control filesytem permissions has become quite complex. It could be a challage to manage a higher number of these shares.
Luckily other shares can be used as templates. Only specifically mentioned directives are overridden everything else is copied.
1 [development] 2 copy = operations 3 path = /srv/samba/development 4 force group = development 5 valid users = @development, @management, ceo, cto 6 write list = @development
VFS modules
man -P «less -p ‘vfs objects \(S\)'» 5 smb.conf
- vfs objects (S)
- This parameter specifies the backend names which are used for Samba VFS I/O operations. By default, normal disk I/O operations are used but these can be overloaded with one or more VFS objects. Be aware that the definition of this parameter will overwrite a possible previous definition of the vfs objects parameter.
This modules are stackable.
This modules are installed with packge samba-vfs-modules as a recommendation by package samba. The VFS modules are stored in
/usr/lib/x86_64-linux-gnu/samba/vfs
VFS modules of Samba 4.13.3-Debian
-
vfs_acl_tdb — Save NTFS-ACLs in a tdb file
-
vfs_acl_xattr — Save NTFS-ACLs in Extended Attributes (EAs)
-
vfs_aio_fork — implement async I/O in Samba vfs
-
vfs_aio_pthread — implement async open in Samba vfs using a pthread pool
-
vfs_audit — record selected Samba VFS operations in the system log
-
vfs_btrfs — Utilize features provided by the Btrfs filesystem
-
vfs_cap — CAP encode filenames
-
vfs_catia — translate illegal characters in Catia filenames
-
vfs_ceph — Utilize features provided by CephFS
-
vfs_ceph_snapshots — Expose CephFS snapshots as shadow-copies
-
vfs_commit — flush dirty data at specified intervals
-
vfs_crossrename — server side rename files across filesystem boundaries
-
vfs_default_quota — store default quota records for Windows clients
-
vfs_dirsort — Sort directory contents
-
vfs_extd_audit — record selected Samba VFS operations
-
vfs_fake_perms — enable read only Roaming Profiles
-
vfs_fileid — Generates file_id structs with unique device id values for cluster setups
-
vfs_fruit — Enhanced OS X and Netatalk interoperability
-
vfs_full_audit — record Samba VFS operations in the system log
-
vfs_glusterfs — Utilize features provided by GlusterFS
-
vfs_glusterfs_fuse — Utilize features provided by GlusterFS
-
vfs_gpfs — gpfs specific samba extensions like acls
-
vfs_io_uring — Implement async io in Samba vfs using io_uring of Linux (>= 5.1).
-
vfs_linux_xfs_sgid — Workaround XFS sgid bit not inherited
-
vfs_media_harmony — Allow multiple Avid clients to share a network drive.
-
vfs_nfs4acl_xattr — Save NTFS-ACLs as NFS4 encoded blobs in extended attributes
-
vfs_offline — Mark all files as offline
-
vfs_preopen — Hide read latencies for applications reading numbered files
-
vfs_readahead — pre-load the kernel buffer cache
-
vfs_readonly — make a Samba share read only for a specified time period
-
vfs_recycle — Samba VFS recycle bin
-
vfs_shadow_copy — Expose snapshots to Windows clients as shadow copies.
-
vfs_shadow_copy2 — Expose snapshots to Windows clients as shadow copies.
-
vfs_shell_snap — Shell script callouts for snapshot creation and deletion
-
vfs_snapper — Expose snapshots managed by snapper as shadow-copies
-
vfs_streams_depot — EXPERIMENTAL module to store alternate data streams in a central directory.
-
vfs_streams_xattr — Store alternate data streams in posix xattrs
-
vfs_syncops — Ensure meta data operations are performed synchronously.
-
vfs_time_audit — samba vfs module to log slow VFS operations
-
vfs_unityed_media — Allow multiple Avid clients to share a network drive.
-
vfs_virusfilter — On access virus scanner
-
vfs_widelinks — make a Samba share ignore filesystem symbolic links inside a share
-
vfs_worm — disallows writes for older file
-
vfs_xattr_tdb — Save Extended Attributes (EAs) in a tdb file
Example share
1 [purchasing] 2 copy = operations 3 path = /srv/samba/purchasing 4 force group = purchasing 5 valid users = @purchasing, @management, ceo, cto 6 write list = @purchasing 7 vfs objects = btrfs recycle virusfilter 8 ### KEEP TREE HIERARCHY 9 recycle = keeptree=True 10 ### DON'T RECYCLE FILES GREATER 8GiB 11 recycle = maxsize=8589934592
FSMO
Flexible Single Master Operations roles
- SchemaMaster
- Unique in AD forest
- Should also be global catalog
-
Should be held together with DomainNamingMaster
- Definition/Authority of LDAP schema
- DomainNamingMaster
- Unique in AD forest
-
Should be held together with SchemaMaster
- Authority of assignment of domain names.
- InfrastructureMaster
- Unique in AD domain
- Manages referential integrity in a domain
- If IM-role server holds a global catalog, all DCs need a GC. If a DC does not hood a GC, IM-role must not be a GC.
- RidAllocationMaster
- Unique in AD domain
-
Should be held together with PdcEmulationMaster
- Allocates pools of IDs to the DC, to make sure IDs are unique in the domain
- PdcEmulationMaster
- Unique in AD domain
-
Should be held together with RidAllocationMaster
- Manage password-changes (t_replication_ ≤ 20min)
- DomainDnsZonesMaster
- Unique in AD domain
- Management of DNS structure of a domain
- ForstDnsZonesMaster
- Unique in AD forest
- Responsible for DNS structure of the AD forest
Distributed File System (DFS)
wiki.samba.org — Distributed File System (DFS)
1 [global] 2 host msdfs = yes 3 4 ### LIKE AN ALIAS 5 [ProxiedShare] 6 msdfs root = yes 7 msdfs proxy = \otherserver\someshare,\otherserver2\someshare 8 9 ### LIKE A LINK 10 [DFS-ROOT] 11 msdfs root = yes 12 path = /srv/samba/dfs-root
Set up the DFS root directory
1 DFS_ROOT="/srv/samba/dfs-root" 2 ### MAKE SURE TO HAVE CORRECT UNIX_PERMISSIONS 3 chown 0.0 "$DFS_ROOT" 4 chmod 664 "$DFS_ROOT" 5 cd "$DFS_ROOT" 6 ### CREATE LINKS TO THE SHARES 7 ### ALL LOWERCASE CHARACTERS 8 ln -s msdfs:server1.domain.tld\\share1 share1 9 ln -s msdfs:server2.domain.tld\\share2 share2 10 ln -s msdfs:server3.domain.tld\\share3 share3 11 ### READ-ONLY LINK WITH COMMA-SEPARATED REDUNDANT SOURCE "SERVERS\SHARES" 12 ln -s msdfs:server5.domain.tld\\share5,server6.domain.tld\\share5 share5
GUIs
gadmin-samba
The activity of this project is in question.
- website down :-/
- was not able to find the source repo
Probably you should not use this nat all anymore.
Install the graphical frontend
Be careful with this tool!
Try it elsewhere, but not in production.
If you let it overwrite your config, it will disrupt your service.
gadmin-samba will on startup and with your permission perform some changes to your configuration.
- Create users
- Unix user «smbguest»
- Samba users «root» and «smbguest»
- Create unix group «sambamachines»
- Backup your old config
-
Create a file /etc/samba/smbusers with username mappings between unix and samba
- Overwite the config with
- no comments
- Set NetBIOS name to «Samba24»
- Overwrite current workgroup with «Workgroup»
- Allow the wrong networks («127. 192.168.0»)
- Bind to interfaces that doesn’t exist 192.168.0″)
- …
When (after the inital setup) configuration options are given, that gadmin-samba does not support, they are not discarded.
It’s definitely worth a look for the configuration it performs especially for older Samba versions.
But i won’t use it, because it’s not up to date.
SWAT
Swat is no longer available with Samba 4.1.
Samba 4 mailing list — PROPOSAL: Remove SWAT in Samba 4.1
Install internet super-deamon
1 aptitude install xinetd
Add a service to
/etc/services
1 swat 901/tcp # Samba Web Administration Tool
/etc/xinetd/swat
1 ### XINETD CONFIG FOR SWAT 2 socket_type = stream 3 protocol = tcp 4 wait = no 5 user = root 6 server = /usr/sbin/swat 7 only_from = 127.0.0.1 8 disable = no
netdomjoin-gui
A gui for domain joins in the Samba source code. Located in source/lib/netapi/examples.
Local Master Browser
- Is the base of the Windows Networking (Netzwerkumgebung)
-
Is handled by nmbd
-
Writes state to /var/lib/samba/browse.dat
-
- Services have to register with a LMB.
- Should be stable (with «long» uptime)
- Is limited to a subnet.
- There is a LMB in every subnet.
- LMB ist elected
- Criteria:
- protocol version
- OS
- uptime
- name in alphabetic order
- Criteria:
- Election
- can be started by every participant
- is based on broadcasts
Samba OS Levels
OS |
Level |
Windows for Workgroups |
0 |
Windows 95/98 |
1 |
Windows NT Workstation |
16 |
Samba |
20 (default) |
Windows NT Server |
32 |
Configure election
Start on boot and win the election
1 ### SAMBA ADVERTISES ITS LEVEL 2 ### DEFAULT: 20 3 os level = 100 4 ### FORCE NMDB TO START ELECTION ON STARTUP 5 ### DEFAULT: auto 6 preferred master = yes
You may also prevent participation in LMB elections.
1 ### PARTICIPATION IN LMB ELECTIONS 2 ### DEFAULT: YES 3 # local master = no 4
Please be careful!
By default, Samba will win a local master browsing election over all Microsoft operating systems except a Windows NT 4.0/2000 Domain Controller. This means that a misconfigured Samba host can effectively isolate a subnet for browsing purposes.
— man -P «less -p ‘os level \(G\)'» 5 smb.conf
Domain Master Browser
- Synchronizes the info from LMBs and thus allows seeing nodes in other subnets in the Windows networking browser on the clients.
- Is a passive node, the LMB initiates the sync process.
- In a given subnet the roles LMB and DMB are distinguished from each other and must not reside on the same machine.
-
DMB is looked up via WINS domain<1b>. The connection to WINS is essential.
- On the LMB the info, which was
- discovered locally marked as local and relevant, because it was dicovered by broadcasts
- synchronized from DMB is marked as such and is subject to upstreaming
- This system is very sluggish and only has «antique» info.
Host announcement and its timeout
- The host announcement interval is 12min.
- If 3 host announcements are missed, the LMB considers the host dead.
Therefor dead hosts stay visible in the windows networking browser for 36min.
MSBROWSE — Browsing other workgroups
..__MSBROWSE__. <01> — <GROUP> B <ACTIVE>
The dots are ASCII 0x01 (StartOfHeading) and 0x02 (StartOfText).
Every LMB in a subnet (but of different workgroups) signals its existence to this NetBIOS group. These list is maintained by all LMBs in a subnet.
If a DMB is used and there are workgroups in the Browser, which do not exist anymore, but are still visible in Windows networking browser, then in Samba set
WINS
For the protocol please see
networking#WINS
WINS is a Highlander. There can only be one in the entire network.
WINS Client
Configure Samba server as a WINS client.
1 wins server = IP.AD.DR.ES
WINS Server
Enable WINS support in Samba
Now WINS clients may be configured to register their names with the Samba server.
On Samba the dynamically maintained database is stored persistently across reboots in /var/lib/samba/wins.dat, which is written in regular intervals.
wins.dat may be synced with
/var/lib/samba/wins.tdb is only a cache.
WINS Proxy
Enable WINS proxy in Samba
1 wins server = IP.AD.DR.ES 2 wins proxy = yes
Should only be a intermediate solution.
Name Resolve Order
1 ### DEFAULT 2 name resolve order = lmhosts host wins bcast
host means resolution with DNS
Print Server
Some defaults
1 [global] 2 printing = cups 3 printcap name = 4 addprinter command = 5 deleteprinter command = 6 lppause command = 7 lpq command = %p 8 lpresume command = 9 lprm command = 10 print command = 11 queuepause command = 12 queueresume command =
The share [$print] serves printer drivers.
1 # Windows clients look for this share name as a source of downloadable 2 # printer drivers 3 [print$] 4 comment = Printer Drivers 5 path = /var/lib/samba/printers 6 browseable = yes 7 read only = yes 8 guest ok = no 9 # Uncomment to allow remote administration of Windows print drivers. 10 # You may need to replace 'lpadmin' with the name of the group your 11 # admin users are members of. 12 # Please note that you also need to set appropriate Unix permissions 13 # to the drivers directory for these users to have write rights in it 14 ; write list = root, @lpadmin
Drivers are sorted by architecture
ls -l /var/lib/samba/printers
1 insgesamt 0 2 drwxr-xr-x 1 root root 0 9. Jun 2018 color 3 drwxr-xr-x 1 root root 0 26. Oct 2017 COLOR 4 drwxr-xr-x 1 root root 0 26. Oct 2017 IA64 5 drwxr-xr-x 1 root root 0 26. Oct 2017 W32ALPHA 6 drwxr-xr-x 1 root root 0 26. Oct 2017 W32MIPS 7 drwxr-xr-x 1 root root 0 26. Oct 2017 W32PPC 8 drwxr-xr-x 1 root root 6 9. Jun 2018 W32X86 9 drwxr-xr-x 1 root root 0 26. Oct 2017 WIN40 10 drwxr-xr-x 1 root root 6 9. Jun 2018 x64
The share [printers] provides access to the printers.
1 [printers] 2 comment = All Printers 3 browseable = no 4 path = /var/spool/samba 5 printable = yes 6 guest ok = no 7 read only = yes 8 create mask = 0700
Registry configuration
Wiki EN Windows Registry
smb.conf stays initial configuration and has precedence.
The file /var/lib/samba/registry.tdb may be spread automatically to other cluster nodes using #ctdb.
Registry may be edited using the WINREG-RPC-Service, which is provided by Samba.
Key: HKLM\Software\Samba\smbconf
Please see also
-
#net conf
-
#net registry
-
#samba-regedit
-
#tdbtool
Shares from registry
/etc/samba/smb.conf
1 [global] 2 ### STORE SHARES IN REGISTRY 3 registry shares = yes
- Shares are loaded on demand
- Reduced memory footprint
- Faster operation
-
Shares in smb.conf also provided
- On duplicate definition
smb.conf has precedence over registry
- On duplicate definition
Configuration only from registry
/etc/samba/smb.conf
1 [global] 2 ### DEFAULTS 3 #config backend = file 4 #config file = 5 ### STORE WHOLE CONFIGURATION IN REGISTRY 6 config backend = registry
- Whole configuration is stored in registry
-
registry shares = yes is implicitly set
Configuration from file and registry
/etc/samba/smb.conf
1 [global] 2 ### OVERRIDES 3 include = registry 4 ### OVERRIDDEN
- The include semantics are still active.
- Registry may override earlier definitions as well as
- Registry may be overridden by later definitions.
-
registry shares = yes is implicitly set with this option
RODC
On sites with a lower level of security (e.g. DMZ) it’s generally a better idea to use a RODC.
- No passwords are safed on a RODC.
- Users or groups, that should be able to authenticate to a RODC, have to be specified explicitly
With Samba RODC setups are possible starting with version 4.8.
-
Configure /etc/hosts
- Configure DNS on the existing DCs
- Create new DNS zones (forward/reverse)
- Create A/PTR records in the AD for the RODC
- Allow Bind9 to accept queries from other subnets
- Open firewall
- Kerberos, DNS, …
- Install the packages like on a regular DC
-
Copy /etc/krb5.conf to RODC
- Join the domain as RODC
#samba-tool domain join
-
Configure a read-only Bind9 setup on the RODC (e.g. copy configuration from another DC)
-
Configure Systemd to enable samba-ad-dc.service
RODCs are never listed in SRV records. DCs can also be identified via /var/lib/samba/private/dns_update_list.
DHCP server
There is a very good description in
Samba Wiki — Configure DHCP to update DNS records with BIND9
smbstatus
1 smbstatus --help 2 smbstatus 3 Samba version 4.13.2-Debian 4 PID Username Group Machine Protocol Version Encryption Signing 5 ----------------------------------------------------------------------------- 6 7 Service pid Machine Connected at Encryption Signing 8 ----------------------------------------------------------------------------- 9 10 No locked files
smbclient
Show list of shares
1 % smbclient -L libertas 2 Enter DUNGEON\tobias's password: 3 4 Sharename Type Comment 5 --------- ---- ------- 6 print$ Disk Printer Drivers 7 IPC$ IPC IPC Service (Samba 4.13.2-Debian) 8 tobias Disk Home Directories 9 gargantua_HP_Color_LaserJet Printer gargantua_HP_Color_LaserJet 10 gargantua_HP_Color_LaserJet@gargantua.local Printer gargantua_HP_Color_LaserJet@gargantua.local 11 PDF Printer PDF 12 SMB1 disabled -- no workgroup available
smbcontrol
Since smbd runs a process for ever client, it is possible to the change log level for a single remote host, while process is running.
1 IP=10.0.0.11 2 HNAME=hostname 3 $PID_SMBD="$(smbstatus |grep -e "$IP" -e "$HNAME" |cut -d\ -f1)" 4 smbcontrol "$PID_SMBD" debug 5
This comes in very handy.
net
net uses positional parameters. Fill missing arguments with the empty string «».
net ads
Join AD-Domain, the computer account will be created automatically.
1 net adc join -U Administrator
net groupmap
List group mappings
Add a group mapping manually
1 net groupmap add ntgroup="Devel" unixgroup=devel 2 net groupmap add ntgroup="QA" unixgroup=qa 3 net groupmap add ntgroup="Sales" unixgroup=sales 4 #… 5
Modify group mapping manually
1 net groupmap modify ntgroup="Domain Admins" unixgroup=root 2 net groupmap modify ntgroup="Domain Users" unixgroup=users 3 net groupmap modify ntgroup="Domain Guests" unixgroup=nobody 4 #… 5
net getlocalsid
Export sid of domain SAMBA
This may be used for a backup or to set the sid on a NT4 BDC.
net setlocalsid
All domain controllers need the same SID.
The SID may be set like this e.g. on a NT4 BDC.
1 net setlocalsid S-1-5-21-x-y-z
net conf
An cli API for registry operations
1 net conf 2 Usage: 3 net conf list Dump the complete configuration in smb.conf like format. 4 ### USEFUL DURING MIGRATIONS - BE CAREFUL 5 ### OVERWRITES ALL VALUES AND REMOVES MISSING FROM REGISTRY 6 net conf import Import configuration from file in smb.conf format. 7 net conf listshares List the share names. 8 ### BE CAREFUL 9 net conf drop Delete the complete configuration. 10 net conf showshare Show the definition of a share. 11 net conf addshare Create a new share. 12 net conf delshare Delete a share. 13 net conf setparm Store a parameter. 14 net conf getparm Retrieve the value of a parameter. 15 net conf delparm Delete a parameter. 16 net conf getincludes Show the includes of a share definition. 17 net conf setincludes Set includes for a share. 18 net conf delincludes Delete includes from a share definition.
Export modify and reimport registry
To simplify complex changes
1 net conf list > smb_registry.conf 2 ### MODFIFY IT WITH YOUR BELOVED EDITIOR 3 net conf import smb_registry.conf
net dom
- Sync times
- DNS must work
- DNS must resolve to fqdn
Join a remote client to domain and optionally reboot the machiine
1 read SECRET_LOCAL 2 read SECRET_DOMAIN 3 net dom join -S hostname \ 4 -U HOSTNAME\\administrator%"$SECRET_LOCAL" \ 5 domain=DOMAIN account=root password="$SECRET_DOMAIN" \ 6 reboot 7 net dom unjoin …
There is also a GUI called #netdomjoin-gui
net registry
Please see also #net conf
List registry keys
1 net registry enumerate HKLM/Software/Samba/smbconf 2 net registry enumerate HKLM/Software/Samba/smbconf/homes
net rpc
List users
List groups
Join domain, the computer account will be created automatically.
1 net rpc join -U Administrator
net rpc rights
Grant the right to show and edit the Samba configuration stored in registry to a user.
1 net rpc rights grant root SeDiskOperatorPrivilege -U root
From windows
1 net use \\samba.domain.tld /user:root 2 regedit
Special privileges
Right |
Description |
SeMachineAccountPrivilege |
Allows to create machine account and join domain |
SeTakeOwnershipPrivilege |
Allows to take ownership of objects like directories and files |
SeBackupPrivilege |
Allows to backup directories and files |
SeRestorePrivilege |
Allows to restore directories and files |
SeRemoteShutdownPrivilege |
Allows to shutdown a remote system |
SeOperatorPrivilege |
Allows to manage printers |
SeAddUsersPrivilege |
Allows to add users and groups |
SeDiskOperatorPrivilege |
Allows to manage registry and therefor shares |
net rpc trustdom
List Interdomain trust relationships
- NT4: directed (one-sided)
- ADC: symmetric, transient
List trusts
1 read -r -p "Password: " PASSWORD 2 net rpc trustdom list -U root%"$PASSWORD"
Samba as trusting domain
Add a unix account trusted$ and create «domain machine account» «TRUSTED» for the trusted domain.
1 useradd "trusted$" 2 read -r -p "Remote password: " PASSWORD1 3 read -r -p "Local password: " PASSWORD2 4 net rpc trustdom add TRUSTED "$PASSWORD1" -U "root%$PASSWORD2"
Delete domain account for trust
Remove a domain machine account (by the trusting domain)
1 net rpc trustdom del TRUSTED
Samba as trusted domain
1 net rpc trustdom establish TRUSTED
Leave domain trust
Revoke a domain trust (by the trusted domain)
1 net rpc trustdom del TRUSTED
net rpc vampire
Tool to migrate MS Windows NT4 domains to Samba.
- Prepare the Samba configuration
- BDC setup {{{#highlight ini
[global] workgroup = NT4DOMAIN domain master = no domain logons = yes }}}
- backends (ldap/tdb)
- scripts like (add user script, …)
- Stop smbd
- Join the Domain as a BDC
- Create a copy of the NT4-Domain.
1 net rpc vampire -S nt4pdc -U administrator
-
List and check result with pdbedit -L
- Prepare ID-mapping with winbind
- Check and manually correct the mappping of NT groups to unixgroups
Please see #net groupmap
- Migrate profiles and policies
-
You may use convmv, which is available in the Debian repos to change the character encoding of the filenames.
1 convmv -f cp850 -t utf8 -r /media/samba
net sam
since 3.0.23
Modify local user-database
-
Only root is allowed to use net sam.
- Samba server does not need to run.
-
winbindd must run to use group-mapping.
1 net sam show 2 ### SET ATTRIBUTES 3 net sam set 4 ### MODIFY POLICIES 5 net sam policy
net usershare
A full round
1 # net usershare add Tobias_Public /home/tobias/Öffentlich "Tobias public share" 'Everyone:r,LIBERTAS\tobias:f' guest_ok=y 2 # net usershare list 3 Tobias_Public 4 # net usershare info 5 [Tobias_Öffentlich] 6 path=/home/tobias/Öffentlich 7 comment=Tobias public share 8 usershare_acl=Everyone:R,LIBERTAS\tobias:F, 9 guest_ok=y 10 ### LIST USERSHARES OF ALL USERS 11 # net usershare info -l 12 #net usershare delete Tobias_Public 13
smbldap-tools
smbpasswd
smbpasswd also synchronizes the unix password in opposite to pdbedit, if unix password sync is set in smb.conf.
Add user account
Before adding a account make sure a corresponding unix-account does exist. Please also take look on the notes to #Accounts
- Create a unix account.
- Create the corresponding samba account.
- Enable the samba account
Add machine account
- Create a unix machine account,
which is suffixed by a $ sign.
1 useradd -d /dev/null -s /bin/false machine$
- Create the corresponding samba machine account.
The $ sign is appended automatically when using -m.
1 smbpasswd -a -m machine
- Enable the samba account
You may now join the domain.
Set ldap password
Set the password for ldap access
Domain-SID, ldap admin credentials and computer-account to join domain are stored in a file secrets.tdb in the private directory usually
/var/lib/samba/private/secrets.tdb
Other actions
Change password
Disable user
Delete user
pdbedit
Tool to modify, back-up and migrate passdb.
The extended attributes are only supported, if passdb backend is not set to smbpasswd, which only contains username ans hash. SO always check if changes are committed.
smbpasswd also synchronizes the unix password in opposite to pdbedit, if unix password sync is set in smb.conf.
Before adding a account make sure a corresponding unix-account does exist. Please also take look on the notes to #Accounts
Add user
1 pdbedit -a username -f 'Test User' -h '\\SERVER\test'
Delete user
List users
List user attributes (verbosely)
Actions on backends
Convert passdb
1 pdbedit -i smbpasswd:/etc/samba/smbpasswd \ 2 -e tdbsam:/etc/samba/passdb.tdb
Another backup method
1 pdbedit -e tdbsam:/var/backups/samba/passdb_$(date +%F).tdb
NetBIOS
For the protocol take a look at
networking#NetBIOS
nmblookup
Has a lot of options
man nmblookup
1 ### LOOKUP HOST 2 # nmblookup -v libertas 3 192.168.182.16 libertas<00> 4 ### LOOKUP HOST AND QUERY NODE STATUS 5 # nmblookup -S libertas 6 192.168.182.16 libertas<00> 7 Looking up status of 192.168.182.16 8 LIBERTAS <00> - B <ACTIVE> 9 LIBERTAS <03> - B <ACTIVE> 10 LIBERTAS <20> - B <ACTIVE> 11 DUNGEON <00> - <GROUP> B <ACTIVE> 12 DUNGEON <1e> - <GROUP> B <ACTIVE> 13 14 MAC Address = 00-00-00-00-00-00 15 ### LOOKUP IP ADDRESS AND QUERY ITS NODE STATUS 16 # nmblookup -A 192.168.182.16 17 Looking up status of 192.168.182.16 18 LIBERTAS <00> - B <ACTIVE> 19 LIBERTAS <03> - B <ACTIVE> 20 LIBERTAS <20> - B <ACTIVE> 21 ..__MSBROWSE__. <01> - <GROUP> B <ACTIVE> 22 DUNGEON <00> - <GROUP> B <ACTIVE> 23 DUNGEON <1d> - B <ACTIVE> 24 DUNGEON <1e> - <GROUP> B <ACTIVE> 25 26 MAC Address = 00-00-00-00-00-00
Query WINS server for a label
1 # nmblookup -R -U 192.168.182.1 libertas 2
nbtstat in Windows
Windows users would use nbtstat (NetBios over Tcp STATus).
1 ### SHOW NETBIOS CACHE 2 nbtstat -c 3 ### FLUSH NETBIOS CACHE 4 nbtstat -R 5 ### SHOW NETBIOS SESSIONS 6 nbtstat -s
With an empty cache you may force a query with
smbtorture
Package: samba-testsuite
Query 2 SMB-servers with random requests and compare the responses. This may be helpful in migration scenarios.
tdbbackup
Backup (creates a bak-file next to original)
1 tdbbackup /var/lib/samba/private/passdb.tdb
Backup with custom suffix
1 tdbbackup -s .$(date +%F_%T).bak \ 2 /var/lib/samba/account_policy.tdb
Verify against custom suffix
1 tdbbackup -vs .2020-12-28_18:15:28.bak \ 2 /var/lib/samba/account_policy.tdb
tdbdump
1 tdbdump /var/lib/samba/private/passdb.tdb
mount.cifs
Do not use smbfs.
It’s obsolete and is not in development anymore!!!
man 8 mount.cifs
Quick mount from shell
1 read SMBPASS 2 mount.cifs \ 3 -t cifs \ 4 -o username=username,password="$SMBPASS" \ 5 //sambasrv/share \ 6 /mnt
Mount from shell with credentials file
1 ### WITH A PASSWORD FILE 2 read SMBUSER 3 read SMBPASS 4 FILE_CRED="/etc/samba/share.cred" 5 install -m 600 /dev/null "$FILE_CRED" 6 cat <<EOF > "$CREDENTIALS" 7 username=$SMBUSER 8 password=$SMBPASS 9 EOF 10 mount.cifs \ 11 -t cifs \ 12 -o credentials="FILE_CRED" \ 13 //sambasrv/share \ 14 /mnt
Mount from shell with credentials file and some more control on the filesystem permissions on unix.
1 ### MAP UID/GID OF ALL THE FILES AND DIRECTORIES ON SHARE 2 ### TO USER/GROUP 3 mount.cifs \ 4 -t cifs \ 5 -o credentials="FILE_CRED",uid=user1,gid=sambausers,dirmode=0700,filemode=0600 \ 6 //sambasrv/share \ 7 /mnt
Mount as guest
Mount as a guest without password
1 mount.cifs --verbose \ 2 -o uid=mpd,guest,vers=2.0 \ 3 '//quasar/music' \ 4 /media/quasar/music
Trouble Shooting
It may be necessary to specify the SMB-version.
1 ### WITHOUT VERSION THE SHARE IS NOT FOUND 2 # mount.cifs -o guest,uid=113 '//quasar/music' /media/quasar 3 mount error(2): No such file or directory 4 Refer to the mount.cifs(8) manual page (e.g. man mount.cifs) 5 ### WITH VERSION YOU GET PERMISSION DENIED, ONE STEP AHEAD ;-) 6 # mount.cifs -o guest,uid=113,vers=1.0 '//quasar/music' /media/quasar 7 mount error(13): Permission denied 8 Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
/etc/fstab
1 #<file_system> <mount_point> <type> <options> <dump> <pass> 2 //sambasrv/share /mnt cifs _netdev,credentials="/etc/samba/share.cred" 0 0 3 //sambasrv/share /mnt cifs _netdev,credentials="/etc/samba/share.cred",uid=user1,gid=sambausers,dirmode=0700,filemode=0600 0 0
This may alternativly be achieved with autofs.
wbinfo
With a large number of entries in your directory, this commands can be quite demanding to your domain infrastructure.
Query winbindd the NSSwitch
1 ### TEST MACHINE CREDENTIALS 2 wbinfo -t 3 ### LIST USERS (RESOURCE INTENSIVE) 4 wbinfo -u 5 ### LIST GROUPS (RESOURCE INTENSIVE) 6 wbinfo -g 7 ### CHECK ACCESS OF USER 8 read PASSWORD 9 wbinfo -a DOMAIN\\USER%"$PASSWORD"
testparm
Check current configuration (with implict defaults -v)
Compiled in configuration (with empty smb.conf)
1 testparm -v -s /dev/null |less
Most of the Samba 3 Tools still exist and continue being useful. But Samba 4.0 indroduced a new suite of tools, that is designated to inherit the old legacy tooling.
Common Samba4 management utilities
-
#samba-tool is the primary tool for administration
-
Microsoft Remote Server Administration Tools (RSAT) for Windows
-
Ldap Account Manager (LAM)
RSAT
DNS-Manager
After creation of a new DNS-zone and if the backend is
- the Samba internal DNS-service, the Samba service has to be restarted.
- Bind9-DLZ, a restart is not necessary.
samba_dnsupdate
samba_downgrade_db
samba-gpupdate
samba_kcc
samba-regedit
ncurses frontend to the registry
samba_spnupdate
samba-tool
With Samba 4.0 the new tool samba-tool was introduced, to unify the command line interface.
samba-tool kerberos
samba-tool has Kerberos integration, which must be activated using options —kerberos=yes or short -k yes.
A ticket granting ticket has to be requested before.
samba-tool dns
Add a new DNS zone
1 samba-tool dns zonecreate -k yes \ 2 DOMAIN 1.168.192.in-addr.arpa
Create records in the DNS zone
1 samba-tool dns add -k yes \ 2 ROCKSTABLE 1.168.192.in-addr.arpa \ 3 11 PTR dc1.rockstable.it 4 samba-tool dns add -k yes \ 5 ROCKSTABLE 1.168.192.in-addr.arpa \ 6 12 PTR dc2.rockstable.it 7 8 samba-tool dns add -k yes \ 9 ROCKSTABLE rockstable.it \ 10 dc2 A 192.168.1.12
samba-tool domain demote
Prior to removing a DC from a domain all roles should have been transfered to another DC.
Then you may remove the DC from the domain
1 samba-tool domain demote -UAdministrator
When the DC is dead
1 samba-tool domain demote -UAdministrator \ 2 --remove-other-dead-server=FAILED-NODE
Such a failed and forcefully removed node must never be reattached to the domain.
samba-tool domain info
1 samba-tool domain info 192.168.1.12
samba-tool domain join
Make sure the DNS-resolver is set correctly (to the existing DC).
Join the domain as domain controller
1 samba-tool domain join \ 2 rockstable.it DC --realm=ROCKSTABLE.IT \ 3 -Uadministrator
On the joining DC a /etc/samba/smb.conf is generated, but the settings dns forwarder have to be specified manually.
The resolver of a domain controller should point to itself. Make sure the DC is listed first in /etc/resolv.conf.
Join a domain as RODC, optionally specifiy —site=SITE.
1 samba-tool domain join \ 2 rockstable.it RODC --realm=ROCKSTABLE.IT \ 3 -Uadministrator --dns-backend=BIND9_DLZ
samba-tool domain provision
- Stop all daemons
-
Make sure there is no /etc/samba/smb.conf, e.g. from the defaults or a previous attempt.
-
Determine a first site name for the option —site DC1. «Default-First-Site-Name» is not really «satisfying».
- If Unix UIDs/GIDs should be saved in AD,
specifiy with -use-rfc2307
- Provision the domain
1 samba-tool domain provision
samba-tool domain passwordsettings
Show domain password settings
1 samba-tool domain passwordsettings show
Manage Password Settings Objects (PSOs)
1 samba-tool domain passwordsettings pso list
samba-tool drs
Check Directory Replication Services (DRS) optionally specify a user to authenticate as from the group «domain admins» -Uadministrator
1 samba-tool drs showrepl
This check should be performed on every DC after a domain join.
Now trigger a knowledge consistency center run
1 samba-tool drs kcc -k yes
samba-tool fsmo
Manage Flexible Single Master Operations (FSMO).
Discover the roles in the domain
Transfer all roles
1 samba-tool fsmo transfer --role=all -k yes
Seize role from failed DC, optionally with —force
1 samba-tool fsmo seize --role=naming -k yes
A DC whose roles have been seized has to be removed from the domain. Please see #samba-tool domain demote
samba-tool gpo
Manage Group Policy Objects
1 samba-tool gpo list listall
Check if GPO is effective for user
1 USERNAME=tobias 2 samba-tool gpo list list $USERNAME
samba-tool group
List all groups
Add user to group
1 samba-tool group addmember \ 2 "Allowed RODC Password Replication Group" \ 3 user
samba-tool ntacl
1 samba-tool ntacl sysvolcheck
samba-tool rodc
If a connection to a writeable DC cannot be asured, to authenticate a user on a RODC, you may preload the password to the RODC
1 samba-tool rodc preload \ 2 user --server=dc1
samba-tool user
samba_upgradedns
ctdb
See also #Backend tdbsam
About
cluster trivial database
-
https://ctdb.samba.org/
-
CTDB and Clustered Samba
-
Upgrading a CTDB cluster
CTDB is a cluster implementation of the TDB database used by Samba and other projects to store temporary data. If an application is already using TDB for temporary data it is very easy to convert that application to be cluster aware and use CTDB instead.
CTDB provides the same types of functions as TDB but in a clustered fashion, providing a TDB-style database that spans multiple physical hosts in a cluster.
Features include:
- CTDB provides a TDB that has consistent data and consistent locking across all nodes in a cluster.
- CTDB is very fast.
- In case of node failures, CTDB will automatically recover and repair all TDB databases that it manages.
- CTDB is the core component that provides pCIFS («parallel CIFS») with Samba3/4.
- CTDB provides HA features such as node monitoring, node failover, and IP takeover.
- CTDB provides a reliable messaging transport to allow applications linked with CTDB to communicate to other instances of the application running on different nodes in the cluster.
- CTDB has pluggable transport backends. Currently implemented backends are TCP and Infiniband.
- CTDB supports a system of application specific management scripts, allowing applications that depend on network or filesystem resources to be managed in a highly available manner on a cluster.
Install
Debian locations
-
/etc/defaults/ctdb — defaults
- May not exist and be created to modify init-behaviour
-
ls -l /etc/ctdb — config
1 insgesamt 80 2 -rw-r--r-- 1 root root 555 9. Jul 11:33 ctdb.conf 3 -rwxr-xr-x 1 root root 682 9. Jul 11:33 ctdb-crash-cleanup.sh 4 -rw-r--r-- 1 root root 72 9. Jul 11:33 ctdb.tunables 5 -rwxr-xr-x 1 root root 1936 9. Jul 11:33 debug-hung-script.sh 6 -rwxr-xr-x 1 root root 3021 9. Jul 11:33 debug_locks.sh 7 drwxr-xr-x 1 root root 36 5. Jan 18:31 events 8 -rw-r--r-- 1 root root 24859 22. Nov 10:44 functions 9 drwxr-xr-x 1 root root 200 5. Jan 18:31 nfs-checks.d 10 -rwxr-xr-x 1 root root 8466 22. Nov 10:44 nfs-linux-kernel-callout 11 -rwxr-xr-x 1 root root 345 9. Jul 11:33 notify.sh 12 -rw-r--r-- 1 root root 273 9. Jul 11:33 script.options 13 -rwxr-xr-x 1 root root 8467 14. Aug 10:48 statd-callout
-
ls -l /var/lib/ctdb — home-directory
1 insgesamt 0 2 drwxr-xr-x 1 root root 0 22. Nov 10:44 persistent 3 drwxr-xr-x 1 root root 0 22. Nov 10:44 state 4 drwxr-xr-x 1 root root 0 22. Nov 10:44 volatile
-
/var/log/ctdb — logs
Tools
-
ctdb — utility to view and manage a CTDB cluster.
-
ctdb_diagnostics — dump diagnostic information about CTDB/Samba installation
-
ctdb_local_daemons — Shell script
-
tdbtool — manipulate CTDB’s local TDB files
-
onnode — run commands on CTDB cluster nodes
-
ping_pong — measures the ping-pong byte range lock latency
ctdb
swiss army knife
Backup
Create a backup
1 ctdb backupdb secrets.tdb \ 2 /var/backups/samba/secrets_$(date +%F_%T).tdb.bak
It can come in handy to also store the latest backup on the cluster file-system.
Restore procedure
1 onnode all service ctdb stop 2 onnode all 'rm /var/lib/ctdb/persistent/secrets.tdb' 3 ### TODO - DISABLE START OF SMBD/WINDBIND WITH CTDB 4 service ctdb start 5 ctdb restoredb \ 6 /var/backups/samba/secrets_$(date +%F_%T).tdb.bak 7 service ctdb start 8 ### TODO - ENABLE START OF SMBD/WINDBIND WITH CTDB 9 onnode all service ctdb start
tdbtool
Show registry keys
1 tdbtool /var/lib/samba/registry.tdb keys
Clustered Samba
/etc/samba/smb.conf
1 [global] 2 clustering = yes 3 ### SET UNIFIED NETBIOS NAME 4 netbios name = smbcluster 5 workgroup = SAMBA 6 realm = SAMBA.DOMAIN.TLD 7 security = ads 8 9 passdb backend = tdbsam 10 11 idmap backend = tdb2 12 idmap uid 10000-19999 13 idmap gid 10000-19999
or even simpler /etc/samba/smb.conf
1 [global] 2 clustering = yes 3 include = registry
Kerberos
-
IETF RFC4120 The Kerberos Network Authentication Service (V5)
-
Running a Samba AD DC with MIT Kerberos KDC
About
Pros
- One of the strongest authentication methods
- Single Sign-On
- No passwords over the network
- Symmetrical crypto (and thus Kerberos) is fast
Cons
- Additional complexity
- Password have to be stored unhashed (but encrypted with Kerberos Master-Key)
Notes
-
The Kerberos realm is written in capital letters!
- Kerberos servers are identified by querying
DNS Kerberos SRVrecords.
- When using authentication via Kerberos, the FQDN of a server must be used.
- Default Samba configuration is for a Standalone-Server.
DNS SRV records for Kerberos
Please see DNS#SRV Kerberos
Configuration
/etc/krb5.conf
Univention Domain Join
-
github.com univention/univention-domain-join
-
Univention Handbuch Ubuntu-Domänenbeitritt
-
https://docs.software-univention.de/
-
Univention Development PPA
Install univention keyring
1 KEYRING="univention" 2 URL="https://keyserver.ubuntu.com/pks/lookup?fingerprint=on&op=index&search=0xD5FDF01E8A0E2AFA55E3CDF8DAA7120CFB520FFD" 3 curl "$URL" \ 4 |sudo sh -c 'gpg --dearmor \ 5 > /usr/share/keyrings/${KEYRING}-keyring.gpg'
Add Ubuntu PPA
/etc/apt/sources.list.d/univention.list
1 deb [signed-by=/usr/share/keyrings/univention-keyring.gpg] https://ppa.launchpadcontent.net/univention-dev/ppa/ubuntu focal main 2 deb-src [signed-by=/usr/share/keyrings/univention-keyring.gpg] https://ppa.launchpadcontent.net/univention-dev/ppa/ubuntu focal main
Install the utility
1 apt-get install univention-domain-join-cli python3-netifaces wget
With a little hack this may also be used with Debian
1 cp -p /usr/lib/python3/dist-packages/univention_domain_join/distributions/{ubuntu,debian}.py
Join the domain
1 univention-domain-join-cli \ 2 --username administrator \ 3 --skip-login-manager \ 4 --domain your.intranet \ 5 --dc-ip 192.168.122.9
Acronyms
Acronym |
Long version |
ACL |
Access Control List |
ADS |
Alternate Data Streams |
AS |
Authentication Service |
ASN |
Autonomous System Number |
BDC |
Backup Domain Controller |
BIOS |
Basic Input/Output System |
CIFS |
Common Internet File System |
CUPS |
Common Unix Prinitng System |
DC |
Domain Controller |
DFS |
Distributed File System |
DMB |
Domain Master Browser |
DNS |
Domain Name System |
DRS |
Directory Replication Services |
DLZ |
Dynamic Load Zone |
DTLS |
Datagram Transport Layer Security |
FSMO |
Flexible Single Master Operations |
GC |
global catalog |
GPO |
Group Policy Object |
I18N |
Internationalization |
IP |
Internet Protocol |
IPP |
Internet Printing Protocol |
IPX |
Internetwork Packet Exchange |
KCC |
Knowledge Consistency Center |
KDC |
Key Distribution Center |
LMB |
Local Master Browser |
LPD |
Line Prinitng Daemon |
NAT |
Network Address Translation |
NetBEUI |
NetBIOS Extended User Interface |
NetBIOS |
Network Basic Input/Output System |
NIS |
Network Information Server |
NFS |
Network File System |
NSS |
Name Service Switch |
NP |
Named Pipe |
OLE |
Object Linking and Embedding |
OU |
Organizational Unit |
PAC |
Privilege Attribute Certificate |
PAM |
Plugable Authentication Modules |
PSO |
Password Settings Object |
PDC |
Primary Domain Controller |
RODC |
Read-Only Domain Controller |
RPC |
Remote Procedure Call |
SAM |
Security Accounts Manager |
SID |
Security IDentifier |
SPN |
Service Principal Name (SPN) |
SSO |
Single Sign-On |
ST |
Service Ticket |
SWAT |
Samba Web Administration Tool |
TCP |
Transmission Control Protocol |
TGS |
Ticket Granting Service |
TGT |
Ticket Granting Ticket |
TLS |
Transport Layer Security |
UTF |
Unicode Transformation Format |
VFS |
Virtual File System |
WINS |
Windows Internet Name Service |
Введение
Что умеет Samba
Инсталляция и тестирование Samba
Где взять
Конфигурирование Samba
Запуск демонов
Простой тест
Основная настройка smb.conf
Используем текстовый интерфейс
Используем SWAT
Детальная настройка
Файловый сервер под Linux
Доступ к дискам Windows из Linux
Заключение
Введение
В общей структуре
корпоративных сетей Microsoft Windows и Linux
зачастую существуют как разобщенные миры.
Попытки обеспечить «прозрачный»
доступ сетевых клиентов Windows к ресурсам UNIX зачастую порождают
множество проблем. Одним из способов,
позволяющих их решить, является
использование в UNIX/Linux
протокола Server Message Block (SMB — Samba),
который иногда также называется протоколом
Session Message Block (SMB), протоколом NetBIOS или
протоколом LanManager. Этот протокол не является
разработкой Microsoft,
однако он хорошо адаптирован
для использования в сетях на основе Windows. Хотя эта статья и посвящена Linux,
тем не менее Samba может работать на
большинстве UNIX-подобных
операционных систем. И еще одно замечание: в данной
статье мы рассмотрим пакет SMB
с точки зрения малого предприятия, которому
нужен локальный файл- или принт-сервер, либо
домашнего пользователя, имеющего
несколько компьютеров и желающего,
чтобы машины совместно использовали
ресурсы. Поэтому даже начинающий
администратор UNIX/Linux может принять эту статью как
руководство к действию.
Что умеет Samba
Samba — это программа,
которая позволяет компьютерам UNIX/Linux
имитировать машины Windows. При помощи Samba
компьютеры могут обмениваться файлами или
управлять заданиями на печать как файл-серверы
или серверы печати под Windows. Подобно
операционной системе UNIX/Linux, на которой она
работает, Samba представляет собой
разработанное множеством программистов ПО
с открытым исходным кодом.
Протокол SMB используется Microsoft Windows 2000, NT и 95/98 для организации
доступа к дискам и принтерам. Используя набор утилит Samba от Andrew Tridgell
(Andrew.Tridgell@anu.edu.au),
UNIX-машины (включая Linux) могут организовывать доступ к дискам и принтерам
для Windows-машин. Утилиты smbfs, написанные Paal-Kr. Engstad (pke@engstad.ingok.hitos.no)
и Volker Lendecke (lendecke@namu01.gwdg.de),
дают возможность машинам с UNIX монтировать SMB-ресурсы, доступные на машинах
с Windows или Samba.
C помощью Samba можно реализовать следующие наиболее распространенные:
- Давать доступ к дискам Linux Windows-машинам.
- Получать доступ к дискам Windows для машин под Linux.
- Давать доступ к принтерам Linux для Windows-машин.
- Получать доступ к принтерам Windows из Linux-систем.
Далее в статье будет
дано подробное описание того, как это все
реализовать.
Инсталляция и тестирование Samba
Инсталляцию, как известно, следует начинать с подробного изучения документации.
Правда, большинство системных администраторов пренебрегают этим правилом, руководствуясь
другим: «Если уже ничего не помогает, почитайте документацию». В общем, советуем
начать инсталляцию Samba с простой команды: $ man samba (рис.
1).
А также c чтения документации, доступной на сайте http://www.samba.org/.
Следует отметить, что для использования Samba ваша машина должна находиться
в одиночном Ethernet-сегменте локальной сети, при этом используя протокол TCP/IP.
Samba не будет работать при использовании других сетевых протоколов. Это, в
принципе, легко, поскольку Linux и Windows 95/98/NT поставляются с поддержкой
TCP/IP. Однако если вы используете машины с Windows 3.x, то вам необходимо добавить
поддержку TCP/IP.
Где взять
Для того чтобы получить исходные тексты последней версии Samba, свяжитесь с
сайтом http://www.samba.org/
и выберите ближайший к вам сервер-зеркало: ftp://ftp.samba.org/. Пакет Samba
входит в состав дистрибутивов ряда UNIX/Linux-систем, например Rad Hat или Suse
Linux. Внимательно изучите документацию вашего Linux, и, вполне возможно, что
вам будет достаточно только вставить CD и инсталлировать пакеты Samba. В этом
случае вы можете продолжать чтение статьи со следующей главы.
После получения
данного пакета извлекаем все то, что
находится под «грифом» *.tar.gz,
например, в директорию /tmp
(причем для этого не обязательно быть root’ом
:), то есть:
$ tar -zxvf samba-latest.tar.gz
Если у вас не возникло
никаких проблем при извлечении данного
пакета, вы обнаружите новую директорию,
например samba-latest,
и в ней извлеченные файлы. Перейдите в нее,
загляните в файлы «README» и «Manifest»
— инструкция по инсталляции находится в
последнем файле и выглядит примерно так:
$ ./configure $ make $ su # make install
Теперь надо обратить
внимание на то, где находятся ваши файлы
конфигурации. Большинство дистрибутивов Samba
по умолчанию помещает их в директорию /etc,
а себя — в директорию /usr/local/samba.
Конфигурирование Samba
Основная информация о
конфигурации Samba
находится в файле smb.conf.
С этим файлом следует обращаться осторожно.
Если вы планируете каким-либо образом
изменить работающую версию, обязательно
сделайте копию.
Для того чтобы первый
раз запустить сервер, необходимо иметь
рабочую версию файла smb.conf. Перейдите в директорию, в
которой должен находиться ваш
конфигурационный файл. Скорее всего это
будет /etc или
/usr/local/samba/lib.
Сделайте копию данного файла, например smb.old,
— это возможно при наличии прав root.
Теперь, когда у вас есть «чистый» файл,
можно ввести самую простую конфигурацию, то
есть набрать следующие строки:
#Basic Samba configuration file (smb.conf) [global] workgroup = PTO netbios name = GALKA
Ниже мы разберемся,
что означают эти строки в файле
конфигурации, но сначала временно
отвлечемся от него и перейдем к демонам SMB.
Запуск демонов
Имеется два демона SMB: /usr/sbin/smbd
и /usr/sbin/nmbd. Вы можете запустить демоны Samba из
inetd или как автономный процесс. Samba будет
отвечать чуть быстрее в случае, если она
запущена как автономный процесс.
Иногда
бывает необходимо проверить наличие в
файле /etc/services примерно таких строк:
netbios-ns 137/tcp nbns netbios-ns 137/udp nbns netbios-dgm 138/tcp nbdgm netbios-dgm 138/udp nbdgm netbios-ssn 139/tcp nbssn
Убедитесь, что все они
не закомментированы. В зависимости от
вашего дистрибутива вам, вероятно, даже
понадобится добавить их в этот файл. Samba не сможет привязаться к
соответствующим портам, до тех пор пока
этих строк не будет в файле /etc/services.
Для запуска демонов из
inetd поместите следующие строки в
конфигурационный файл inetd, /etc/inetd.conf:
# SAMBA NetBIOS services (for PC file and print sharing) netbios-ssn stream tcp nowait root /usr/sbin/smbd smbd netbios-ns dgram udp wait root /usr/sbin/nmbd nmbd
Затем перезапустите
демон inetd, выполнив команду:
kill -HUP 1 `cat /var/run/inetd.pid`
Для запуска демонов из
системных стартовых скриптов поместите
следующий скрипт в файл /etc/rc.d/init.d/smb (для
дистрибутива RedHat) или /etc/rc.d
(для дистрибутива Suse
Linux) и
создайте на него символические ссылки с
именами вида /etc/rc.d/rcX.d/S91smb
(запускает сервисы SMB в
многопользовательском режиме), /etc/rc.d/rcX.d/K91smb (убивает сервисы SMB при
выключении), /etc/rc.d/rc6.d/K91smb (убивает сервисы SMB
при перезагрузке), где X
— номер загрузочного уровня системы,
обычно это цифра 2 или 3.
#! /bin/sh . /etc/rc.config # Determine the base and follow a runlevel link name. base=${0##*/} link=${base#*[SK][0-9][0-9]} # Force execution if not called by a runlevel directory. test $link = $base && START_SMB=yes test "$START_SMB" = "yes" || exit 0 # The echo return value for success (defined in /etc/rc.config). return=$rc_done case "$1" in start) echo -n "Starting SMB services:" startproc /usr/sbin/nmbd -D || return=$rc_failed startproc /usr/sbin/smbd -D || return=$rc_failed echo -e "$return" ;; startd) echo -n "Starting SMB services:" startproc /usr/sbin/nmbd -D -d 10 || return=$rc_failed startproc /usr/sbin/smbd -D -d 10 || return=$rc_failed echo -e "$return" ;; stop) echo -n "Shutting down SMB services:" killproc -TERM /usr/sbin/nmbd || return=$rc_failed killproc -TERM /usr/sbin/smbd || return=$rc_failed echo -e "$return" ;; restart|reload) $0 stop && $0 start || return=$rc_failed ;; status) echo -n "Checking for service smb: " checkproc /usr/sbin/nmbd && echo -n "OK " || echo -n "No process " checkproc /usr/sbin/smbd && echo "OK " || echo "No process" ;; *) echo "Usage: $0 {start|stop|restart|reload|status}" exit 1 esac # Inform the caller not only verbosely and set an exit status. test "$return" = "$rc_done" || exit 1 exit 0
Если при старте Samba вы
получаете сообщение, в котором говорится,
что демон не может подключиться к порту 139,
то скорее всего у вас уже есть запущенные
процессы Samba, которые не были завершены.
Посмотрите список процессов (используя
команду ‘ps ax | grep mbd’) для того, чтобы
определить, есть ли еще запущенные сервисы
Samba. Если же демоны отказываются
запускаться по каким-либо другим причинам,
то вероятнее всего этот скрипт не подходит
к вашему UNIX/Linux
и вам придется еще раз покопаться в
документации, что-то в нем поправить, а
может быть, и переписать.
Простой тест
Будем надеяться на
лучшее и считать, что Samba
при запуске не выдала никаких сообщений об
ошибках. А для того, чтобы проверить,
работает ли это реально, надо набрать в
командной строке:
# smbclient -L localhost
Выполняющаяся программа попросит вас ввести пароль. Здесь можете просто нажать
Enter. Вот какие строчки должны появиться на мониторе (рис.
2).
Основная настройка smb.conf
Очевидно, что в описанной
выше конфигурации Samba
может функционировать, но практически не
может ничего делать. Ниже будут рассмотрены
более полезные и сложные примеры. Но
сначала надо разобраться в директивах smb.conf.
Каждый раздел файла
начинается с заголовка раздела, такого как [global],
[homes], [printers]
и т.п.
Секция [global] определяет некоторые переменные,
которые Samba будет использовать для
определения доступа ко всем ресурсам.
Раздел [homes] позволяет удаленным
пользователям иметь доступ к своим (и
только своим) домашним директориям на
локальной Linux-машине. Так что если
пользователи Windows попытаются подключиться
к этому разделу со своих Windows-машин, то они
будут соединены собственными домашними
директориями. Заметим, что для
этого они должны быть зарегистрированы
на Linux-машине.
Используем текстовый интерфейс
Многие системные
администраторы при инсталляции Linux
ограничиваются только текстовым
интерфейсом, не устанавливая графический (X
Windows).
Это положительно сказывается на
безопасности и быстродействии системы, но
делает недоступными утилиты вроде SWAT,
работе с которой посвящена нижеследующая
часть этой статьи.
Простой файл smb.conf,
приведенный ниже, позволяет удаленным
пользователям иметь доступ к своим
домашним директориям на локальной машине и
помещать информацию во временную
директорию. Пользователи Windows могут увидеть
эти ресурсы, подключив сетевые диски, при
этом естественно — машина с Linux должна
иметь выход в локальную сеть.
Заметим, что будут приведены
дополнительные записи для этого файла,
чтобы дать доступ к большему количеству
ресурсов.
; /etc/smb.conf ; ; Убедитесь и перезапустите сервер после внесения изменений в этот ; файл, например: ; /etc/rc.d/smb stop ; /etc/rc.d/smb start [global] ; Раскомментируйте эту строку, если вы хотите дать доступ пользователю "гость" ; guest account = nobody log file = /var/log/samba-log.%m lock directory = /var/lock/samba share modes = yes [homes] comment = Home Directories browseable = no read only = no create mode = 0750
Написав новый файл
smb.conf, полезно проверить его правильность.
Для этого можно использовать утилиту ‘testparm’
(предварительно заглянув на справочную
страницу testparm); если testparm сообщает об
отсутствии проблем, то smbd правильно
загрузит файл настроек.
Имейте в виду: если ваш
сервер Samba имеет больше одного Ethernet-интерфейса,
то smbd может подключиться к неправильному.
Чтобы заставить ее подключаться к нужному,
можно добавить в раздел [global] файла /etc/smb.conf
следующую строку:
interfaces = 192.168.1.1/24
Теперь можно
запускать Sambа.
При этом необходимо учитывать, что чем
больше сервисов настроено на вашем сервере,
тем более он оказывается уязвим.
Если говорить о
безопасности SAMBA, то следует учесть, что она
использует порты 137-139. Есть смысл просто
заблокировать их из TCP и UDP. В случае если у
вас стоит ядро версии 2.0 (это можно легко
узнать, набрав в консоли uname -a), то для
фильтрации используйте ipfwadm,
а если ядро версии 2.1 или 2.2, — то ipchains.
Вот как
это делается с помощью ipfwadm:
# Добавляем нижеприведенные записи в /etc/rc.local: ipfwadm -I -P tcp -a deny -S any/0 137:139 -W eth0 ipfwadm -I -P udp -a deny -S any/0 137:139 -W eth0 ipfwadm -O -P tcp -a deny -S any/0 137:139 -W eth0 ipfwadm -O -P udp -a deny -S any/0 137:139 -W eth0
Это запретит (deny) все
входящие и исходящие TCP- и UDP-пакеты для
портов 137-139 на интерфейсе eth0. Для получения
более подробной информации рекомендуем
почитать man ipfwadm.
При наличии ядер 2.1-2.2
вы сможете сделать это с помощью ipchains:
# Добавляем нижеприведенные записи в /etc/rc.local: ipchains -A input -p tcp -j DENY --destination-port 137:139 -i eth0 ipchains -A input -p udp -j DENY --destination-port 137:139 -i eth0 ipchains -A output -p tcp -j DENY --destination-port 137:139 -i eth0 ipchains -A output -p udp -j DENY --destination-port 137:139 -i eth0
Как видите, здесь нет
ничего нового и сложного. Как ipfwadm, так и
ipchains выполняют одинаковые функции,
только для разных версий ядер.
Однако если вам не
нравится редактировать конфигурационные
файлы вручную и на вашем Linux-сервере установлен графический
интерфейс, то вы можете упростить настройку
smb.conf,
воспользовавшись Samba Web Administration Tool (SWAT).
Используем SWAT
Для использования SWAT
проверим два конфигурационных файла: services (/etc/services)
и inetd.conf (/etc/inetd.conf).
По умолчанию SWAT
запускается с 901-го порта, но при желании это
можно изменить. Итак, проверяем
вышеуказанные конфигурационные файлы:
>/etc/service swat 901/tcp # в данном случае SWAT-service используется через inetd
Если эта строка
присутствует в /etc/service, то все нормально.
Если строки нет, добавьте ее в конец файла.
Данная строка говорит нам о том, что SWAT
запускается на 901-м порте.
Теперь в файл inetd.conf (/etc/inetd.conf)
добавляем следующую строку:
swat stream tcp nowait.400 root /usr/sbin/swat swat
Затем перезапустим inetd:
# killall -HUP inetd
Далее в браузере
набираем:
http://192.168.0.1:901
В случае если все
настроено правильно, вы увидите форму, в
которой нужно ввести имя пользователя (username)
и пароль (password). Здесь введите имя и пароль
пользователя «root».
Итак, SWAT запущен.
Теперь можно ознакомиться с его работой.
Как вы видите, SWAT — это программа с
прекрасным интерфейсом, которая создает
конфигурационный файл /etc/smb.conf.
Детальная настройка
Файловый сервер под Linux
Как показано выше,
организация доступа к дискам Linux для
пользователей Windows с помощью файла smb.conf
является довольно простым делом. Однако Samba
позволит вам в большой степени
контролировать этот процесс. Приведем
несколько примеров.
Для
организации доступа для всех добавьте в smb.conf
следующие строчки:
[public] comment = Public Stuff path = /home/public public = yes writable = yes printable = no
Вы получили
возможность запустить Samba
и просмотреть доступные ресурсы с
компьютера под управлением Windows. Однако все может оказаться не
так-то просто. Начиная с Windows NT 4 в
операционных системах Microsoft, в том числе и в
среде Windows 98 (начиная с NT
Service
Pack 3),
происходит передача закодированных
паролей по сети. Вы
непременно столкнетесь с этой проблемой,
если версия пакета Samba, установленная на
вашем UNIX/Linux-сервере, ниже 2.0.5а и не
поддерживает закодированные пароли.
В случае несоответствия
типов паролей между клиентом и сервером при
попытках подключиться к ресурсу в окне
диалога будет указано примерно следующее: «You
are not authorized to access that account
from
this
machine».
Подобную проблему
можно решить двумя путями. Во-первых, можно
настроить Samba-сервер для использования
шифрованных паролей. Во-вторых,
заставить Windows работать с нешифрованными
паролями SMB. Если это Windows
98, то последовательность ваших действий
должна быть такова: используя редактор registry
(regedit), создайте ключ registry:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP
Добавьте значение
типа DWORD:
Имя значения: EnablePlainTextPassword
Данные: 0x01.
Для Windows NT
эта же последовательность действий
выглядит так:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rdr\Parameters
Добавьте значение
типа DWORD:
Имя значения: EnablePlainTextPassword
Значение: 0x01.
После того как вы
сделали эти изменения, перезагрузите
машину с Windows
и попытайтесь подключить сетевой диск к
серверу Samba.
Это должно работать, поскольку сервер Samba
использует пароли в нешифрованном виде.
Однако следует иметь в
виду, что передача по сети незашифрованных
паролей всегда наносит ощутимый удар по
системе безопасности, поэтому, если есть
возможность, лучше настроить Sambа
для использования шифрованных паролей. Для
этого в раздел [global] файла /etc/smb.conf добавьте
следующие строки:
encrypt passwords = yes smb passwd file = /etc/smbpasswd
При использовании
вашими клиентами и вашим сервером
шифрованных паролей вы не сможете
просмотреть списки доступных ресурсов до
тех пор, пока начальное соединение не будет
сделано с правильными параметрами входа.
Для того чтобы сделать первоначальное
соединение, в диалоговом окне Windows File Manager
или Explorer введите вручную имя ресурса в
форме \\hostname\sharename.
Подключитесь к серверу посредством
правильных для данного сервера имени и
пароля.
Если вы подозреваете,
что ваш сервис имен NetBIOS неправильно
настроен (возможно, потому, что вы получаете
сообщение об ошибке «host not found (машина не
найдена)» при попытке подключения),
попытайтесь использовать IP-адрес сервера: \\host ip address\sharename.
Если вы хотите видеть Samba-директорию
в качестве сетевого диска, то вам следует
сделать на Windows-машинах следующие настройки.
Сначала удостоверимся, что свойства сети настроены так, как нам надо. Для этого
заходим в свойства сети (щелкаем правой клавишей мыши на значке рабочего стола
«Сетевое окружение» (Network Neighborhood) и выбираем «Свойства»). Далее заходим
на закладку «Компьютер» (Identification). В поле «Имя компьютера»
(Computer name) прописываем Galka, в закладке «Рабочая группа» (Workgroup)
— PTO, а в закладке «Описание компьютера» (Computer Description) можете прописать
что угодно (рис. 3).
Дальше переходите на
закладку «Управление доступом» (Access Control) и
поставьте флажок в поле «На уровне ресурсов»
(Share-level access control).
Теперь переходите в
самую первую закладку «Конфигурация» (Configuration)
и нажмите на кнопке «Доступ к файлам и
принтерам» (File and print sharing). В появившемся
окне необходимо поставить флажки в поле «Файлы
этого компьютера можно сделать общими» (I want
to be able to give others access to my files) и «Принтеры этого
компьютера можно сделать общими» (I want to be able
to allow others to print to my printer(s)).
И наконец, мы указываем Windows, что Samba является сервером WINS и именно
он будет browse master’ом. Для этого переходим в свойства TCP/IP-протокола (рис.
4). В появившемся окне выбираем «Конфигурация WINS» (WINS Configuration).
Ставим флажок в поле «Включить распознавание WINS» (Enable WINS Resolution).
В появившемся поле «Основной сервер WINS» (WINS Server Search Order) прописываем
IP-адрес сервера (Samba) — 192.168.0.1 и нажимаем «Добавить» (Add) или просто
[Enter]. Переходим на закладку «Дополнительно» (Advanced) и нажимаем на «Browse
Master» в левом окне, а в правом устанавливаем значение «Disabled». Вот и все.
Теперь остается только несколько раз нажать кнопку «ОК» и перезагрузить Windows.
В Windows NT экраны свойств
сети немного
различаются (показаны на рисунках), но
главная концепция построения остается той
же.
После перезагрузки
Windows смело жмите на «Сетевое окружение» (Network
Neighborhood) и вы сможете увидеть Samba-сервер,
а также свою домашнюю директорию на Linux-сервере.
Теперь вы можете просто подключить данные
ресурсы как сетевые диски и присвоить им drive
letters.
Немного усложним
конфигурацию:
сделаем директорию /home/public
доступной для чтения всеми, но разрешим
помещать в нее информацию только людям из
группы ADMINS.
Для этого изменим запись следующим образом:
[public] comment = Public Stuff path = /home/public public = yes writable = yes printable = no write list = @ADMINS
Можно привести еще
много разных примеров настроек файлового
сервера Samba,
но будет лучше, если вы заглянете в
документацию Samba
или в справочные страницы и разберете их
самостоятельно.
Доступ к дискам Windows из Linux
Вряд ли начинающие
пользователи Linux OS смогут быстро
разобраться с системой доступа к Linux-файлам
из-под Windows, и наоборот. Но не все так сложно.
Доступ к Linux-ресурсам из под Windows был кратко
описан выше, а доступ к Windows-ресурсам из под
Linux мы сейчас рассмотрим.
Программа клиента SMB
для UNIX/Linux-машин включена в дистрибутив Samba.
Она обеспечивает ftp-подобный
интерфейс командной строки. Вы можете
использовать эту утилиту для переноса
файлов между «сервером» под управлением Windows
и клиентом под Linux.
Для того чтобы увидеть,
какие ресурсы доступны на данной машине,
выполните команду:
/usr/sbin/smbclient -L host
где host — это имя
машины, которую вы хотите видеть. Эта
команда вернет список имен сервисов — то
есть имен дисков или принтеров, к
которым может быть получен доступ. До тех
пор пока SMB-сервер не будет настроен без
управления доступом, он будет запрашивать у
вас пароль. Введите в ответ на запрос пароль
для пользователя «гость (guest)» или ваш
персональный пароль на этой машине.
Для использования
клиента выполните следующую команду:
/usr/sbin/smbclient service <password>
где service — имя машины и сервиса.
Например, если вы пытаетесь обратиться к
директории, которая доступна под именем public
на машине, названной galka,
то имя сервиса должно звучать как \\galka\public.
Вы получите
приглашение smbclient:
Server time is Wen May 22 15:58:44 2001 Timezone is UTC+10.0 Domain=[WORKGROUP] OS=[Windows NT 4.0] Server=[NT LAN Manager 4.0] smb: \>
Команды для
использования Samba
аналогичны командам ftp,
но если вы не умеете пользоваться ни тем ни
другим, напечатайте h, чтобы получить помощь.
Вы, конечно, можете
использовать smbclient для тестирования, однако
очень скоро вам это надоест. Для работы вам
вероятнее всего понадобится пакет smbfs. Smbfs
поставляется с двумя простыми утилитами —
smbmount и smbumount. Они работают подобно mount и umount
для SMB-ресурсов. Например,
smbmount//computer_name/catalog/Mountpoint -U user_name
В итоге вы получите «подмонтированный»
ресурс с возможностью обращения к нему
привычными методами проводника.
Принт-сервер под Linux
Для организации
доступа к Linux-принтеру
с Windows-машин вам необходимо убедиться, что
принтер работает под Linux. Если вы можете
печатать под Linux, то организация доступа к
принтеру будет очень проста.
Добавьте настройку
принтера в ваш файл smb.conf:
[global] printing = bsd printcap name = /etc/printcap load printers = yes log file = /var/log/samba-log.%m lock directory = /var/lock/samba [print] comment = All Printers security = server path = /var/spool/lpd/lp browseable = no printable = yes public = yes writable = no create mode = 0700 [ljet] security = server path = /var/spool/lpd/lp printer name = lp writable = yes public = yes printable = yes print command = lpr -r -h -P %p %s
Убедитесь, что путь к
принтеру (в нашем случае для [ljet])
соответствует буферной директории,
указанной в файле /etc/printcap, то есть проверьте наличие
строк:
printcap name = /etc/printcap load printers = yes
Эти строки
контролируют, должны ли все принтеры,
перечисленные в /etc/printcap, быть загружены по
умолчанию. В этом случае нет нужды в
настройке каждого принтера в отдельности.
Раздел [printers] указывает настройки для
принтеров, которые вы хотите определить
явно. Если используемая вами подсистема
печати не работает подобным образом (BSD), то
вам необходимо настроить фальшивый файл
printcap (либо использовать ‘print command’, см. ниже).
Для получения дополнительной информации о
системе printcap см. Printing-HOWTO.
Доступ к принтеру Windows с машин, работающих под Linux
Для доступа к принтеру
на Windows-машине необходимо соблюдение
следующих условий:
- Вам необходимо иметь в файле
/etc/printcap правильные записи, которые должны
соответствовать локальной структуре
директорий (для буферной директории и т.п.) - У вас должен быть скрипт /usr/bin/smbprint.
Он поставляется вместе с исходными
текстами Samba, но не со всеми двоичными
дистрибутивами Samba. - Если вы хотите
преобразовывать ASCII-файлы в PostScript,
вы должны иметь программу nenscript или ее
эквивалент. Программа nenscript —
это конвертор PostScript,
который
обычно устанавливается в директорию /usr/bin.
Запись в приведенном
ниже файле /etc/printcap
сделана для принтера HP 5MP на сервере Windows NT.
Используются следующие поля файла /etc/printcap:
cm — комментарий; lp — имя устройства, открываемого для вывода; sd — директория спула принтера (на локальной машине); af — файл учета пользования принтером; mx — максимальный размер файла (ноль — без ограничений); if — имя входного фильтра (скрипта).
Фрагмент
файла /etc/printcap:
# /etc/printcap # # //galka/oreilly via smbprint # lp:\ :cm=HP 5MP Postscript OReilly on galka:\ :lp=/dev/lp1:\ :sd=/var/spool/lpd/lp:\ :af=/var/spool/lpd/lp/acct:\ :mx#0:\ :if=/usr/bin/smbprint:
Убедитесь, что
буферные директории и директория,
применяемая для учета пользования,
существуют и имеют право на запись.
Убедитесь, что строка «if» содержит
правильный путь к скрипту smbprint (дан
ниже) и что записи указывают на правильное
устройство вывода (специальный файл /dev).
Далее идет сам скрипт smbprint
. Он
обычно находится в директории /usr/bin и
написан Andrew Tridgell.
#!/bin/sh –x # # Debugging log file, change to /dev/null if you like. # logfile=/tmp/smb-print.log # logfile=/dev/null # # The last parameter to the filter is the accounting file name. # spool_dir=/var/spool/lpd/lp config_file=$spool_dir/.config # Should read the following variables set in the config file: # server # service # password # user eval `cat $config_file` # # Some debugging help, change the >> to > if you want to same space. # echo "server $server, service $service" >> $logfile ( # NOTE You may wish to add the line `echo translate' if you want automatic # CR/LF translation when printing. echo translate echo "print -" cat ) | /usr/bin/smbclient "\\\\$server\\$service" $password -U $user -N -P >> $logfile
Большинство
дистрибутивов Linux поставляется с
программой nenscript
для преобразования ASCII-документов в PostScript.
Заключение
Еще совсем недавно
возможности Samba ограничивались лишь
перечисленными выше. Однако можно с
уверенностью говорить о том, что новая
версия Samba 2.2 догоняет Windows 2000 по
функциональным возможностям и содержит
дополнительные усовершенствования. Один из
ведущих разработчиков Samba Джереми Эллисон
(Jeremy Allison) называет ее «важным обновлением»,
которое поможет системам Samba легче
внедряться в сети Microsoft. ПО обеспечивает
экономию не только потому, что не нужно
платить за серверную ОС, но и потому, что не
приходится оплачивать «клиентские»
лицензии за все компьютеры, которые
используют сервер.
О новых возможностях
Samba 2.2. читайте в нашей статье «Samba
2.2 — что
нового» .
КомпьютерПресс 10’2001