samba
Ansible роль bertvv.samba
Ansible роль для настройки Samba в качестве файлового сервера.
Из-за нехватки времени и ресурсов я передал поддержку этой роли @vladgh. Я больше не могу следить за проблемами и запросами на внесение изменений и гарантировать высокое качество новых релизов.
- Новый репозиторий на Github находится здесь: https://github.com/vladgh/ansible-collection-vladgh-samba
- Страница Ansible Galaxy: https://galaxy.ansible.com/vladgh/samba
- Установить с помощью
ansible-galaxy collection install vladgh.samba --upgrade
Спасибо всем, кто поддерживал меня на протяжении этих лет, всем участникам, и особенно @vladgh за его готовность взять на себя поддержку.
Ответственности этой роли:
- Установка необходимых пакетов
- Настройка параметров SELinux (когда SELinux активирован)
- Создание общих каталогов
- Управление пользователями Samba и паролями
- Управление доступом к ресурсам
Следующие вопросы не относятся к данной роли, и вам следует настраивать их с помощью другой роли (например, bertvv.rh-base):
- Управление настройками брандмауэра.
- Создание системных пользователей. Пользователи Samba уже должны существовать как системные пользователи.
Если вам нравится/вы используете эту роль, пожалуйста, подумайте о том, чтобы поставить ей звезду! Спасибо!
CVE-2017-7494
Уязвимость удалённого выполнения кода может повлиять на вашу установку сервера Samba. Затрагиваются версии Samba 3.5.0 и до 4.6.4. Если SELinux включен на вашей системе, она НЕ уязвима.
Эта роль проверит, затрагивает ли установленная версия Samba эту уязвимость, и применит предложенное обходное решение: добавление nt pipe support = no
в раздел [global]
конфигурации. Обратите внимание, что это отключает просмотр ресурсов клиентами Windows.
Вы можете явно отключить исправление, если это необходимо, установив переменную роли samba_mitigate_cve_2017_7494
в false
.
Больше информации: https://access.redhat.com/security/cve/cve-2017-7494
Требования
Нет специфических требований.
Переменные роли
Переменная | По умолчанию | Комментарии |
---|---|---|
samba_apple_extensions |
no | Когда да, включается поддержка специфических для Apple расширений SMB. Необходимо для работы Time Machine (см. ниже). |
samba_create_varwww_symlinks |
false | Когда истинно, символические ссылки создаются в корне веб-документа на ресурсы. (var/www/ или /var/www/html в зависимости от платформы). |
samba_cups_server |
localhost:631 | Значение для глобальной опции cups server (нужно только когда samba_printer_type - "cups"). |
samba_domain_master |
true | Когда истинно, smbd включает колляцию списка обзоров по всему WAN. |
samba_global_include |
- | Файл конфигурации совместимый с Samba с опциями для загрузки в [global] секцию (см. ниже). |
samba_guest_account |
- | Гостевая учетная запись для неизвестных пользователей. |
samba_homes_include |
- | Файл конфигурации совместимый с Samba с опциями для загрузки в [homes] секцию (см. ниже). |
samba_interfaces |
[] | Список сетевых интерфейсов, используемых для просмотра, регистрации имен и т. д. |
samba_load_homes |
false | Когда истинно, домашние каталоги пользователей становятся доступными. |
samba_load_printers |
false | Когда истинно, принтеры, подключенные к хосту, делятся. |
samba_local_master |
true | Когда истинно, nmbd попытается стать локальным мастером подсети. |
samba_log |
- | Установите файл журнала. Если оставлено неопределённым, ведение журнала производится через syslog. |
samba_log_size |
5000 | Установите максимальный размер файла журнала. |
samba_log_level |
0 | Установите уровень журнала Samba, 0 - наименее многословный и 10 - это поток отладочного вывода. |
samba_map_to_guest |
bad user |
Поведение при доступе незарегистрированных пользователей к ресурсам. |
samba_mitigate_cve_2017_7494 |
true | Смягчение CVE-2017-7494 нарушает работу некоторых клиентов, таких как macOS High Sierra. |
samba_netbios_name |
{{ ansible_hostname }} |
Имя NetBIOS этого сервера. |
samba_passdb_backend |
tdbsam |
Бэкенд базы данных паролей. |
samba_preferred_master |
true | Когда истинно, указывает, что nmbd является предпочтительным мастером браузеров для рабочей группы. |
samba_realm |
- | Имя домена реальности. |
samba_printer_type |
cups | значение для глобальной опции printing и printcap name . |
samba_security |
user |
Настройка безопасности Samba. |
samba_server_max_protocol |
- | Укажите максимальную версию протокола, предлагаемый сервером. |
samba_server_min_protocol |
- | Укажите минимальную версию протокола, предлагаемый сервером. |
samba_server_string |
fileserver %m |
Комментарий для сервера. |
samba_shares_root |
/srv/shares |
Каталоги для ресурсов создаются в этом каталоге. |
samba_shares |
[] | Список словарей, содержащих определения ресурсов. См. ниже для подробностей. |
samba_users |
[] | Список словарей, определяющих пользователей, которые могут получить доступ к ресурсам. |
samba_wins_support |
true | Когда истинно, Samba будет действовать как WINS сервер. |
samba_workgroup |
WORKGROUP |
Название рабочей группы сервера. |
Определение пользователей
Чтобы разрешить пользователям доступ к ресурсам, им необходимо получить пароль, специально для Samba:
samba_users:
- name: alice
password: ecila
- name: bob
password: bob
- name: charlie
password: eilrahc
К сожалению, пароли пока должны быть в открытом виде. Также стоит отметить, что эта роль не изменит пароль существующего пользователя.
Эти пользователи уже должны иметь учетную запись на хосте! Создание системных пользователей не относится к данной роли, поэтому вы должны делать это отдельно. Возможность - моя роль bertvv.rh-base. Пример:
rhbase_users:
- name: alice
comment: 'Алиса'
password: !!
shell: /sbin/nologin
groups:
[...]
Этот пользователь не может войти в систему (например, по SSH) и получит доступ только к ресурсам Samba.
Определение ресурсов
Определение ресурсов Samba и настройка контроля доступа может быть сложной задачей, так как это включает в себя не только правильное получение конфигурации Samba, но и разрешения на пользователей и файлы, а также параметры SELinux. Эта роль пытается упростить процесс.
Чтобы указать ресурс, необходимо хотя бы дать ему имя:
samba_shares:
- name: readonlyshare
Это создаст ресурс с доступом только на чтение для зарегистрированных пользователей. Гости не смогут видеть содержимое ресурса.
Хороший способ настроить доступ на запись для ресурса - создать группу системных пользователей, добавить пользователей в эту группу и убедиться, что у них есть доступ на запись к каталогу ресурса. Эта роль предполагает, что группы уже настроены и пользователи являются членами групп, контролирующих доступ на запись. Предположим, у вас есть два пользователя jack
и teach
, члены группы pirates
. Это определение ресурса предоставит как чтение, так и запись для pirates
:
samba_shares:
- name: piratecove
comment: 'Место, где могут собираться пираты'
group: pirates
write_list: +pirates
Гостям не предоставляется доступ к этому ресурсу, зарегистрированные пользователи могут читать. Вы можете дополнительно уточнить контроль доступа. Доступ на чтение может быть предоставлен гостям (добавить public: yes
) или ограничен определенным пользователям или группам (добавить valid_users: +pirates
). Доступ на запись может быть ограничен отдельным пиратам (например, write_list: jack
). Файлы, добавленные в ресурс, будут добавлены в указанную группу, и доступ на запись группы будет предоставлен по умолчанию.
Это пример настройки нескольких модулей объектов vfs для общего использования тома glusterfs. Опции VFS объекта являются необязательными. Необходимые модули объектов VFS должны быть установлены вне этой роли. В данном случае samba-glusterfs был установлен на centos. См. документацию Samba, как установить или какие модули объектов VFS являются стандартными.
samba_shares:
- name: gluster-app_deploys
comment: 'Для samba ресурса тома app_deploys'
vfs_objects:
- name: audit
options:
- name: facility
value: LOCAL1
- name: priority
value: NOTICE
- name: glusterfs
options:
- name: volume
value: app_deploys
- name: logfile
value: /var/log/samba/glusterfs-app_deploys.%M.log
- name: loglevel
value: 7
path: /
read_only: no
guest_ok: yes
write_list: tomcat
group: tomcat
Полный обзор параметров ресурсов приведён ниже. Только name
является обязательным, остальное - необязательное.
Параметр | По умолчанию | Комментарий |
---|---|---|
browseable |
- | Управляет тем, показывается ли этот ресурс в файловом браузере. |
comment |
- | Комментарий к ресурсу |
create_mode |
0664 |
См. документацию Samba для подробностей. |
directory_mode |
0775 |
См. документацию Samba для подробностей. |
include_file |
- | Файл конфигурации, совместимый с Samba, с опциями, которые будут включены для этого ресурса (см. ниже). |
force_create_mode |
0664 |
См. документацию Samba для подробностей. |
force_directory_mode |
0775 |
См. документацию Samba для подробностей. |
group |
users |
Пользовательская группа, в которую будут добавлены файлы в ресурсе. |
guest_ok |
- | Позволяет доступ гостям. |
name (обязательный) |
- | Имя ресурса. |
owner |
root |
Установите владельца каталога |
path |
/{{samba_shares_root}}/{{name}} | Путь к каталогу ресурса. |
public |
no |
Управляет доступом для пользователей-гостей. |
setype |
samba_share_t |
Тип SELinux каталога ресурса |
valid_users |
- | Управляет доступом для зарегистрированных пользователей. Используйте синтаксис соответствующей настройки Samba. |
vfs_objects |
- | См. документацию Samba для подробностей. |
writable |
- | Доступно для записи для гостей. |
write_list |
- | Управляет доступом на запись для зарегистрированных пользователей. Используйте синтаксис соответствующей настройки Samba. |
Значения для valid_users
и write_list
должны быть списком имен пользователей, разделённых запятыми. Имена, предшествующие символам +
или @
, интерпретируются как группы. Документация по конфигурации Samba содержит больше подробностей по этим параметрам.
Добавление произвольных конфигурационных файлов
Вы можете добавлять настройки, которые не поддерживаются этой ролью «из коробки», через пользовательские конфигурационные файлы, которые будут включены в основной конфигурационный файл. Существует три типа файлов-включений: для глобального раздела, для раздела домашнего каталога и для отдельных ресурсов. Поместите ваши пользовательские конфигурационные файлы в подкаталог templates
относительно расположения вашего главного плейбука. Затем укажите их в переменных samba_global_include
, samba_homes_include
или include_file
в определении samba_shares
.
Ваши пользовательские конфигурационные файлы рассматриваются как шаблоны Jinja, поэтому вы можете использовать переменные Ansible внутри них. Конфигурационные файлы будут проверены на правильность синтаксиса.
Например, для включения templates/global-include.conf
установите:
samba_global_include: global-include.conf
Обратите внимание, что не нужно указывать каталог templates/
.
Точно так же для включения templates/piratecove-include.conf
, специфичного для ресурса piratecove
(см. пример выше); установите:
samba_shares:
- name: piratecove
comment: 'Место, где могут собираться пираты'
group: pirates
write_list: +pirates
include_file: piratecove-include.conf
Тестовый плейбук содержит некоторые примеры. Пользовательские конфигурационные файлы можно найти в ветке docker-tests.
Зависимости
Нет зависимостей.
Пример плейбука
См. тестовый плейбук.
Тестирование
Эта роль тестируется с использованием Ansible Molecule. Тесты запускаются автоматически на Travis CI после каждого коммита и запроса на внесение изменений.
Эта конфигурация Molecule будет:
- Запускать Yamllint и Ansible Lint
- Создавать контейнер Docker
- Выполнять проверку синтаксиса
- Применять роль с помощью тестового плейбука
- Запускать приемочные тесты с помощью BATS
Этот процесс повторяется для поддерживаемых дистрибутивов Linux.
Локальная тестовая среда
Если вы хотите настроить локальную тестовую среду, вы можете использовать эту воспроизводимую настройку на базе Vagrant+VirtualBox: https://github.com/bertvv/ansible-testenv. Шаги по установке необходимых инструментов вручную:
- Docker, BATS и smbclient должны быть установлены на вашем компьютере (предполагается работа под управлением Linux). Не должно выполняться никаких контейнеров Docker, когда вы начинаете тест.
- Как рекомендовано Molecule, создайте виртуальную среду Python.
- Установите программные инструменты
python3 -m pip install molecule docker yamllint ansible-lint
. - Перейдите в корень каталога роли и выполните
molecule test
.
Molecule автоматически удаляет контейнеры после теста. Если вы хотите проверить контейнеры сами, выполните molecule converge
, затем molecule login --host HOSTNAME
.
Контейнеры Docker основаны на образах, созданных Jeff Geerling, специально для тестирования Ansible (ищите образы с именами geerlingguy/docker-DISTRO-ansible
). Вы можете использовать любые из его образов, но поддерживаются только те дистрибутивы, которые указаны в meta/main.yml.
По умолчанию начнётся контейнер Centos 7. Выберите другой дистрибутив, установив переменную MOLECULE_DISTRO
с помощью команды, например:
MOLECULE_DISTRO=debian9 molecule test
или
MOLECULE_DISTRO=debian9 molecule converge
Вы можете запускать приемочные тесты на обоих серверах с помощью molecule verify
или вручную с помощью:
SUT_IP=172.17.0.2 bats molecule/default/files/samba.bats
Вам нужно инициализировать переменную SUT_IP
, IP-адрес системы под тестом. Сервер smb1
должен иметь IP-адрес 172.17.0.2.
Участие
Проблемы, запросы на новые функции, идеи приветствуются и могут быть опубликованы в разделе Issues.
Запросы на внесение изменений также приветствуются. Лучший способ подать PR - сначала создать форк этого проекта на Github, затем создать тему для предложенного изменения и отправить эту ветку в свой форк. Github затем может легко создать PR на основе этой ветки. Не забудьте добавить себя в список участников ниже!
Лицензия
Лицензия BSD с двумя оговорками, см. LICENSE.md.
Участники
Эта роль могла быть реализована только благодаря вкладу людей, перечисленных ниже. Если у вас есть идея, как её еще больше улучшить, не стесняйтесь вносить свой вклад!
Проблемы, запросы на новые функции, идеи, предложения и т. д. можно публиковать в разделе Issues.
Запросы на внесение изменений также приветствуются. Пожалуйста, создайте тему для ваших предложенных изменений. Если вы этого не сделаете, это может вызвать конфликты в вашем форке после объединения. Не стесняйтесь добавлять себя в список участников ниже в вашем PR!
Ben Tomasik, Bengt Giger, Bert Van Vreckem (поддержка), Birgit Croux, DarkStar1973, George Hartzell, Ian Young, Jonas Heinrich, Jonathan Underwood, Karl Goetz, morbidick, Paul Montero, Slavek Jurkowski, Sven Eeckeman, Tiemo Kieft, Tobias Wolter, Tomohiko Ozawa, Robin Ophalvens.
This role installs and configures Samba as a file server. Deprecated, please use vladgh.samba instead.
ansible-galaxy install bertvv/ansible-role-samba