Файловый сервер samba в домене windows

Время на прочтение
10 мин

Количество просмотров 97K

Мы продолжаем серию статей про взаимодействие 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 указать:

winbind use default domain = no

Отключив эту опцию, мы поясняем Samba, что пользователи без указания доменного имени будут рассматриваться как локальные пользователи сервера, а для остальных случаев необходимо указывать доменное имя. Это необходимо сделать, поскольку пользователи могут иметь совпадающие имена в различных доменах.

При правильном включении сервера filer в домен в ответ на запрос getent passwd мы должны увидеть список пользователей всех доменов, а в ответ на запрос getent group — список групп всех доменов. Если это не так, следует проверить содержимое файла /etc/nsswitch.conf, который должен выглядеть так:

 root@filer:~# cat /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat winbind
group:          compat winbind
shadow:         compat
hosts:          files dns
networks:       files
protocols:      db files
services:       db files
ethers:         db files
rpc:            db files
netgroup:       nis
root@filer:~#

Следует проверить, как авторизуются пользователи Samba. Для этого посмотрим содержимое файла /etc/pam.d/samba:

root@filer:~# cat /etc/pam.d/samba
@include common-auth
@include common-account
@include common-session-noninteractive
root@filer:~#

Как видно, файл очень простой и состоит из ссылок на файлы /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 нужно добавить строку

session 	required                 pam_mkhomedir.so skel=/etc/skel umask=0077

Можно включить эту строку и в файл /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 должен выглядеть примерно так:

PUBLIC\khorkov:*:28972:10007:Хорьков Сергей Николаевич:/ceph/home/PUBLIC/khorko :/bin/bash

Поля соответствуют полям файла /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 выглядит следующим образом:

[global]
        log file = /var/log/samba/log.%m
        obey pam restrictions = yes
        map to guest = bad user
        encrypt passwords = true
        dns proxy = no
        netbios name = Filer
        server string = %h server (Samba, Ubuntu)
        unix password sync = yes
        workgroup = MPEILOCAL
        os level = 20
        security = ads
        syslog = 4
        panic action = /usr/share/samba/panic-action %d
        usershare allow guests = yes
        max log size = 1000
        pam password change = yes
        realm = MPEI.LOCAL
        idmap uid = 10000-50000
        idmap gid = 10000-50000
        template shell = /bin/bash
        template homedir = /ceph/home/%D/%U
        winbind enum groups = yes
        winbind enum users = yes
        winbind refresh tickets = yes
        acl compatibility = auto
        map acl inherit = yes
        usershare path = /var/lib/samba/usershares
[homes]
   comment = Home Directories
   browseable = no
    path = /ceph/home/%D/%U
   read only = no
   create mask = 0700
   directory mask = 0700
   valid users = PUBLIC\%S INIT\%S

