Linux файловый сервер в домене windows

В данной статье будет рассмотрен вариант развёртывания файлового сервера 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 После этого перезагружаем сервер:

Установка 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. Если не отобразилась информация об ошибке, то запрос прошёл верно и можно проверить результат:

Настройка 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 выполняем проверку:

Взаимодействие 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 #». Источник

Файловый сервер для Windows

На Ubuntu очень легко развернуть файловый сервер для Windows машин. Стандартное применение такого сервера — организация файловых хранилищ в рамках Active Directory домена. Однако легко можно создавать файловые сервера и в бездоменной сети, например — для домашнего использования. В любом случае вам потребуется как минимум Samba, установить которую можно через менеджер пакетов Synaptic или командой

Файловый сервер в составе домена Active Directory

Для того, чтобы создать файловый сервер, интегрированный в домен Active Directory, вам в первую очередь потребуется ввести вашу машину с Ubuntu в домен. Этому посвящена отдельная статья: После успешного входа в домен вам останется всего лишь настроить расшаренные ресурсы на вашем компьютере. Тут стоит сразу обратить внимание на одну очень важную вещь: Samba пытается спроецировать права на файлы Windows на права Unix, однако из-за кардинальных различий в механизмах присвоения прав сделать это не всегда возможно. Учтите, что права на файлы всегда и в любом случае контролируются вашей файловой ситемой на компьютере с Ubuntu, самба может лишь подстраиваться под них, но не менять их поведение. Поэтому по умолчанию на расшаренных ресурсах будут весьма скудные возможности контроля доступа — назначение разных прав для пользователя, группы и всех остальных. Однако это легко исправить, добавив в вашу ФС поддержку POSIX ACL . В этом случае можно будет назначать различные права различным пользователям и группам практически как в Windows. Например, я всегда использую для организации расшаренных ресурсов отдельные LVM диски и у меня строчки в fstab для них выглядят примерно так: Опция noexec нужна потому, что на шарах для Windows 100% не должно быть исполняемых файлов Linux, и лишний раз перестраховаться не помешает. Для работы с acl на Ubuntu необходимо установить пакет соответствующих утилит:

А установить командой Для работы с расширенными атрибутами ФС потребуется очень похожий на acl пакет утилит — attr , поставить который можно командой Для просмотра расширенных атрибутов можно использовать команду Однако тут есть одна небольшая загвоздка. Дело в том, что Samba хранит всю информацию о наследовании в бинарном виде в единственном расширенном атрибуте user.SAMBA_PAI . Поэтому поменять что-то с помощью setfattr вам не удастся, только разве что полностью удалить расширенные атрибуты (иногда такое может потребоваться сделать). Ну а управлять наследованием прав вам придётся с Windows машины с помощью штатных инструментов этой системы. Либо же с помощью утилиты smbcacls , если вы разберётесь, как ей пользоваться. Кроме того, расширенные атрибуты файловой системы позволяют включить в Samba полную поддержку файловых атрибутов DOS, таких как скрытый, архивный и пр. Итак, будем считать что у вас есть в системе каталог, который вы хотите расшарить через Samba (и он находится на диске, подмонтированном с поддержкой acl и user_xattr). Теперь необходимо собственно настроить его расшаривание. Для этого нужно внести соответствующую информацию в файл /etc/samba/smb.conf .

Начнём с общих настроек, которые можно добавить в секцию [global] этого файла (это далеко не все возможные параметры, просто несколько достаточно полезных из них): Теперь настройки непосредственно расшаренного ресурса. У меня он называется profiles, а физически на Ubuntu машине находится по адресу /var/data/profiles: Есть множество других опций — за подробностями стоит обратиться к документации по Samba. Не забудьте поставить правильного владельца и права доступа на папку, которую вы расшариваете, а то несмотря на любые настройки самбы в неё может быть запрещена запись на уровне прав Linux. Я делаю обычно так: Обратите внимание, так как ваша Ubuntu машина введена в домен, то вы можете использовать пользователей и группы домена в качестве владельцев файлов прямо в Ubuntu. Проверьте правильность конфигурации Samba командой После чего перезапустите Samba:

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

Автономный файловый сервер

Домен Active Directory есть далеко не у всех. Поэтому часто возникает необходимость организовать на Linux машине автономное файловое хранилище со своей собственной системой авторизации. Это сделать очень просто. Основной особенностью такой организации файлового хранилища будет то, что вся информация о пользователях будет храниться в базе данных Samba, соответственно добавлять и удалять пользователей на самбу надо будет вручную. Самое главное — определиться с используемым способом доступа к ресурсу. Для его изменения надо правильно установить значение параметра security в секции [global] файла /etc/samba/smb.conf . Подробней об этом параметре можно почитать тут или же в официальной документации. Обычно используется значение share или user . Далее не забудьте поменять значение параметра workgroup на нужное, а все остальные настройки сильно зависят от ваших целей.

