Настройка samba на ubuntu server
Содержание:
Введение
Ранее я рассказывал как сделать очень простую и быструю настройку самбы, когда доступ ограничивается либо внутренними пользователями самбы, либо с помощью ip. Если вас такой формат эксплуатации файлового сервера устраивает, то читать дальше не обязательно. Используйте приведенную статью, и у вас все получится очень быстро.
Для более сложной настройки самбы с авторизацией в Active Directory будем разбираться дальше. Существует как минимум 2 способа добавления linux сервера в домен Windows Server:
- Использовать известное и универсальное средство winbind.
- Либо воспользоваться менее популярным, но как мне кажется, более удобным и простым в настройке — sssd.
Пример добавления linux сервера в домен с помощью winbind я приводил в одной из своих статей по . Утилиту sssd я использовал, когда настраивал авторизацию в linux с помощью доменный учетных записей. В этой статье я воспользуюсь sssd для интеграции в виндовый домен.
Если у вас еще нет готового сервера, то можете воспользоваться моими материалами на эту тему — установка и настройка centos 7. Так же рекомендую настроить iptables для корректной работы сервера с доменом windows. Далее я не буду касаться этого вопроса, мы просто отключим фаерволл, потому что его настройка не тема этой статьи.
Настраивать файловую шару samba будем на сервере под управлением CentOS 7 следующей версии:
Вводные слова я все сказал. Начнем настройку самбы с ввода сервера в домен.
Проверка настроек
Теперь, когда всё настроено, нужно выполнить ряд проверок, чтобы убедиться в корректной работе всех компонентов Samba.
Общая проверка выполняется командой testparm:
Нажмите для раскрытия…
Посредством команд hosts и wbinfo можно провести ряд проверок, результат выполнения которых должен быть без ошибок:
Прочие проверки, которые могут пригодиться для отладки:
Администрирование
Если все проверки пройдены и никаких ошибок не возникло, можно приступать к использованию домена.
Можно посмотреть общую информацию о домене:
Проверить список дефолтных юзеров через wbinfo или samba-tool:
И список групп:
А также список компьютеров (пока что только один КД):
Создание пользователя:
Задать ему пароль:
Деактивировать пользователя:
Прочие команды можно посмотреть, выполнив:
через samba-tool также настраивается DNS.
Настройку и управление также можно осуществлять посредством RSAT, т.е. классическими виндовыми оснастками, но мне больше нравится консольный вариант непосредственно с самого сервера Samba.
Бэкап
В официальной документации подробно всё описано, поэтому первоначально стоит ознакомиться с информацией там.
После настройки благоразумно будет обеспечить резервное копирование Samba. Есть несколько типов резервирования: “Online” и “Offline”.
Online делает копию работающей базы DC:
Offline создает резервные копии файлов Samba:
Каждая команда создает файл резервной копии .tar.bz2, который содержит полную резервную копию домена (на основе данного DC). Затем файл резервной копии можно использовать для восстановления домена с помощью команды «samba-tool domain backup restore».
Использовать ту или иную схему бэкапа нужно в зависимости от ситуации. В обычных случаях Online-бэкап самый простой и быстрый, но в случае каких-то неполадок и для их расследования и устранения лучше подойдёт Offline-бэкап, т.к. содержит в себе дополнительные данные.
В идеале можно комбинировать оба способа, настроив бэкап по крону с созданием нужного кол-ва копий.
Установка
Для своих серверов я всегда использую Centos, но здесь пришлось сделать исключение и выбрать Debian, т.к. Samba, доступная из основных пакетов в Centos, не может выступать в роли AD.
Вариантов установки на Centos было несколько: собрать из пакетов (что на продуктивном сервере совсем некошерно) или установить из сторонних репозиториев (например, tissamba), но решил попробовать Debian, т.к. не хотелось искать обходные пути.
Но и с Debian оказался нюанс, т.к. в основных стабильных репозиториях не было нужной мне версии. Тем не менее, вариант установки из официальных репозиториев, пусть и тестовых, меня более чем устроил.
Каждый волен выбирать тот вариант установки и тот дистрибутив, который подходит для той или иной задачи, но стоит учесть будущие возможные обновления и связанные с этим проблемы при использовании сборки из исходников или чужого репозитория, который не будет работать, например.
Зависимости, необходимые для Samba AD в Debian:
В оф. документации указаны пакеты python-gpgme python3-gpgme для зависимостей, но в Debian 10 его больше нет, так что его я не устанавливал.
Так как мы интегрируем Samba с Active Directory, то и управление правами доступа на общие папки будет гораздо удобней назначать из ОС Windows.
Учетные записи которые могут настраивать права на общие папки, нуждаются в привилегиях SeDiskOperatorPrivilege. Чтобы посмотреть текущий список привилегий на хосте, выполним команду:
1 | net rpc rights list accounts-U’JAKONDA\jakonda’ |
Результат выполнения:
1 14 22 |
BUILTIN\Print Operators No privileges assigned BUILTIN\Account Operators No privileges assigned BUILTIN\Backup Operators No privileges assigned BUILTIN\Server Operators No privileges assigned SeMachineAccountPrivilege SeSecurityPrivilege No privileges assigned |
Выдадим разрешение SeDiskOperatorPrivilege группе «Администраторы домена» (Domain Admins), командой:
1 |
net rpc rights grant’JAKONDA\Domain Admins’SeDiskOperatorPrivilege-U’JAKONDA\jakonda’ ENTER JAKONDA\JAKONDA’SPASSWORD SUCCESSFULLY GRANTED RIGHTS. |
Теперь можно приступать к созданию общих папок. Для примера рассмотрим создание общей папки PUBLIC.
Создаем папку и выставляем права доступа на нее:
1 |
mkdir-psambapublic chown»администраторы домена»»пользователи домена»sambapublic chmod770sambapublic |
В файле конфигурации Samba (/etc/samba/smb.conf) описываем параметры общей папки:
1 |
PUBLIC path=sambapublic read only=no #АналогтехнологииAccess-based Enumeration(ABE—Перечислениенаоснованиидоступа) hide unreadable=yes #hide unwriteable files=yes |
Если необходимо сделать общую папку невидимой, то в параметрах необходимо в название общей папки символ $ — . В этом случае общая папка не будет видна при обзоре сети и войти в нее можно будет указав полный путь к ней.
Если необходимо задать наследование владельца от родительской папки для создаваемых файлов и папок, то делается это параметром: inherit owner = yes
Для применения изменений перечитываем конфигурацию Samba, командой:
1 | etcinit.dsmbd reload |
Далее все настройку прав доступа выполняем из оснастки Управление компьютером (Computer Manager).
Запускаем от администратора Управление компьютером (Computer Manager) (Меню ПУСК -> Выполнить -> compmgmt.msc). Подключится к другому компьютеру… и указываем компьютер
После подключения к системе, переходим в «Общие папки» — «Общие ресурсы» и видим нашу общую папку PUBLIC, далее привычным методом выставляем все необходимые права доступа на нее.
Так же через оснастку Управление компьютером (Computer Manager) удобно смотреть активные пользовательские сеансы и какие файлы открыты в общих папках. При необходимости можно завершить пользовательский сеанс или закрыть открытый файл.
Для тех у кого есть желание поблагодарить, могут воспользоватся формой ниже:
Установка и запуск Samba
Установка выполняется из репозитория одной командой:
dnf install samba
Разрешаем автостарт сервиса и запускаем его:
systemctl enable smb —now
И проверим, что сервис запустился:
systemctl status smb
Проверяем, что сервер самба позволяет к себе подключиться. Для этого можно с компьютера обратиться к серверу по SMB, например, на компьютере с Windows это можно сделать из проводника, прописав путь к серверу с двух слэшей:
* в данном примере мы подключаемся к серверу Samba с IP-адресом 192.168.1.15.
Если мы настроили сервер правильно, система должна запросить пароль на подключение к Samba. Отказываемся его вводить. На данном этапе проверка закончена.
Настройка Samba в Ubuntu 16.04
Ставим Samba и если у кого нет — пакет gksu, для возможности запуска окна настроек Samba:
sudo apt install samba system-config-samba gksu
Теперь переходим к настройке сервера
Создаём резервную копию оригинального файла конфигурации Samba:
sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
После этого, создаём свой файл конфигурации:
sudo gedit /etc/samba/smb.conf
Указываем глобальные настройки файлового сервера.
Копируем в файл эти строки:
workgroup = WORKGROUP server string = Samba Server %v netbios name = SambaSrv security = user map to guest = bad user name resolve order = bcast host wins support = no dns proxy = no
Что мы скопировали?
А вот что:
workgroup - рабочая группа, в которой находятся все наши машины server string - строка коментария, где %v - это макрос, который будет заменён на версию Самбы netbios name - имя Самба-сервера, которое будет отображаться в Windows security - по умолчанию выполнять аутентификацию на уровне пользователя map to guest - это инструкция демону, которая сообщает, что делать с запросами. bad user - означает, что запросы с неправильным паролем будут отклонены, если такое имя пользователя существует name resolve order - очередность разрешения IP адресов по NetBIOS имени. bcast - означает отправить в локальную сеть широковещательный запрос. Если все компьютеры между которыми планируется взаимодействие находятся в одной сети этот вариант оптимальный. wins support - не устанавливайте этот параметр в yes если у вас нет нескольких подсетей и вы не хотите, чтобы ваш nmbd работал как WINS сервер
Сохраняем изменения.
Теперь даём общий доступ к папке в Ubuntu, чтобы машины с Windows могли ею пользоваться.
Общий доступ к папке в Ubuntu
Создаём папку, к которой будем открывать доступ для всех:
sudo mkdir -p /samba/obmen
Ключ -p разрешает создавать вложенные папки.
~ — создать каталоги в домашней папке пользователя
После того как папка создана, нужно сделать для нее правильные права доступа. Следующие команды разрешают доступ к папке для всех и делают владельцем nobody:
cd /samba sudo chmod -R 0755 obmen sudo chown -R nobody:nogroup obmen/
Внесём изменения в файл настройки samba, добавив следующий раздел:
path = /samba/obmen browsable = yes writable = yes guest ok = yes read only = no
Теперь ваш конфигурационный файл должен выглядеть вот так:
workgroup = WORKGROUP server string = Samba Server %v netbios name = SambaSrv security = user map to guest = bad user name resolve order = bcast host dns proxy = no path = /samba/obmen browsable =yes writable = yes guest ok = yes read only = no
Чтобы применить изменения, перезапустите сервер Samba:
sudo service smbd restart
С анонимным доступом к общему ресурсу мы закончили.
Теперь можем проверить доступность этой папки в Windows-машине.
Нажимаем Win+R и в адресной строке пишем:
Скрин показывает, что доступ получен, и получен он без вводи логин и пароля, то есть анонимно.
Защищенный общий доступ к папке Ubuntu
Чтобы расшарить папку для Windows в Ubuntu, к которой будут иметь доступ только пользователи из определенной группы, создадим отдельную папку и опишем ее в файле настройки Samba в Ubuntu.
Создаем папку:
sudo mkdir -p /samba/obmen/sec
Устанавливаем права, чтобы доступ к папке получали только пользователи из группы securedgroup.
Создаем группу:
sudo addgroup securedgroup
Настраиваем права:
cd /samba/obmen sudo chmod -R 0770 sec/ sudo chown -R alex:securedgroup sec
Добавляем настройки в конфигурационный файл samba
Открываем конфигурационный файл
sudo gedit /etc/samba/smb.conf
И добавляем в него этот блок:
path = /samba/obmen/sec valid users = @securedgroup guest ok = no writable = yes browsable = yes
Перезапускаем сервер Samba.
Теперь доступ к общей папке в Ubuntu могут получить только пользователи группы securegroup.
Чтобы проверить как это работает добавим пользователя alex в нашу группу:
sudo usermod -a -G securedgroup alex
Чтобы пользователь мог работать с расшаренными папками в Ubuntu, он должен быть в базе данных Samba.
Создаём для него пароль Samba:
sudo smbpasswd -a alex
После ввода команды будет предложено ввести новый пароль.
Для применения изменений перезагружаем файловый сервер.
Для того, чтобы доступ к папке мог получить только определённый пользователь, заменяем @securedgroup на имя пользователя.
Вот и всё
10 октября 2016, 18:32
Александр
Linux
13304
Из этой категории
- Установка LAMP-сервера и phpMyAdmin в Debian 10Установка XAMPP в Debian 10 (Ubuntu) LinuxОтключить пароль SUDO в LinuxBash-команды для экономии времениУстанавливаем Brackets в Debian 10Работа с пакетами при помощи dpkgНастройка Linux Debian 10Скачиваем сайты целиком — утилита wget15 специальных символов-команд, которые нужно знать для работы в Bash Linux42 команды Linux
Samba как DC
Но за всё надо платить, ибо самый популярный для таких целей Windows Server с Active Direcory на борту не бесплатный, а потому в последнее время с развитием пакета программ Samba 4 есть возможность использования Samba в качестве контроллера домена с применением групповых политик. О Samba 4 и последующей настройке и будет дальнейшее содержание данной статьи.
По своей сути Samba 4 есть Open-Source реализация Active Directory и, согласно документации, является стабильным вариантом применения в качестве домен-контроллера в production-среде.
Одним из минусов является отсутствие поддержки репликации Sysvol через DFS-R (условно говоря, sysvol – это директория с параметрами групповых политик, сценариев входа\выхода из системы и при использовании нескольких контроллеров домена, должна быть реплицирована на все имеющиеся контроллеры в домене). Samba пока что так не умеет, а потому есть решения с использованием rsync или более сложные и гибкие варианты. Но об этом в данном материале рассказано не будет.
В ранних версиях было ограничение размера БД до 4 гб в Samba при использовании в качестве контроллера домена, но данный вопрос был решён в версии 4.9 – реализован бэкенд LDB (экспериментальный), основанный на библиотеке LMDB, что в итоге позволяет создавать базы данных объемом свыше 4 гб. Для включения данного параметра нужно использовать ключ –backend-store=mdb. В данной статье, дабы не усложнять материал, обойдемся без данного ключа.
Авторизация с Active Directory
Разберем пример конфигурирования файлового сервера samba в домене Windows и настроим авторизацию пользователей на базе LDAP Active Directory.
Подключение к Active Directory
Введем наш сервер в домен. Сначала необходимо убедиться, что сервер доступен по своему доменному имени. Если серверу так и не было задано вменяемого имени, вводим команду:
hostnamectl set-hostname samba.dmosk.local
* где samba — имя сервера; dmosk.local — домен.
После добавляем в DNS наш сервер samba. Ждем минут 15, если у нас используется доменная инфраструктура с несколькими сайтами.
Устанавливаем необходимые компоненты:
dnf install samba-client samba-winbind samba-winbind-clients krb5-workstation
Открываем конфигурационный файл samba:
vi /etc/samba/smb.conf
В разделе редактируем следующие опции:
workgroup = DMOSK
security = ads
* где DMOSK — NETBIOS имя домена; ads — указывает, что для samba будет использоваться модель безопасности LDAP Active Directory.
Также в добавим следующие строки:
kerberos method = secrets and keytab
realm = DMOSK.LOCAL
winbind enum groups = Yes
winbind enum users = Yes
idmap config * : rangesize = 1000000
idmap config * : range = 1000000-19999999
idmap config * : backend = autorid
* где:
- kerberos method — метод проверки kerberos. В данном примере сначала используется secretts.tdb, а затем системная таблица ключей.
- realm — сервер Active Directory. В нашем примере прописан домен, так как по нему можно обратиться к любому из серверов AD.
- winbind enum groups — задает пределы перечисления групп через setgrent(), getgrent() и endgrent().
- winbind enum users — задает пределы перечисления пользователей через setpwent(), getpwent()и endpwent().
- idmap config * : rangesize — определяет количество доступных uids и gids в каждом доменном диапазоне.
- idmap config * : range — определяет доступные совпадающие диапазоны uid и gid, для которых серверная часть является авторитетной.
- idmap config * : backend — задает idmap плагин для использования в качестве SID/uid/gid подсистемы
Вводим сервер в домен:
net ads join -U Administrator@dmosk.local
* где Administrator — учетная запись пользователя AD с правами на ввод компьютеров в домен; dmosk.local — наш домен.
Мы должны увидеть, примерно, следующее:
Using short domain name — DMOSK
Joined ‘SAMBA’ to dns domain ‘dmosk.local’
Разрешаем автозапуск winbind и стартуем его:
systemctl enable winbind —now
Выбираем профиль для аутентификации:
authselect select winbind —force
Проверяем, что наш сервер может получить список пользователей Active Directory:
wbinfo -u
… и групп:
wbinfo -g
Если мы увидели список пользователей и групп, то присоединение сервера к домену завершено.
Настройка шары
Открываем конфигурационный файл samba:
vi /etc/samba/smb.conf
Создаем шару:
comment = Folder for AD users
path = /data/ad
public = no
writable = yes
read only = no
guest ok = no
valid users = «@DMOSK\Domain Users» «@DMOSK\Domain Admins»
create mask = 0777
directory mask = 0777
force create mode = 0777
force directory mode = 0777
inherit owner = yes
* в данном примере мы будем шарить папку на сервере /data/ad; мы предоставим доступ всем пользователям групп Domain Users и Domain Admins домена DMOSK.
Создаем каталог и задаем права:
mkdir /data/ad
chmod 777 /data/ad
Теперь можно перезапустить самбу:
systemctl restart smb
Пробуем подключиться к серверу. У нас должна появиться еще одна папка ad.
Права ACL
И в продолжение разговора о интеграции с AD, попробуем настроить ACL для более тонкого предоставления прав доступа.
Для этого снова открываем конфигурационный файл samba:
vi /etc/samba/smb.conf
В раздел добавим:
acl compatibility = auto
… и создадим новую шару:
comment = Folder for AD ACL
path = /data/adacl
public = no
writable = yes
read only = no
guest ok = no
admin users = «@DMOSK\Domain Admins»
inherit acls = yes
inherit owner = yes
inherit permissions = yes
map acl inherit = yes
* где admin users — пользователи, которые могут менять права папки; inherit acls — наследование acl прав; inherit permissions — наследование прав от папки родителя; map acl inherit — использовать ли схему контроля доступа, хранимую в Windows ACL.
Создаем каталог и задаем права:
mkdir /data/adacl
chmod 777 /data/adacl
Перезапускаем самбу:
systemctl restart smb
Подключаемся к нашей созданной общей папке. Кликаем по ней правой кнопкой мыши — выбираем свойства. На вкладке «Безопасность» мы можем менять права:
Настройка прав доступа на файлы в Samba
Сделаю небольшое пояснение по правам доступа в файловом сервере samba. Вопрос этот сложный и объемный. Ему можно посвятить и отдельную статью. Но для полноты картины по настройке самбы, расскажу самое основное.
Как я уже ранее сказал, изменять права доступа к каталогам на файловом сервере можно с помощью команды setfacl. Давайте сейчас посмотрим на права доступа, которые установлены:
# getfacl /mnt/samba # file: mnt/shara # owner: admin51 # group: пользователи\040домена user::rwx group::r-x other::---
С такими правами что-то создавать в папке сможет только пользователь admin51, а пользователи домена смогут только просматривать файлы и каталоги. Сделаем более прикладной вариант. Добавим права доступа на чтение и запись еще одной доменной группе — gr_it.
# setfacl -m g:gr_it:rwx /mnt/shara
Обращаю внимание, что иногда при копировании команд setfacl они не отрабатывают, выдавая не очень понятную ошибку:
setfacl: Option -m: Invalid argument near character 1
Наберите команду с клавиатуры, либо просто удалите и наберите снова ключ -m, он почему-то при копировании часто дает эту ошибку.
Смотрим, что получилось:
# getfacl /mnt/shara # file: mnt/shara # owner: admin51 # group: пользователи\040домена user::rwx group::r-x group:gr_it:rwx mask::rwx other::---
То, что надо. Теперь пользователи группы gr_it имеют полные права на шару. Создадим одним таким пользователем папку test1 на нашей шаре и посмотрим, какие права она получит.
# getfacl /mnt/shara/test1 # file: mnt/shara/test1 # owner: user1 # group: пользователи\040домена user::rwx group::--- other::---
Права на папку имеет только ее создатель и больше никто. Для того, чтобы наследовались права с вышестоящего каталога, необходимо на этот вышестоящий каталог добавить дефолтные права доступа. Примерно вот так.
# setfacl -m d:g:gr_it:rwx,d:g:'пользователи домена':rx /mnt/shara
Смотрим, что получилось:
# getfacl /mnt/shara # file: mnt/shara # owner: admin51 # group: пользователи\040домена user::rwx group::r-x group:gr_it:rwx mask::rwx other::--- default:user::rwx default:group::r-x default:group:пользователи\040домена:r-x default:group:gr_it:rwx default:mask::rwx default:other::---
Создадим теперь тем же пользователем еще одну папку test2 и проверим ее права.
# getfacl /mnt/shara/test2 # file: mnt/shara/test2 # owner: user # group: пользователи\040домена user::rwx group::--- group:пользователи\040домена:r-x group:gr_it:rwx mask::rwx other::--- default:user::rwx default:group::r-x default:group:пользователи\040домена:r-x default:group:gr_it:rwx default:mask::rwx default:other::---
Применилось наследование с вышестоящих папок. Не забывайте про дефолтные права и учитывайте их при настройке прав доступа на файловом сервере.
Для удобной и корректной работы с правами доступа я обычно для крупных, корневых директорий выставляю права аккуратно через setfacl в консоли. Какие-то мелкие изменения по пользователям и группам в более низших иерархиях директорий делаю через windows acl с какой-нибудь виндовой машины.
Еще важно знать одну особенность выставления прав доступа в linux. В моей практике часто требуется дать какому-нибудь пользователю доступ в одну директорию, которая располагается там, где у пользователя нет вообще никаких прав
В windows эта проблема решается просто — даются права на конкретную папку, а пользователю кладется ярлык на эту папку. В итоге он имеет доступ к нужной директории и больше никуда.
В linux так сделать не получится. Для того, чтобы дать таким образом доступ на отдельную директорию пользователю, необходимо, чтобы по всем вышестоящим директориям у него были права на исполнение, то есть X. Их придется выставлять вручную по всем вышестоящим папкам. Результат будет такой же, как и в винде — пользователь получит доступ на чтение только в указанную папку, но для этого придется выполнить больше действий. Если не знаешь этот нюанс, можно потратить много времени, прежде чем поймешь, в чем проблема.
Заключение
Я рассмотрел основные моменты по самбе:
- Простая настройка с доступом по ip или системными пользователями.
- Настройка samba с интеграцией с AD и windows acl.
- Логирование доступа к файлам.
Онлайн курсы по Mikrotik
Если у вас есть желание научиться работать с роутерами микротик и стать специалистом в этой области, рекомендую пройти курсы по программе, основанной на информации из официального курса MikroTik Certified Network Associate. Помимо официальной программы, в курсах будут лабораторные работы, в которых вы на практике сможете проверить и закрепить полученные знания. Все подробности на сайте .
Стоимость обучения весьма демократична, хорошая возможность получить новые знания в актуальной на сегодняшний день предметной области. Особенности курсов:
- Знания, ориентированные на практику;
- Реальные ситуации и задачи;
- Лучшее из международных программ.