samba

Ansible роль bertvv.samba

Ansible роль для настройки Samba в качестве файлового сервера.

Из-за нехватки времени и ресурсов я передал поддержку этой роли @vladgh. Я больше не могу следить за проблемами и запросами на внесение изменений и гарантировать высокое качество новых релизов.

Спасибо всем, кто поддерживал меня на протяжении этих лет, всем участникам, и особенно @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. Шаги по установке необходимых инструментов вручную:

  1. Docker, BATS и smbclient должны быть установлены на вашем компьютере (предполагается работа под управлением Linux). Не должно выполняться никаких контейнеров Docker, когда вы начинаете тест.
  2. Как рекомендовано Molecule, создайте виртуальную среду Python.
  3. Установите программные инструменты python3 -m pip install molecule docker yamllint ansible-lint.
  4. Перейдите в корень каталога роли и выполните 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
Лицензия
other
Загрузки
244161
Владелец
Hi! My contribs are often related to my job (teaching Linux), but are mostly done in my free time. I can't always respond quickly to PRs and Issues. Sorry!