Автономный файловый сервер без авторизации

Для дома удобно чтобы все видели всех. Это можно сделать если добавить 4 строчки в секцию [global] файла /etc/samba/smb.conf. Некоторые могут уже существовать. NOTEBOOK — имя компьютера которое будет в сети. Кроме этого надо установить дополнительные программы : Для kubuntu надо еще установить smb4k . После редактирования конфигов надо перезапустить службы. В systemd (начиная с 15.04) перезапуск выглядит так: Посмотреть «шары» можно через файловый броузер nautilus, konkueror или так: Источник

Управление доступом к файловым серверам Samba в домене Windows на базе AD

Мы продолжаем серию статей про взаимодействие Linux и Windows. Эта статья посвящена управлению доступом к серверам Samba из домена AD. В отличие от предыдущих статей, где в качестве примера использовалась тестовая сеть, эта статья базируется на реальной, «боевой» сети Московского энергетического института. В сети МЭИ зарегистрировано около 25000 пользователей. Сеть объединяет все учебные корпуса МЭИ с более чем 4500 рабочими станциями. Мы рассмотрим настройку доступа к серверу Samba, предоставляющему пользователям следующие услуги:
•доступ к персональному каталогу пользователя;
•доступ к общим каталогам;
•управление доступом как с использованием средств Samba, так и с использованием средств Windows.

Про сеть МЭИ

Информационно-вычислительная сеть Московского энергетического института (ИВС МЭИ) использует доменную структуру Windows на базе AD. Наша сеть поддерживает несколько доменов. Доменом верхнего уровня является домен mpei.local. Домен public.mpei.local предназначен для пользователей МЭИ, домен init.mpei.local предназначен для сотрудников Информационно-вычислительного центра МЭИ.
Сервер, который мы настраиваем, представляет собой кластерное файловое хранилище и предназначен для размещения каталогов пользователей — сотрудников ИВЦ МЭИ и сотрудников МЭИ (пользователи домена INIT и PUBLIC) и общих каталогов. Операционная система сервера — Ubuntu Linux 12.04 LTS.
Backups Предназначен для хранения резервных копий. Доступ к каталогу имеют администраторы доменов.
Каталоги ISOs и Software Предназначены для хранения образов дисков дистрибутивов операционных систем и другого программного обеспечения, используемого в ИВС МЭИ. Информация, размещенная в этих каталогах, доступна всем пользователям, но запись разрешена только администраторам доменов.
Каталог VMImages Предназначен для хранения образов виртуальных машин, применяемых в ИВС МЭИ. Этот каталог доступен всем пользователям, запись разрешена только администраторам доменов.
Каталоги пользователей Предназначены для размещения файлов пользователей. Кластерное файловое хранилище создано на основе распределенного объектового хранилища и файловой системы Ceph. Более подробно о Ceph можно прочесть на сайте проекта — www.ceph.com. В состав хранилища входят три сервера, которые одновременно являются хранилищами объектов и управляют размещением данных. Доступ к файловой системе хранилища осуществляется через шлюз, который является клиентом хранилища Ceph с одной стороны, а с другой — предоставляет доступ к этому хранилищу через Samba. Шлюзовая машина представляет собой виртуальную машину на базе KVM, работающую на серверах с Ceph. Именно эта шлюзовая машина и будет тем сервером, который мы настраиваем для организации доступа. Операционная система — тоже Ubuntu Linux 12.04 LTS. Наш сервер называется filer.mpei.local. Способ организации кластерного файлового хранилища не является определяющим для решения задачи управления доступом. Для создания такого хранилища могут быть использованы самые различные технологии и их реализации. Необходимо отметить, что в нашей сети зарегистрировано большое количество пользователей — около 25000. Поэтому создание каталогов для них является весьма трудоемкой задачей. При этом далеко не все пользователи будут иметь свои каталоги на файловом хранилище. Отсюда следует, что создание каталогов должно производиться автоматически, при первом соединении пользователя с сервером. Способ автоматического создания каталогов пользователей при использовании командной оболочки Linux рассматривался ранее в статье про настройку CentOS. В нашем случае такой метод неприменим, поскольку институтская сеть объединяет пользователей с различным опытом работы и знанием операционных систем. Создание каталога при первом подключении должно быть прозрачно для пользователя и не зависеть от операционной системы сервера. Способ включения сервера Samba на базе Ubuntu Linux уже рассматривался раньше. Мы включаем наш сервер в домен верхнего уровня mpei.local. Для авторизации пользователей мы будем использовать winbind. Поскольку у нас используется несколько доменов, то целесообразно в разделе глобальной конфигурации Samba в файле smb.conf указать: Отключив эту опцию, мы поясняем Samba, что пользователи без указания доменного имени будут рассматриваться как локальные пользователи сервера, а для остальных случаев необходимо указывать доменное имя. Это необходимо сделать, поскольку пользователи могут иметь совпадающие имена в различных доменах.