Большая часть параметров уже рассматривалась в предыдущих статьях (например, 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:

[Software]
        browseable = yes
        comment = Various soft
        read only = yes
        valid users = MPEILOCAL\%U  PUBLIC\%U  INIT\%U
        path = /ceph/data/Software
        inherit acls = yes
        inherit owner = yes
        inherit permissions = yes
        map acl inherit = yes
        nt acl support = yes
        write list = @"MPEILOCAL\enterprise admins" @"PUBLIC\Domain admins" @"IN
IT\Domain admins"  PUBLIC\khorkov
        admin users = PUBLIC\khorkov
        hide unreadable = yes

Описание пути к разделяемому каталогу и ограничения для пользователей мы уже рассматривали. Опция 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 выглядит следующим образом:

root@filer:~#
root@filer:~# ls -l /ceph/home/PUBLIC/khorkov
total 0
drwx------ 1 PUBLIC\khorkov PUBLIC\domain users 45360157 Oct 11 19:36 For Cisco
root@filer:~#

Как видим, права на любые действия с файлами принадлежат только владельцу. Если сейчас попытаться внести изменения в настройки доступа средствами Windows, то мы получим ошибку о запрете записи (рис. 3).


Рис. 3. Ошибка задания прав.

Эта ошибка задания прав на каталог, к которому пользователь имеет все права, возникает потому, что файловая система, где размещен каталог, не поддерживает списки доступа. На файловой системе с поддержкой списков доступа такой ошибки не возникает. Проверить наличие этой поддержки можно командой:

root@filer:~# tune2fs -l /dev/sda1
tune2fs 1.42 (29-Nov-2011)
Filesystem volume name:   <none>
Last mounted on:          /
Filesystem UUID:          e4136579-9486-4e54-a8cf-6b28d4015e92
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux

Здесь мы видим, что файловая система на устройстве /dev/sda1 поддерживает управление доступом. Включение поддержки acl возможно при монтировании файловой системы Linux, либо через утилиту tune2fs. Список файловых систем, поддерживающих acl, можно узнать в справочном руководстве (man) по команде mount в разделе FILESYSTEM SPECIFIC MOUNT OPTIONS.
Можно посмотреть и сами списки доступа, командой

root@filer:~# getfacl /srv
getfacl: Removing leading '/' from absolute path names
# file: srv
# owner: root
# group: root
user::rwx
user:MPEILOCAL\134horkovsn:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:MPEILOCAL\134horkovsn:rwx
default:group::---
default:mask::rwx
default:other::---

root@filer:~#

Для задания списков доступа из командной строки Linux можно воспользоваться командой setfacl или командой smbcacls. Правда, интерфейс этих команд достаточно сложный, и целесообразнее использовать окно настроек доступа Windows.

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

Заключение

Таким образом, мы успешно выполнили задачу по настройке доступа к файловому серверу Samba в домене Windows на базе AD.

Работа выполнена на базе Информационно-вычислительного центра МЭИ.

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

Краткое руководство по установке и первоначальной настройке файлового сервера 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 и Администраторы домена — права на чтение и запись.

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

Kerberos5 install

Проверяем доступность контроллера домена:

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

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

testparm

Взаимодействие Samba с доменом Windows

Если ошибок не обнаружено, то подключаем сервер к домену:

sudo net ads join -U Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.

ads join

В случае отсутствия ошибок проверяем наличия сервера в списке компьютеров домена на стороне контроллера.

2ubuntu 16

Перезагружаем сервис Winbind:

service winbind restart

Проверяем связь с контроллером домена, а затем список пользователей и групп домена Windows:

wbinfo --ping-dc
wbinfo -u
wbinfo -g

ping вс

Чтобы UBUNTU могла использовать не только локальные группы и пользователей, но и доменные данные, нужно отредактировать настройки диспетчера службы имен NSS (Name Services Switch)

sudo nano /etc/nsswitch.conf

Необходимо дописать следующие значения:

passwd: compat winbind
group: compat winbind

После этого можно проверить возможность просмотра пользователей и групп:

getent passwd adm
getent group "пользователи домена"

getent

Добавляем папку общего ресурса:

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"

rpc rights list

Теперь управлять разрешениями для общих ресурсов можно удалённо с сервера 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/

Profile picture for user Олег

Ubuntu

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, чтобы подсматривать параметры по умолчанию:

samba

Указываем глобальные настройки:

[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/, создаю её.

samba

Назначаю владельца и группу папки (пользователь и группа доменные!)

samba

Добавляем секцию в /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

samba

Перезагружаем службу:

service smbd restart

Добавим сервер в домен:

net ads join -U v.pupkin -D ILAB.LOCAL

В случае успеха увидим что-то типа:

Using short domain name — DOMAIN
Joined 'SERVER' to realm 'domain.local'

У меня надпись немного другая:

samba

Сервер в домен добавился, но не прописался в DNS. В моём случае это нормально, потому как сервер прописан в DNS другой зоны, отличной от доменной. В AD сразу переношу его из папки Computers в нужный мне организационный юнит.

samba

Дадим 10 минут на распространение DNS зон, проверяем:

samba

Шара доступна.

Я думаю у многих админов возникает задача организации файлового сервера для рабочих станций Windows. Сегодня будет показано, как это организовать при наличии контроллера домена на базе свзки samba + ldap. Итак, приступим.

Считаем, что samba домен уже настроен, например, как здесь. Поднимать файл-сервер будем на CentOS 6. Главное требование — это разделение прав доступа на сервере, поэтому наш сервер будет тоже частью этого домена со всеми вытекающими.
Для начала установим следующие пакеты:

[root@server-DS ~]# yum install samba samba-common samba-winbind openldap openldap-clients nss-pam-ldapd

Выключим SELinux, хотя бы на время настройки. В файл /etc/sysconfig/selinux внесём такое изменение и перегрузим сервер:

SELinux=disabled

Изменяем /etc/hosts:

server_ip_address server-fs server-fs.example.net

Настроим /etc/nsswitch.conf:

passwd: files ldap
shadow: files ldap
group: files ldap
hosts: files dns wins

Теперь внесём необходимые изменения в конфигурационный файл /etc/nslcd.conf:

#какую версию ldap использовать
ldap_version 3
#число потоков, выполняющие запросы к серверу ldap
threads 20
#от чьего имени связываться с сервером ldap
binddn cn=authuser,dc=example,dc=net
bindpw secret
#базовый DN поиска
base dc=example,dc=net
#базовые DN для пользователей, паролей и групп
base group ou=Groups,dc=example,dc=net
base passwd ou=Users,dc=example,dc=net
base passwd ou=Computers,dc=example,dc=net
base shadow ou=Users,dc=example,dc=net
#область поиска
scope sub
scope passwd sub
#использовать TLS
ssl start_tls
tls_reqcert never
#пользователь и группа от имени которых будет запущен демон nslcd(только локальные)
uid nslcd
gid ldap
#адрес сервера ldap
uri ldap://ldap_server_ip_address/

Заметьте, что изменения в этом файле делаются в соответствии с настройками вашего контроллера домена. Здесь настройки задаются в соответствии с этим описанием. Не забудьте добавить пользователя authuser в базу openLDAP.
Запустим демон nslcd и добавим его а автозагрузку:

[root@server-DS ~]# /etc/init.d/nslcd start
[root@server-DS ~]# chkconfig nslcd on

и теперь система «видит» пользователей домена. Проверить это можно с помощью команды id:

[root@server-DS ~]# id sysadmin
uid=1025(sysadmin) gid=555(IT) группы=555(IT), 512(Domain Admins)

Позволим samba TLS соединения — добавим в файл /etc/openldap/ldap.conf:

TLS_REQCERT allow

Теперь займемся непосредственно настройкой самбы:

[global]
workgroup = example.net
netbios name = server-fs
security = domain
server string =
name resolve order = wins bcast hosts
printcap name = /dev/null
disable spoolss = yes
wins server = 192.168.10.253
interfaces = lo, eth1, eth0
bind interfaces only = yes
socket address =

#параметры подключения к ldap
passdb backend = ldapsam:»ldap://192.168.10.253″
ldap suffix = dc=example,dc=net
ldap machine suffix = ou=Computers
ldap user suffix = ou=Users
ldap group suffix = ou=Groups
ldap idmap suffix = ou=Idmap
ldap admin dn = cn=administrator,dc=example,dc=net
idmap backend = ldap:ldap://192.168.10.253
ldap ssl = start_tls

[documents]
path = /documents
inherit owner = no
inherit acls = yes
inherit permissions = yes
writable = yes

Это минимально необходимый список параметров для нормальной работы файл-сервера Samba в домене Samba. Если вам необходимы дополнительные параметры, вот здесь на русском языке почти полный перевод всех параметров файла /etc/samba/smb.conf.
Нам осталось ввести сервер в домен:

[root@server-DS ~]# net rpc join -U administrator
Enter administrator’s password:

задать пароль администратора, которого указали в «ldap admin dn»:

[root@server-DS ~]# smbpasswd -W
Setting stored password for «cn=administrator,dc=example,dc=net» in secrets.tdb
New SMB password:
Retype new SMB password:

и запустить samba:

[root@server-DS ~]# /etc/init.d/smb start && /etc/init.d/nmb start && /etc/init.d/winbind start
[root@server-DS ~]# chkconfig smb on && chkconfig nmb on && chkconfig winbind on

Заметка

Параметры подключения к базе ldap на сервере, являющимся членом домена, по большому счёту не нужны. Их выгода состоит в том, что во вкладке «Безопасность» контекстного меню свойств файлов или каталогов Windows будут отображаться группы и пользователи в нормальном виде, т.е. «example.net\Domain Admins». Если не использовать параметры ldap, то всё будет работать и без них, но во вкладке «Безопасность» будет отображаться «Unix group\Domain Admins».
Можно также не использовать winbind(пакет samba-winbind), но тогда вместо «example.net\Domain Admins» в той же вкладке «Безопасность» вы будете видеть только SID пользователя или группы, например, S-1-5-21-3954423230-3418645706-2461697144-512

Теперь можно удостоверится в нормальном функционировании файлового сервера samba как члена домена. Выполним тестовую авторизацию в домене:

[root@server-DS ~]# wbinfo -a sysadmin
Enter sysadmin’s password:
plaintext password authentication failed
Could not authenticate user sysadmin with plaintext password
Enter sysadmin’s password:
challenge/response password authentication succeeded

После первого запроса мы наблюдаем ошибку, но так должно быть, потому что на контроллере домена запрещена аутентификация паролем открытым текстом (client plaintext auth = no).
Просмотрим информацию о домене:

[root@server-DS ~]# wbinfo -D example.net
Name : EXAMPLE.NET
Alt_Name :
SID : S-1-5-21-3954423230-3418645706-2461697144
Active Directory : No
Native : No
Primary : Yes

Информацию о пользователях и группах домена можно просмотреть набрав в консоли wbinfo -u и wbinfo -g соответственно.

Остался один важный нюанс. Вся работа была затеяна с целью разделения прав доступа к документам на сервере. Традиционная модель контроля доступа Unix оперирует только тремя наборами разрешений — владелец, группа и остальные, что сильно ограничивает нас в возможностях, поэтому на помощь приходят так называемые ACL — списки контроля доступа. Они позволят нам назначать режим доступа не только для одной группы и владельца, а для множества групп и пользователей, что в общем-то похоже на механизм, которым обладают Windows-системы. Для того, чтобы ими воспользоваться, необходимо смонтировать файловую систему с указанием в опциях acl, например вот так:

LABEL=documents    /documents     ext4    defaults,acl      1 1

После того, как вы смонтировали файловую систему с нужной опцией, можете воспользоваться командами setfacl и getfacl для установки и просмотра списков контроля доступа. Например, разрешить группе «Domain Admins» чтение, запись и возможность перехода в каталог documents:

[root@server-DS ~]# setfacl -m -g:»Domain Admins»:rwx /documents

Теперь вы можете смело размещать документы и гибко управлять правами доступа к ним используя линуксовый файловый сервер.

  • Файлы не открываются после переустановки windows
  • Файловая структура операционной системы windows
  • Файловый редактор для windows 10
  • Файловый сервер на windows server 2019 настройка
  • Файлы которые можно удалить в windows 10