В данной статье будет рассмотрен вариант развёртывания файлового сервера Samba на базе операционной системы UBUNTU и организация его взаимодействия с доменов Windows.
Для примера использован следующие исходные данные:
дистрибутив: UBUNTU 16.04.4
имя сервера Linux: 2UBUNTU-16
домен Windows: TESTDOMAIN.LOCAL
контроллеры домена: 2SRV1.TESTDOMAIN.LOCAL, 2SRV2.TESTDOMAIN.LOCAL
администратор контроллера домена: adm
Подготовка
После установки дистрибутива выполняем обновление информации о пакетах и сами пакеты:
sudo apt-get update
sudo apt-get upgrade
Для удобства работы с сервером можно дополнительно установить Webmin (систему управления сервером LINUX через web-интерфейс).
Если есть необходимость, то меняем имя сервера:
hostnamectl set-hostname 2UBUNTU-16
Добавляем доменное имя сервера в файл hosts
sudo nano /etc/hosts
127.0.0.1 localhost
127.0.1.1 2ubuntu-16 2ubuntu-16.testdomain.local
После этого перезагружаем сервер:
sudo reboot
Установка Samba
Помимо установки Samba, так же устанавливаем пакеты Kerberos и Winbind (для возможности подключения и взаимодействия с доменом на Windows):
sudo apt install krb5-user winbind samba libnss-winbind libpam-winbind
При установке Kerberos будет запрошена область по умолчанию — нужно указать адрес домена (в нашем случае TESTDOMAIN.LOCAL)
Проверяем доступность контроллера домена:
ping -c 5 TESTDOMAIN.LOCAL
Для успешной работы с доменом нужно установить синхронизацию времени с контроллером домена.
Устанавливаем пакет:
sudo apt install ntp
Настраиваем файл конфигурации службы ntp
sudo nano /etc/ntp.conf
Нужно закомментировать все текущие указанные серверы проверки время и добавить свой домен ( pool TESTDOMAIN.LOCAL)
Перезапускаем службу времени и проверяем статус синхронизации:
sudo systemctl restart ntp
ntpq -p
Запрашиваем тикет у Kerberos у контроллера домена:
kinit Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.
Если не отобразилась информация об ошибке, то запрос прошёл верно и можно проверить результат:
klist
Настройка Samba
Сохраним резервную копию файла конфигурации:
sudo cp /etc/samba/smb.conf /etc/samba/smb.default.conf
Далее редактируем файл конфигурации:
sudo nano /etc/samba/smb.conf
Пример заполнения раздела [global]
[global]
security = ADS
workgroup = TESTDOMAIN
realm = TESTDOMAIN.LOCAL
encrypt passwords = yes
# Default idmap config for local BUILTIN accounts and groups
idmap config * : backend = tdb
idmap config * : range = 3000-7999
# idmap config for the TESTDOMAIN domain
idmap config TESTDOMAIN : backend = rid
idmap config TESTDOMAIN : range = 10000-999999
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
После сохранения изменений в файле smb.conf выполняем проверку:
testparm
Взаимодействие Samba с доменом Windows
Если ошибок не обнаружено, то подключаем сервер к домену:
sudo net ads join -U Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.
В случае отсутствия ошибок проверяем наличия сервера в списке компьютеров домена на стороне контроллера.
Перезагружаем сервис Winbind:
service winbind restart
Проверяем связь с контроллером домена, а затем список пользователей и групп домена Windows:
wbinfo --ping-dc
wbinfo -u
wbinfo -g
Чтобы UBUNTU могла использовать не только локальные группы и пользователей, но и доменные данные, нужно отредактировать настройки диспетчера службы имен NSS (Name Services Switch)
sudo nano /etc/nsswitch.conf
Необходимо дописать следующие значения:
passwd: compat winbind
group: compat winbind
После этого можно проверить возможность просмотра пользователей и групп:
getent passwd adm
getent group "пользователи домена"
Добавляем папку общего ресурса:
sudo mkdir -p /srv/samba/public
Назначаем имя владельца и группу для созданной папки:
sudo chown "adm":"пользователи домена" /srv/samba/public
Редактируем файл конфигурации Samba, чтобы добавить поддержку Windows ACLs и сетевую папку public
sudo nano /etc/samba/smb.conf
[global]
# Windows ACLs Support
vfs objects = acl_xattr
map acl inherit = yes
store dos attributes = yes
[Public]
path = /srv/samba/public/
read only = no
Перезапустим службу Samba (чтобы применить изменения):
service smbd restart && service nmbd restart
Для удобства удалённой настройки разрешений сетевых ресурсов добавим администраторам домена привилегию SeDiskOperatorPrivilege:
net rpc rights grant "TESTDOMAIN\администраторы домена" SeDiskOperatorPrivilege -U "TESTDOMAIN\adm"
Проверяем подключение привилегий:
net rpc rights list privileges SeDiskOperatorPrivilege -U "TESTDOMAIN\adm"
Теперь управлять разрешениями для общих ресурсов можно удалённо с сервера Windows. Для этого запускаем оснастку «Управление компьютером» от имени администратора домена, выбираем «Подключиться к другому компьютеру…» и выбираем имя сервера Linux ( 2UBUNTU-16.TESTDOMAIN.LOCAL)
В разделе «Служебные программы» — «Общие папки» — «Общие ресурсы» будут отображаться сетевые ресурсы, доступные на сервере Linux.
Дополнительно:
Дополнительно можно подключать «корзину» для отдельных ресурсов (чтобы сохранять удалённые файлы и папки).
Проверяем наличие соответствующего модуля:
dpkg -l |grep samba-vfs-modules
Устанавливаем, если он отсутствует:
apt install samba-vfs-modules
Добавляем поддержку корзины для общего ресурса Public
sudo nano /etc/samba/smb.conf
[Public]
path = /srv/samba/public/
read only = no
vfs object = recycle
recycle: repository = .recycle/%U
recycle: touch = yes
recycle: keeptree = yes
recycle: versions = yes
«vfs object = recycle» – включение корзины для общего ресурса;
«recycle: repository = .recycle/%U» – папка, куда будут перемещаться удаленные файлы;
«recycle: touch = yes» – обновлять дату при перемещении файла в корзину;
«recycle: keeptree = yes» – сохранять структуру каталогов удаленного файла;
«recycle: versions = yes» – при перемещении в корзину файла с существующим именем, добавлять к началу имени файла префикс «Copy #».
Для создания статьи использовались следующие материалы:
http://www.linuxrussia.com/samba-as-domain-controller.html
https://4skill.ru/fajlovyj-server-samba-v-domene-windows/
Краткое руководство по установке и первоначальной настройке файлового сервера Samba с интеграцией с контроллером домена Active Directory на ОС Debian GNU/Linux 11.6.
В первую очередь необходимо указать FDQN в файле /etc/hostname
# hostnamectl set-hostname fileserver.homenet.local
и поправить строчку в файле /etc/hosts:
127.0.1.1 fileserver.homenet.local fileserver
Проверим командой:
# hostnamectl status
После этого устанавливаем службу ntp для синхронизации времени с контроллером домена
# apt install ntp ntpdate
Служба запустится автоматически после установки.
Затем открываем файл /etc/ntp.conf и перед списком pool указываем сервер контроллера домена:
server dc1.homenet.local
Перезапускаем службу ntp
# systemctl restart ntp
и сверяем дату и время
# date
Переходим к настройке Kerberos. Устанавливаем пакет krb5-user
# apt install krb5-user
открываем файл /etc/krb5.conf и приводим его к следующему виду:
[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = HOMENET.LOCAL dns_lookup_kdc = false dns_lookup_realm = false forwardable = true ticket_lifetime = 24h [realms] HOMENET.LOCAL = { kdc = dc1.homenet.local default_domain = HOMENET.LOCAL admin_server = dc1.homenet.local } [domain_realm] .homenet.local = HOMENET.LOCAL homenet.local = HOMENET.LOCAL
Проверяем работу kerberos
# kinit administrator@HOMENET.LOCAL
потребуется ввести пароль
здесь administrator — учётная запись с правами администратора контроллера домена
Проверяем:
# klist
консоль должна показать примерно такое:
Ticket cache: FILE:/tmp/krb5cc_0 Default principal: administrator@HOMENET.LOCAL Valid starting Expires Service principal 10.02.2023 00:27:51 10.02.2023 10:27:51 krbtgt/HOMENET.LOCAL@HOMENET.LOCAL renew until 11.02.2023 00:27:45
Значит всё сработало. Теперь удаляем полученный тикет
# kdestroy
Далее устанавливаем Samba и winbind и входим в домен
# apt install samba cifs-utils winbind libnss-winbind libpam-winbind
открываем файл конфигурации samba
# nano /etc/samba/smb.conf
и приводим его к следующему виду:
[global] realm = HOMENET.LOCAL workgroup = HOMENET security = ads encrypt passwords = yes netbios name = fileserver server string = %h, Samba server %v domain master = no local master = no preferred master = no os level = 0 domain logons = no dns proxy = no socket options = TCP_NODELAY unix charset = UTF-8 dos charset = 866 idmap config * : backend = tdb idmap config * : range = 3000-7999 idmap config HOMENET : backend = rid idmap config HOMENET : range = 10000-999999 winbind enum users = yes winbind enum groups = yes winbind refresh tickets = yes winbind use default domain = yes winbind offline logon = yes winbind cache time = 300 template homedir = /srv/share/users/%D/%U template shell = /bin/bash load printers = no show add printer wizard = no printcap name = /dev/null disable spoolss = yes log level = 0 vfs:1
Затем увеличиваем лимит одновременно открытых файлов до 16384. Для этого открываем /etc/security/limits.conf и в самом конце допишем такие строки:
* - nofile 16384 root - nofile 16384
Проверяем конфигурацию Самбы утилитой testparm
# testparm
в консоли получим ответ:
Load smb config files from /etc/samba/smb.conf Loaded services file OK. Server role: ROLE_DOMAIN_MEMBER Press enter to see a dump of your service definitions
жмём Enter и консоль покажет такую выгрузку:
# Global parameters [global] disable spoolss = Yes dns proxy = No domain master = No dos charset = 866 load printers = No local master = No os level = 0 preferred master = No printcap name = /dev/null realm = HOMENET.LOCAL security = ADS server string = %h server show add printer wizard = No template homedir = /srv/share/users/%D/%U template shell = /bin/bash winbind enum groups = Yes winbind enum users = Yes winbind offline logon = Yes winbind refresh tickets = Yes winbind use default domain = Yes workgroup = HOMENET idmap config homenet : range = 10000-999999 idmap config homenet : backend = rid idmap config * : range = 3000-7999 idmap config * : backend = tdb
После этого не помешает перезагрузить машину
# shutdown -r now
Теперь подключим Самбу к домену
# net ads join -U administrator@homenet.local
вводим пароль и консоль покажет такой результат:
Using short domain name -- HOMENET Joined 'FILESERVER' to dns domain 'homenet.local'
Это значит, что в DNS контроллера домена homenet.local добавлена A-запись fileserver.
Для того, чтобы мы могли видеть и пользоваться учётными записями и группами домена, настроим службу winbind. Для этого открываем файл /etc/nsswitch.conf и изменим параметры passwd и group:
passwd: files winbind group: files winbind
Перезапускаем службу winbind
# systemctl restart winbind
Теперь нам необходимо проверить доверительные отношения с контроллером домена
# wbinfo -t
консоль должна вывести такую строчку:
checking the trust secret for domain HOMENET via RPC calls succeeded
Это значит, что Active Directory доверяет Самбе.
После этого мы можем увидеть список пользователей домена
# wbinfo -u
а также групп
# wbinfo -g
Если консоль всё это выводит, значит всё настроено правильно. Если нет, то перезагрузим машину
# shutdown -r now
и повторим эти команды, должно будет работать.
Далее можно начинать открывать ресурсы для пользователей. Для этого создадим директорию /srv/share/
# mkdir /srv/share/
назначим ей владельца — группу sambashare и дадим полные права
# chown :sambashare /srv/share/ # chmod 777 /srv/share/
в этой директории создадим директорию test
# mkdir /srv/share/test/
и зададим владельца уже пользователя домена vasya_petrov
# chown vasya_petrov /srv/share/test/ # chmod 777 /srv/share/test/
снова откроем файл /etc/samba/smb.conf и пропишем эту директорию в шарах:
[Test Folder] writeable = yes read list = @sales fedya_ivanov valid users = vasya_petrov @buh "@Администраторы домена" path = /srv/share/test
и перезапускаем службы самбы
# systemctl restart smbd # systemctl restart nmbd
Теперь на другой машине в домене homenet.local открываем
\\fileserver\
и увидим шару Test Folder
Здесь получается, что у группы sales и пользователя fedya_ivanov права только на чтение, а у пользователя vasya_petrov и групп buh и Администраторы домена — права на чтение и запись.
Время на прочтение
10 мин
Количество просмотров 20K
Аутентификация Samba в домене Windows
1. Введение. Обзор существующих публикаций
В последнее время системные администраторы сталкиваются с задачей объединения разнородных операционных систем в сети предприятия. В частности, одной из проблем является применение серверов GNU/Linux совместно с рабочими станциями и серверами под управлением Windows различных версий.
Обычно сеть небольшого предприятия включает в себя около 20-30 рабочих станций с операционной системой Windows 7, контроллер домена на базе Windows Server 2008 R2, маршрутизатор и нескольких специализированных серверов. Дальше мы будем рассматривать включение таких серверов на базе GNU/Linux в домен Windows Server 2008 R2 и порядок работы с такими серверами.
В качестве первой задачи рассмотрим организацию файлового сервера Samba в домене Windows Server 2008 R2. Проблеме создания файловых серверов на основе Samba посвящено множество статей и публикаций на различных форумах. В качестве примера можно привести документацию по Samba, опубликованную на официальном сайте проекта www.samba.org/samba/docs. Здесь приведены различные материалы, начиная со второго издания известной книги «Using Samba», написанной Джеем Ц (Jay Ts), Робертом Экштейном (Robert Eckstein) и Дэвидом Колльер-Брауном (David Collier-Brown) и выпущенной издательством O’Reilly & Associates. Третье издание этой книги, увидевшее свет в 2007 году, на сайте пока недоступно. Следует отметить и прекрасный набор руководств HOWTO и примеров конфигураций, представленный на сайте.
Немалое количество дополнительной информации о работе Samba можно получить и на сайтах производителей основных дистрибутивов Linux.
Стоит отметить и различные авторские материалы, опубликованные в в сетевых и печатных изданиях; например, статью Александра Фархутдинова в журнале Linux Format (http://wiki.linuxformat.ru/index.php/LXF123:Samba), Блог любителя экспериментов (http://www.k-max.name/) и целый ряд статей на таких известных ресурсах как www.opennet.ru и habrahabr.ru. Читатели могут сами убедиться в этом, задав поиск фразы «Включение samba в домен Windows» или «Включение Linux в домен Windows» и получив в итоге десятки и сотни тысяч ссылок.
Цель данной статьи – не только дать конкретные рекомендации по включению серверов GNU/Linux в доменную структуру Windows, но и рассмотреть работу тестовой сети, эмулирующую сеть небольшого предприятия. Мы постараемся рассмотреть большинство аспектов работы в такой сети и дать рекомендации по организации взаимодействия всех ее элементов.
2. Описание тестовой сети, домена Windows
Для организации тестовой сети мы будем использовать виртуальную среду VMware VSphere 5, реализованную на базе архитектуры гипервизора ESXi. Однако можно было бы воспользоваться и хорошо себя зарекомендовавшим Microsoft Hyper-V, а также любым другим аналогичным решением
Тестовая среда представляет собой, доменную сеть на базе Active Directory (Active Directory Domain Services – AD DS ), которая состоит из двух серверов инфраструктуры, работающих под управлением MS Windows Server 2008 R2 EE, и одной клиентской машины – MS Windows 7 Professional. Используются IP-адреса из подсети 192.168.7.0/24
Наименование домена – LAB.LOCAL Контроллер домена – LAB-DC1.lab.local Сервер Forefront Threat Management Gateway (TMG) 2010 – LAB-TMG.lab.local Клиент – LAB-CL1 .lab.local
На LAB-DC1 установлены роли
- Службы сертификации Active Directory (Active Directory Certificate Services — AD CS)
- Доменные службы Active Directory (Active Directory Domain Services — AD DS)
- DHCP – сервер (Scope name: LAB.LOCAL; Address pool: 192.168.7.20-192.168.7.70)
- DNS – сервер (Type: AD-Integrated; Dynamic updates: Secure only)
- Веб-службы (IIS)
Примечание
Установка доменной службы AD DS выполнена в соответствии с рекомендациями, изложенными в статье technet.microsoft.com/en-us/library/dd378801(v=ws.10).aspx
3. Механизмы авторизации в домене Windows
Крайне важной частью протокола SMB являются методы аутентификации. Несоответствие их на сторонах клиента и сервера является причиной значительного числа проблем сетевого доступа. Всего существует четыре основных метода аутентификации.
Источник — wiki.linuxformat.ru/index.php/LXF123:Samba
Открытым текстом
По понятным причинам, этот метод аутентификации является и самым простым и самым ненадежным. Такая аутентификация использовалась старыми версиями Samba. В текущих версия пароль шифруется по умолчанию. Для отключения шифрования необходимо изменить значение параметра encrypted password в файле smb.conf на false. Так же этот метод применялся в клиентах для MS DOS а так же в старых версиях Windows NT. Уже в Windows 95 (и более новых версиях) для его активации необходимо править реестр. Для Windows 2000 и выше возможно включить этот метод аутентификации через локальные политики безопасности. Для этого необходимо установить выставить значение «Да» переключателя «Посылать незашифрованный пароль сторонним SMB-серверам». Еще раз заметим: использование этого метода сегодня ничем не оправдано и крайне не рекомендуется.
Методом LM (LAN manager)
Используется в Windows 95/98. Samba по умолчанию допускает аутентификацию по протоколу LM. При возникновении проблем с доступом к ресурсам под управлением Windows NT 4.0 и выше необходимо откорректировать локальные политики безопасности на Windows-сервере — установить переключатель «Уровень проверки подлинности LAN Manager» в положение «Отправлять LM и NTLM ответы».
Методом NTLM
Появился в Windows NT 3.5. В настоящее время используется в несколько переработанном и усовершенствованном виде — NTLMv2. NTLMv2 работает по схеме «запрос-ответ». Интересная особенность этого метода заключается в том, что сервер не хранит пароль не только в открытом, но и в зашифрованом виде. Хранится лишь его хэш, но и он по сети не передается, что очень хорошо с точки зрения безопасности.
Windows 95/98 могут работать с NTLMv2 после установки клиента Directory Services. Samba также поддерживает этот метод аутентификации.
С помощью службы Kerberos
Kerberos — мощная система, выполняющая аутентификацию и авторизацию пользователей, которая используется в домене Active Directory (AD) в качестве основной. Она также обеспечивает шифрование внутрисетевого трафика. Протокол Kerberos предлагает механизм взаимной аутентификации клиента и сервера перед установлением связи между ними, причём в протоколе учтён тот факт, что начальный обмен информацией между клиентом и сервером происходит в незащищённой среде, а передаваемые пакеты могут быть перехвачены и модифицированы. Другими словами, протокол идеально подходит для применения в Интернете и аналогичных сетях. Начиная с третьей версии, Samba может являться полноценным клиентом домена Active Directory.
На этот метод мы обратим особое внимание, так как наша статья посвящена интеграции Samba-сервера на Linux в домен AD, а значит работать необходимо именно с Kerberos.
В операционной системе Windows Server 2008 R2 Центр распределения ключей (Key Distribution Center, KDC) реализован как служба домена. В качестве базы данных учетных записей он использует Active Directory. Кроме того, некоторые данные о пользователях поступают в него из глобального каталога (Global Catalog).
Центр KDC, как и служба каталогов Active Directory, имеется в каждом домене. Обе службы автоматически запускаются подсистемой LSA (Local Security Authority – распорядитель локальной безопасности), которая установлена на контроллере домена. Они работают в пространстве процессов этого распорядителя. Ни одну из этих служб остановить невозможно. Чтобы гарантировать постоянный доступ к KDC и Active Directory, в Windows предусмотрена возможность развертывания в каждом домене нескольких равноправных контроллеров домена. При этом запросы на аутентификацию и на выдачу билета, адресованные службе KDC данного домена, может принимать любой контроллер домена.
Центр KDC (Key Distribution Service) представляет собой единый процесс, объединяющий две службы: службу аутентификации Authentication Service (AS) и службу выдачи билетов Ticket-Granting Service (TGS). В общих чертах процесс выглядит следующим образом:
При входе в сеть, клиент обращается к службе аутентификации того домена, где находится учетная запись пользователя, предоставляя ей логин и пароль. В ответ та выдает клиенту билет TGT — Ticket-Granting Ticket, разумеется, если логин и пароль верны. После этого в игру вступает TGS. Эта служба выдает билеты на доступ к другим службам своего домена или к службе выдачи билетов доверяемого домена. Чтобы обратиться в службу TGS, клиенту нужно сначала войти в контакт со службой выдачи билетов того домена, где находится учетная запись службы, представить свой билет TGT и запросить нужный билет. Если у клиента нет билета TGT, который открывает доступ к данной службе выдачи билетов, он может воспользоваться процессом переадресации (referral process). Начальной точкой этого процесса является служба того домена, где находится учетная запись пользователя, а конечной – служба выдачи билетов домена, где находится учетная запись требуемой службы.
Во многих источниках билеты называют «тикетами», «квитанциями» и даже «мандатами». Но смысл от этого не меняется- это «документ» подтверждающий право воспользоваться сервисом.
В среде Windows политика Kerberos определяется на уровне домена и реализуется службой KDC домена. Она сохраняется в каталоге Active Directory как подмножество атрибутов политики безопасности домена. По умолчанию вносить изменения в политику Kerberos имеют право только члены группы администраторов домена.
В политике Kerberos предусматриваются:
Максимальный срок действия пользовательского билета (Maximum user ticket lifetime). Под «пользовательским билетом» здесь имеется в виду билет на выдачу билетов (билет TGT). Значение задается в часах и по умолчанию равно 10 часов.
Максимальное время, в течение которого допускается обновление пользовательского билета (Maximum lifetime that a user ticket can be renewed). Задается в сутках; по умолчанию составляет 7 суток.
Максимальный срок действия служебного билета (Maximum service ticket lifetime). Под «служебным билетом» здесь имеется в виду сеансовый билет. Значение этого параметра должно быть более 10 минут, но менее значения Maximum user ticket lifetime. По умолчанию оно равно 10 часов.
Максимально допустимое отклонение в синхронизации компьютерных часов (Maximum tolerance for synchronization of computer clocks). Указывается в минутах; по умолчанию равно 5 мин.
Проверка ограничений при входе пользователя в систему (Enforce user logon restrictions). Если этот пункт помечен флажком, служба KDC анализирует каждый запрос на сеансовый билет и проверяет, имеет ли данный пользователь право на локальный вход в систему (привилегия Log on Locally) или на доступ к запрашиваемому компьютеру через сеть (привилегия Access this computer from network). Такая проверка занимает дополнительное время и может замедлить предоставление сетевых услуг, поэтому администратору предоставляется право ее отключения. По умолчанию она включена.
Сразу стоит упомянуть несколько подводных камней, с которыми можно столкнуться. В первую очередь расхождение часов на стороне клиента и сервера должно составлять не более нескольких минут (по умолчанию, как уже было сказано выше, не более пяти), иначе сервер признает квитанцию клиента недействительной и откажет ему в доступе. В этом случае на клиентской Windows-машине или сразу будет выведено сообщение «Доступ запрещен», или Windows раз за разом будет спрашивать логин-пароль без всякого видимого результата. Во-вторых следует помнить, что основу Active Directory составляют четыре технологии: DNS, LDAP, SMB и Kerberos. Все они работают в составе домена, но к каждой из них можно обращаться как самостоятельной службе. Несмотря на такую независимость служб, неверная работа хотя бы одной из них сделает включение клиента в домен невозможным. Особое внимание следует обратить на то, что если на стороне клиента неверно указаны сервер DNS, имя клиента или имя домена, то он не будет включен в домен AD. Причиной этого является тот факт, что DNS-сервер в составе домена Active Directory хранит SRV-записи, указывающие на расположение серверов KDC и LDAP.
4. Требуемые пакеты для GNU/Linux
Все упомянутые ниже пакеты нужны для развертывания OpenLDAP, Kerberos и Samba на сервере, работающем под управлением Ubuntu Linux 10.04.4 LTS 64 с графической оболочкой Xfce. Также приводятся сведения о необходимых для установки предустановленных пакетах в соответствии с официальной документацией для OpenLDAP, Kerberos и Samba
Для сборки OpenLDAP необходимы следующие пакеты:
- Компилятор C, например gcc (обязательно)
- Reentrant POSIX REGEX software (обязательно)
- Cyrus SASL 2.1.21+ (рекомендуется)
- OpenSSL 0.9.7+ (рекомендуется)
Необходимые пакеты можно установить командой sudo apt-get install имя_пакета.
Так же потребуется Oracle Berkeley DB версий 4.4 – 4.8 или 5.0 – 5.1. О том, как собрать ее из исходников, мы расскажем чуть позже, когда будем говорить о сборке OpenLDAP.
Для сборки Kerberos нам понадобятся пакеты flex и bison(sudo apt-get install flex bison), иначе при сборке вы получите ошибку “yacc – command not found”. Затем нам понадобится g++ (sudo apt-get install g++), так как в противном случае Kerberos снова не соберется, сообщив, что “g++ — command not found.”
К моменту сборки Samba у нас уже должны быть установлены и OpenLDAP и Kerberos, в этом случае установка дополнительных пакетов не потребуется.
Для установки пакетов gcc, g++, flex, bison можно воспользоваться менеджерами пакетов, установленной на Вашем дистрибутиве GNU/Linux. Обычно нужно просто отметить эти пакеты при первоначальной установке системы.
5. Сборка пакетов из исходных текстов.
Итак, переходим к самой части — сборке пакетов из исходников. Конечно, сборка из исходников не является распространенной практикой для современных дистрибутивов Linux, и представляет скорее исследовательский интерес. Мы рассмотрим сборку из исходников, так как этот процесс является, в целом, универсальным для любого дистрибутива Linux. В дальнейшем мы будем работать с репозиториями, что несколько проще.
Сборка OpenLDAP
Сначала с сайта Oracle скачиваем source-файлы Berkeley DB(далее — BDB) с сайта Oracle. www.oracle.com/technetwork/database/berkeleydb/downloads/index-082944.html В нашем случае все получилось с BDB 4.8
Компилируем и устанавливаем BDB:
tar xvzf db-4.8.30.tar.gz
cd db-4.8.30/build_unix
../dist/configure #Если необходимы специфические параметры - /configure --help
make
sudo make install
Скачиваем исходные тексты OpenLDAP www.openldap.org/software/download
В нашем случае это была версия 2.4.30.
Компилируем и устанавливаем OpenLDAP:
tar -xzvf openldap-2.4.30.tgz
cd openldap
export CPPFLAGS="-I/usr/local/BerkeleyDB.4.8/include -D_GNU_SOURCE"
export LDFLAGS="-L/usr/local/BerkeleyDB.4.8/lib"
export LD_LIBRARY_PATH="/db-4.8.30.NC/build_unix/.libs/"
./configure --with-tls=no #если необходимы некие особенные опции установки — ./configure --help
make depend
make
make test #на этом шаге проверяется OpenLDAP. Времени это занимает много, можно смело попить кофе.
make install
Вот и все с OpenLDAP. Напоследок хочется упомянуть несколько наиболее распространенных ошибок:
configure: error: Berkeley DB version mismatch
Solution: скорее всего вы не экспортировали переменные LDFLAGS и LD_LIBRARY_PATH, как было сказано выше.
getpeereid.c:52: error: storage size of ‘peercred’ isn’t known
Вы, скорее всего забыли о флаге -D_GNU_SOURCE, который необходим для обхода несовместимости с glibc.
И еще раз внимательно проверьте все, ли необходимые пакеты установлены на вашей системе.
Сборка Kerberos
Скачиваем Kerberos web.mit.edu/kerberos/dist/index.html Мы использовали current release.
После этого распаковываем, собираем и устанавливаем программу:
t
ar -xzvf krb5-1.10.1.tar.gz
cd /krb5-1.10.1/src
./configure --with-ldap=yes #здесь, если необходимо, указываем опции. Какие — можно поинтересоваться командой ./configure —-help.
make
make install
make check #проверяем результат наших трудов.
Если вы получите ошибку «yacc — command not found», значит, вы забыли поставить пакеты flex и bison.
sudo apt-get install flex bison
Если «g++ – command not found», значит, забыли про компилятор g++.
sudo apt-get install g++
Сборка Samba
Скачиваем исходники Samba c www.samba.org/samba/download. Нам нужна последняя версия, поэтому качаем samba-latest.tar.gz.
Разархивируем, собираем и устанавливаем Samba:
tar -xzvf samba-latest.tar.gz
cd samba-3.6.3
cd source3
./configure --with-ldap=yes --with-ads=yes
make
make install
Скорее всего, если все предыдущие шаги были выполнены правильно, сборка и установка Samba пройдет без проблем. Если нет — в первую очередь проверьте, все ли зависимости корректно установлены. Если Samba чего-то будет не хватать, она заявит об это весьма ясно.
Конечно, сборка всех пакетов из исходных текстов трудоемкая процедура с невысоким коэффициентом полезного действия. Поэтому лучше всего установить требуемые пакеты с использованием менеджера пакетов Вашего дистрибутива GNU/Linux.
Итак, все пакеты установлены и пора переходить к настройке.
Для того, чтобы создать файловый сервер, интегрированный в домен Active Directory, вам в первую очередь потребуется ввести вашу машину с Ubuntu в домен. Этому посвящена отдельная статья:
Для создания файлового сервера вам не нужно настраивать PAM, достаточно добавить доменных пользователей и группы через Winbind в систему.
После успешного входа в домен вам останется всего лишь настроить расшаренные ресурсы на вашем компьютере.
Тут стоит сразу обратить внимание на одну очень важную вещь: Samba пытается спроецировать права на файлы Windows на права Unix, однако из-за кардинальных различий в механизмах присвоения прав сделать это не всегда возможно. Учтите, что права на файлы всегда и в любом случае контролируются вашей файловой ситемой на компьютере с Ubuntu, самба может лишь подстраиваться под них, но не менять их поведение.
Поэтому по умолчанию на расшаренных ресурсах будут весьма скудные возможности контроля доступа — назначение разных прав для пользователя, группы и всех остальных. Однако это легко исправить, добавив в вашу ФС поддержку POSIX ACL. В этом случае можно будет назначать различные права различным пользователям и группам практически как в Windows.
Поддержка POSIX ACL есть как минимум в ext3/4, для её активирования вам необходимо просто добавить к опциям монтирования нужного раздела параметр acl
.
Важно, чтобы каталог, который вы хотите расшарить через Samba, лежал на диске, смонтированном с опцией acl. Иначе вы не сможете нормально использовать механизм разграничения прав доступа к файлам на шарах.
Есть и ещё один весьма немаловажный момент: POSIX ACL не поддерживают наследование прав доступа от родительских каталогов, а в Windows эта возможность присутствует. Поэтому в Samba реализован дополнительный механизм сохранения информации о наследовании прав доступа, который использует расширенные атрибуты файловой системы. Поэтому чтобы Samba могла корректно обрабатывать наследование прав кроме acl
к опциям монтирования файловой системы необходимо добавлять параметр user_xattr
, который как раз и отвечает за включение поддержки расширенных атрибутов.
Например, я всегда использую для организации расшаренных ресурсов отдельные LVM диски и у меня строчки в fstab для них выглядят примерно так:
/dev/mapper/data-profiles /var/data/profiles ext3 defaults,noexec,acl,user_xattr 0 2
Опция noexec
нужна потому, что на шарах для Windows 100% не должно быть исполняемых файлов Linux, и лишний раз перестраховаться не помешает.
Для работы с acl на Ubuntu необходимо установить пакет соответствующих утилит:
sudo aptitude install acl
После чего посмотреть расширенные права (т.е. ACL) на файл или каталог можно будет командой
getfacl file
А установить командой
setfacl [options] file
На всякий случай хочу обратить внимание на то, что механизм POSIX ACL не имеет никакого отношения к Samba — это просто надстройка над стандартным механизмом разграничения прав в Linux. Соответственно Samba может его использовать, но не может как-либо изменить или обойти.
Для работы с расширенными атрибутами ФС потребуется очень похожий на acl
пакет утилит — attr
, поставить который можно командой
sudo aptitude install attr
Для просмотра расширенных атрибутов можно использовать команду
getfattr file
А для установки
setfattr [options] file
Однако тут есть одна небольшая загвоздка. Дело в том, что Samba хранит всю информацию о наследовании в бинарном виде в единственном расширенном атрибуте user.SAMBA_PAI
. Поэтому поменять что-то с помощью setfattr
вам не удастся, только разве что полностью удалить расширенные атрибуты (иногда такое может потребоваться сделать).
Ну а управлять наследованием прав вам придётся с Windows машины с помощью штатных инструментов этой системы. Либо же с помощью утилиты smbcacls
, если вы разберётесь, как ей пользоваться.
Существует так же экспериментальный VFS модуль acl_xattr, который позволяет хранить NT ACL полностью в расширенных атрибутах. К сожалению, документации по нему нет, поэтому что-то вразумительное сказать по его поводу сложно. Ожидается, что в Samba 4 будет полная интегрированная поддержка NT ACL, а пока что можно пользоваться тем, что есть.
Если вам есть что добавить по поводу расширенных атрибутов в Samba и методах работы с ними — обязательно напишите в эту тему на форуме. Буду благодарен за любые ссылки, статьи и комментарии по теме.
Кроме того, расширенные атрибуты файловой системы позволяют включить в Samba полную поддержку файловых атрибутов DOS, таких как скрытый, архивный и пр.
Итак, будем считать что у вас есть в системе каталог, который вы хотите расшарить через Samba (и он находится на диске, подмонтированном с поддержкой acl и user_xattr). Теперь необходимо собственно настроить его расшаривание. Для этого нужно внести соответствующую информацию в файл /etc/samba/smb.conf
.
Начнём с общих настроек, которые можно добавить в секцию [global]
этого файла (это далеко не все возможные параметры, просто несколько достаточно полезных из них):
# Отключить расшаривание принтеров. Если вы конечно и вправду не хотите их расшаривать. # Для полного отключения нужно указывать все 4 строки, приведённых ниже load printers = no show add printer wizard = no printcap name = /dev/null disable spoolss = yes # Сделать скрытыми при просмотре с Windows файлы со следующими именами hide files = /$RECYCLE.BIN/desktop.ini/lost+found/Thumbs.db/ # Использовать для шар с публичным доступом следующего UNIX пользователя в качестве Guest guest account = nobody # Воспринимать как guest незарегистрированных пользователей map to guest = Bad User ## Настройки, использующие расширенные атрибуты файловой системы # Обрабатывать наследования прав с помощью расширенных атрибутов ФС map acl inherit = yes # Использовать расширенные атрибуты ФС для хранения атрибутов DOS store dos attributes = yes # Отключить маппинг DOS атрибутов на UNIX права, включённый по умолчанию # Согласно man smb.conf при использовании расширенных атрибутов эти опции обязаны быть отключены map archive = no map system = no map hidden = no map readonly = no
Теперь настройки непосредственно расшаренного ресурса. У меня он называется profiles, а физически на Ubuntu машине находится по адресу /var/data/profiles:
[profiles] # Комментарий comment = User Profiles # Путь до папки, которую расшариваем path = /var/data/profiles/ # Пользователи с неограниченными правами доступа к шаре # У меня стоит группа администраторов домена. # Эти пользователи при работе с файлами воспринимаются как локальный root admin users = "@DOMAIN\Администраторы домена" # Скрыть папки, к которым у пользователя нет доступа hide unreadable = yes # Доступ не только на чтение read only = no # Маски для создаваемых файлов - можно задать по желанию #create mask = 0600 #directory mask = 0700 # Отключение блокировок - лучше отключить locking = no
Есть множество других опций — за подробностями стоит обратиться к документации по Samba.
Не забудьте поставить правильного владельца и права доступа на папку, которую вы расшариваете, а то несмотря на любые настройки самбы в неё может быть запрещена запись на уровне прав Linux. Я делаю обычно так:
sudo chmod ug+rwx /var/data/profiles sudo chown root:"пользователи домена" /var/data/profiles
Обратите внимание, так как ваша Ubuntu машина введена в домен, то вы можете использовать пользователей и группы домена в качестве владельцев файлов прямо в Ubuntu.
Проверьте правильность конфигурации Samba командой
testparm
После чего перезапустите Samba:
sudo /etc/init.d/samba restart
Теперь вы можете с любой машины домена получить доступ к расшаренному ресурсу.
Кстати, не забывайте про SGID и Sticky биты для каталогов. Они позволят вам наследовать группу-владельца и запрещать пользователям удаление не своих файлов — это может быть очень удобно для многопользовательских хранилищ. Однако в отличие от редактирования прав из Windows поменять эти биты на папках на расшаренном ресурсе не получится — только вручную непосредственно на Ubuntu компьютере.
Кроме всего прочего Samba позволяет организовывать хранение предыдущих версий файлов, что бывает иногда полезно при создании общих ресурсов с пользовательскими данными. Подробности в соответствующей статье:
Домен Active Directory есть далеко не у всех. Поэтому часто возникает необходимость организовать на Linux машине автономное файловое хранилище со своей собственной системой авторизации. Это сделать очень просто.
Основной особенностью такой организации файлового хранилища будет то, что вся информация о пользователях будет храниться в базе данных Samba, соответственно добавлять и удалять пользователей на самбу надо будет вручную.
Самое главное — определиться с используемым способом доступа к ресурсу. Для его изменения надо правильно установить значение параметра security
в секции [global]
файла /etc/samba/smb.conf
. Подробней об этом параметре можно почитать тут или же в официальной документации.
Обычно используется значение share
или user
.
Далее не забудьте поменять значение параметра workgroup
на нужное, а все остальные настройки сильно зависят от ваших целей.
Подробнее настройка простого файлового сервера описана в основной статье про Samba.
Для дома удобно чтобы все видели всех. Это можно сделать если добавить 4 строчки в секцию [global] файла /etc/samba/smb.conf. Некоторые могут уже существовать.
[global] workgroup = WORKGROUP map to guest = Bad User netbios name = NOTEBOOK security = user
NOTEBOOK — имя компьютера которое будет в сети.
Кроме этого надо установить дополнительные программы :
sudo apt-get install samba
Для kubuntu надо еще установить smb4k .
После редактирования конфигов надо перезапустить службы. В systemd (начиная с 15.04) перезапуск выглядит так:
sudo systemctl restart smbd.service nmbd.service
Посмотреть «шары» можно через файловый броузер nautilus, konkueror или так:
smbclient -L 127.0.0.1
. Официальная документация на английском.
Samba — ПО на Linux для организации общего доступа к файлам в среде Windows. Серверная часть открывает общий доступ к папкам Ubuntu для внешних пользователей. Клиентская часть позволяет получить доступ к сетевым папкам samba.
Есть у меня аппаратный сервер с операционной системой Ubuntu Server 18.04.5 LTS. На сервере имеется большой том, который планируется использовать в качестве файлового хранилища.
Установка Ubuntu Server 18.04.5 LTS на сервер Dell PowerEdge R740xd2
IP и DNS
Серверу назначен прямой IP адрес, hostname внесён в DNS сервер. Причём DNS сервер для Linux машин отдельный от доменного, но оба они умеют резолвить адреса друг друга. Подробно на этом не будем останавливаться.
AD аутентификация
В операционной системе уже настроена доменная аутентификация, можно логиниться на сервер под учётной записью Active Directory, права доступа тоже управляются с помощью доменных групп. Аутентификацию на сервере не я настраивал, поэтому описывать процесс подробно не буду. Скажу только, что доменную аутентификацию можно сделать разными способами. Читайте про krb5-user (пакет для протокола Kerberos, который используется для аутентификации в Windows) и/или winbind (позволяет использовать учетную запись пользователя из Active Directory). Я winbind не использую.
Проверить аутентификацию:
kinit v.pupkin@ILAB.LOCAL
klist
NTP
Время должно быть синхронизировано. Если расхождение по времени больше пяти минут, то мы не получим тикет от Kerberos. В общем, аутентификация не заработает. Не буду описывать процесс настройки ntp.
Ссылки
https://www.samba.org/samba/docs/current/man-html/smb.conf.5.html
Установка samba
apt-get install samba
Самба настраивается в файле /etc/samba/smb.conf. Старый файл можно переименовать в smb.conf.bak, чтобы подсматривать параметры по умолчанию:
Указываем глобальные настройки:
[global]
# домен и настройки SID
workgroup = ILAB
realm = ILAB.LOCAL
security = ads
idmap config * : backend = tdb
idmap config * : range = 1300000-1999999
idmap config ILAB : backend = rid
idmap config ILAB : read only = yes
idmap config ILAB : range = 100000-999999
# представляемся
server string = %h server (Samba, Ubuntu)
# логирование
log file = /var/log/samba/log.%m
max log size = 1000
log level = 1
# письмо при краше
panic action = /usr/share/samba/panic-action %d
# пароли и аутентификация (многое здесь мне непонятно и в AD не используется)
passdb backend = tdbsam
obey pam restrictions = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n password\supdated\ssuccessfully* .
pam password change = yes
# убираем DNS проксирование
dns proxy = no
# не мешаем контроллерам домена
domain master = no
local master = no
preferred master = no
# отключаем принтеры
load printers = no
printing = bsd
show add printer wizard = no
printcap name = /dev/null
disable spoolss = yes
# убираем гостей и папки пользователей
usershare max shares = 0
usershare allow guests = no
Здесь:
- workgroup — NETBIOS ИМЯ ДОМЕНА (или РАБОЧАЯ ГРУППА, если нет домена), в заглавном регистре
- realm — ДОМЕН, в заглавном регистре
- server string — имя сервера, которое будет отображаться в сетевом окружении
- log file — логи
- max log size — размер логов
- log level — уровень логирования
- panic action — действия при краше самбы, по умолчанию отправляет письмо админу
- passdb backend — место хранения паролей
- obey pam restrictions — поддержка PAM аутентификации, непонятно зачем она включена по умолчанию, потому что PAM аутентификация не может использоваться при «encrypt passwords = yes», а encrypt passwords при этом устарел и по умолчанию включен.
- unix password sync — синхронизация паролей пользователей samba с локальными паролями, в AD не работает
- passwd program — программа для синхронизации паролей, в AD не работает
- passwd chat — текст для работы с паролями, в AD не работает
- pam password change — поддержка смены пароля в PAM
- security = ads — поддержка AD, самба ведёт себя как член домена.
- dns proxy — обращаться ли к DNS для определения DNS имени по NETBIOS имени.
- domain master — главный обозреватель домена
- local master — главный обозреватель подсети
- preferred master — предпочтительный обозреватель домена
- load printers — загружать принтеры
- printing — интерпретация статуса принтеров
- show add printer wizard — отображать иконку добавления принтера
- printcap name — определение списка принтеров
- disable spoolss — поддержка SPOOLSS (для принтеров)
- usershare max shares — папки пользователей
- usershare allow guests — папки гостей
- idmap config — настройки сопоставления SID с пользователями и группами POSIX
Давайте расшарим какую-нибудь папку, например, /u01/cron/, создаю её.
Назначаю владельца и группу папки (пользователь и группа доменные!)
Добавляем секцию в /etc/samba/smb.conf:
[bck-cron-u01]
path = /u01/cron
valid users = cron v.pupkin p.vupkin
read list = cron v.pupkin p.vupkin
write list = cron v.pupkin p.vupkin
read only = no
Здесь:
- [NAME] — имя шары
- path — путь к папке
- valid users — кому можно войти
- read list — кто имеет права на чтение
- write list — кто имеет право на запись
- read only — только чтение
Пример конфига:
После изменения файла smb.conf не помешает проверить его утилитой testparm:
testparm
Перезагружаем службу:
service smbd restart
Добавим сервер в домен:
net ads join -U v.pupkin -D ILAB.LOCAL
В случае успеха увидим что-то типа:
Using short domain name — DOMAIN
Joined 'SERVER' to realm 'domain.local'
У меня надпись немного другая:
Сервер в домен добавился, но не прописался в DNS. В моём случае это нормально, потому как сервер прописан в DNS другой зоны, отличной от доменной. В AD сразу переношу его из папки Computers в нужный мне организационный юнит.
Дадим 10 минут на распространение DNS зон, проверяем:
Шара доступна.