При правильном включении сервера filer в домен в ответ на запрос getent passwd мы должны увидеть список пользователей всех доменов, а в ответ на запрос getent group — список групп всех доменов. Если это не так, следует проверить содержимое файла /etc/nsswitch.conf, который должен выглядеть так: Следует проверить, как авторизуются пользователи Samba. Для этого посмотрим содержимое файла /etc/pam.d/samba: Как видно, файл очень простой и состоит из ссылок на файлы /etc/pam.d/common-auth, /etc/pam.d/common-account и /etc/pam.d/common-session-noninteractive.
Соответственно, следует проверить и содержимое этих файлов, на предмет использования ими модуля pam_winbind.so. В подавляющем большинстве случаев нет необходимости править содержимое файлов системы PAM, расположенных в /etc/pam.d. Но у нас есть требование автоматического создания каталогов пользователей при первом входе в систему. Для нашей конфигурации в файл /etc/pam.d/common-session-noninteractive нужно добавить строку Можно включить эту строку и в файл /etc/pam.d/common-session. Наличие этой строки вызывает модуль pam_mkhomedir.so (более подробно можно прочесть на http://manpages.ubuntu.com/manpages/maverick/man8/pam_mkhomedir.8.html или http://www.ibm.com/developerworks/ru/library/l-pam/index.html) для автоматического создания домашнего каталога пользователя при входе в систему.
В результате вывод команды getent passwd должен выглядеть примерно так: Поля соответствуют полям файла /etc/passwd, стандартного места хранения данных о пользователях в системах Linux и Unix. Поля именуются так:
•login name
•optional encrypted password
•numerical user ID
•numerical group ID
•user name or comment field
•user home directory
•optional user command interpreter
При подключении к домену Windows на базе AD поле login name представляет собой комбинацию имени домена и имени пользователя, где разделителем является либо обратный слэш (\), либо символ, определенный в опции winbind separator.
Поле password представляется символом *, что означает внешний источник паролей.
Значения полей UID и GID формируются на основе опций idmap uid и idmap gid (или idmap config) файла конфигурации Samba.
Поле user home directory формируется на основе опции template homedir файла конфигурации Samba. А поле user command interpreter — на основе значения опции template shell файла конфигурации Samba. На основании этого вывода мы можем сказать, что домашний каталог для пользователя khorkov в домене PUBLIC будет /ceph/home/PUBLIC/khorkov. Именно этот каталог и должен автоматически создаваться. Таким образом, наш файл /etc/samba/smb.conf в разделах global и homes выглядит следующим образом: Большая часть параметров уже рассматривалась в предыдущих статьях (например, http://habrahabr.ru/post/171057/ или http://habrahabr.ru/post/143190/). Остановимся подробнее на тех опциях, которые имеют значение для безопасности и управления доступом.

Опция obey pam restrictions = yes дает директиву серверу Samba подчиняться указаниям, изложенным в директивах pam для учетных записей пользователей и сессий. В нашем случае — мы согласны с командой на создание домашнего каталога.
Опции acl compatibility = auto и map acl inherit = yes разрешают серверу Samba устанавливать режим совместимости списков доступа к файлам и наследование списков доступа. Эти параметры имеют важное значения для поддержки Samba управления доступом от Windows-клиентов. Для корректной работы необходимо, чтобы файловая система, на которой размещен разделяемый ресурс Samba, поддерживала POSIX ACL. Для этого необходимо установить соответствующие пакеты в Linux (для Ubuntu это acl и attr). Далее, в секции [homes] определяются каталоги пользователей. Путь к каталогам определяется опцией path. В файле конфигурации Samba действуют правила подстановки. В частности, %D заменяется на краткое имя домена, %U — на имя пользователя, %S — на имя сессии (совпадает с именем пользователя). Доступ к каталогам определяется для чтения-записи, о чем говорит опция read only = no. Опция valid users описывает список пользователей, которым разрешен доступ (регистрация) к этому каталогу. Важное значение имеют опции create mask (маска прав при создании файла) и directory mask (права при создании каталога). В любом случае владельцем домашнего каталога, создаваемых файлов и каталогов будет пользователь, соединившийся с ресурсом. При этом uid и gid пользователя определяются в соответствии с результатом команды getent passwd. Учтите, что в 99% случаев имя группы будет \Domain users. Указанные значения 0700 дают пользователю полные права на доступ к файлам или каталогам и запрещают доступ всем остальным (в том числе и группе). Для разрешения доступа группе на чтение третий октет должен быть равен либо 4 (чтение), либо 5 (чтение и исполнение). Об определении прав доступа в Linux можно прочесть в любой книге по этой операционной системе.
Значения опции valid users ограничивает список пользователей, имеющих доступ к каталогу, пользователями доменов INIT и PUBLIC. Теперь перейдем к настройкам общих каталогов на примере настройки каталога Software: Описание пути к разделяемому каталогу и ограничения для пользователей мы уже рассматривали. Опция nt acl support = yes дает директиву Samba отображать права доступа Windows на права доступа Linux. Опции inherit acls = yes, inherit owner = yes, inherit permissions = yes и map acl inherit = yes указывает на поддержку Samba наследования прав и списков доступа. Опция hide unreadable = yes скрывает от пользователя нечитаемые каталоги и файлы.
Опция admin users задает список пользователей, имеющих административные права (права суперпользователя). Опция write list задает список пользователей, имеющих права записи в этот каталог. При создании каталога следует определить его принадлежность. Большей частью достаточно владельцем назначить root, а группу определить как Domain users (в нашем случае — как MPEILOCAL\Domain users). Списки пользователей могут задаваться как в виде DOMAIN\user (пользователи домена), так и в виде user (пользователи самого сервера). Можно задавать их и в виде наименований групп, предваряя имя группы символом @. В списке поля разделяются пробелами. Имена групп Windows, в случае, когда они состоят из более чем одного слова, следует заключать в кавычки. В нашем примере мы дали разрешение на чтение каталога Software всем пользователям доменов MPEILOCAL, INIT и PUBLIC, а право на запись — для администраторов доменов. Остальные каталоги (Backups, ISOs и VMimages) настраиваются аналогично вышеприведенному примеру. Подключимся к серверу filer (рис. 1).
Рис. 1. Доступ к серверу Samba.

Проверим доступ к домашнему каталогу (рис. 2).
Рис. 2. Доступ к домашнему каталогу. Можно проверить права доступа на создание и удаление файлов и каталогов. Домашний каталог с точки зрения Linux выглядит следующим образом: Как видим, права на любые действия с файлами принадлежат только владельцу. Если сейчас попытаться внести изменения в настройки доступа средствами Windows, то мы получим ошибку о запрете записи (рис. 3).
Рис. 3. Ошибка задания прав. Эта ошибка задания прав на каталог, к которому пользователь имеет все права, возникает потому, что файловая система, где размещен каталог, не поддерживает списки доступа. На файловой системе с поддержкой списков доступа такой ошибки не возникает. Проверить наличие этой поддержки можно командой: Здесь мы видим, что файловая система на устройстве /dev/sda1 поддерживает управление доступом. Включение поддержки acl возможно при монтировании файловой системы Linux, либо через утилиту tune2fs. Список файловых систем, поддерживающих acl, можно узнать в справочном руководстве (man) по команде mount в разделе FILESYSTEM SPECIFIC MOUNT OPTIONS.
Можно посмотреть и сами списки доступа, командой

Для задания списков доступа из командной строки Linux можно воспользоваться командой setfacl или командой smbcacls. Правда, интерфейс этих команд достаточно сложный, и целесообразнее использовать окно настроек доступа Windows. Мы предоставляли управление доступом к серверу Samba в основном через редактирование файла /etc/samba/smb.conf. Это один из самых простых и эффективных способов. Существует масса графических приложений для настройки Samba, поставляемых вместе с дистрибутивом Linux. Можно также использовать web-средства управления, такие как swat или webmin. Достоинством swat, например, является встроенная документация — не нужно постоянно переключаться между настройками и справочным руководством. Но и swat, и webmin грешат ошибками в настройках.

Заключение

Таким образом, мы успешно выполнили задачу по настройке доступа к файловому серверу Samba в домене Windows на базе AD. Работа выполнена на базе Информационно-вычислительного центра МЭИ. Мы будем рады вашим замечаниям и предложениям. У нас есть возможности собрать тестовую сеть, на которой отладить различные варианты и конфигурации систем для обеспечения их взаимодействия. Источник