Назад | Перейти на главную страницу

Как запустить контейнеры Docker от имени пользователя домена Active Directory (SSSD)? («Не удалось найти пользователя»)

Я использую несколько общих ресурсов Samba на выделенной машине Debian 9.6, присоединенной к домену AD (Zentyal с SMB 4).

Я использую довольно простую установку SSSD, которая пока идеально подходит для наших нужд.

Я хочу установить Амбар вверх, чтобы пользователи различных доменов могли искать документы на вышеупомянутых общих ресурсах Samba. Однако я хочу, чтобы Ambar сканировал только «общедоступные» документы и ничего из частных / «управляющих» папок.

Я изменил файл docker-compose.yml, чтобы Docker создавал нужные ему контейнеры как пользователь. гусеничный трактор, но когда я бегу docker-compose up -d Я получаю следующую ошибку:

ERROR: for Shared-folder Cannot start service Shared-folder: linux spec user: unable to find user crawler: no matching entries in passwd file

Редактирование /etc/passwd файл вручную здесь не помогает. Я по-прежнему получаю ту же ошибку.

Вот так выглядит соответствующая конфигурация docker-compose.yml:

Shared-folder:
  depends_on:
    serviceapi:
      condition: service_healthy
  image: ambar/ambar-local-crawler
  restart: always
  networks:
    - internal_network
    expose:
    - "8082"
  environment:
    - name=Shared-folder
    - ignoreExtensions=.{exe,dll,rar,s,so}
    - apiUrl=http://serviceapi:8081
  user: crawler
  volumes:
    - /shared/Shared-folder:/usr/data

Обратите внимание: если я удалю строку user: crawler, все работает как положено (и root просматривает все мои документы).

Вот мой /etc/sssd/sssd.conf-файл:

[sssd]
services = nss, pam
config_file_version = 2
domains = MY.COMPANY.COM

[domain/MY.COMPANY.COM]
id_provider = ad
access_provider = ad
ad_gpo_map_interactive = +cron
dyndns_update_ptr=false

# Use this if users are being logged in at /.
# This example specifies /home/DOMAIN-FQDN/user as $HOME.  Use with pam_mkhomedir.so
override_homedir = /home/%u
ldap_idmap_autorid_compat = True

И вот мой /etc/pam.d/common-session:

#
# /etc/pam.d/common-session - session-related modules common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define tasks to be performed
# at the start and end of sessions of *any* kind (both interactive and
# non-interactive).
#
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules.  See
# pam-auth-update(8) for details.

# here are the per-package modules (the "Primary" block)
session [default=1]                     pam_permit.so
# here's the fallback if no module succeeds
session requisite                       pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
session required                        pam_permit.so
# and here are more per-package modules (the "Additional" block)
session required        pam_unix.so
session required        pam_mkhomedir.so skel=/etc/skel/ umask=0066
session optional                        pam_winbind.so
session optional                        pam_sss.so
session optional        pam_systemd.so
# end of pam-auth-update config

Пожалуйста, дайте мне знать, если какие-нибудь конфиги будут вам полезны! Я предполагаю, что smb.conf не так актуально в данном случае, и что может быть какой-то способ сказать Docker, чтобы он просто доверял PAM?

Конфигурация домена в sssd.conf не имеет use_fully_qualified_names = False. Без этого можно ожидать, что вы будете использовать полностью определенные имена (например, crawler@MY.COMPANY.COM). Это не обязательно для решения вашей проблемы, но я считаю полезным, если машина обращается только к одному домену. Альтернативно:

  • Вы можете попробовать указать полное имя пользователя в docker-compose.yaml (т.е. user: crawler@MY.COMPANY.COM). Я не пробовал это сделать, поэтому не могу подтвердить, что он работает должным образом.

  • Вы можете использовать uid пользователя вместо имени. Я использую этот метод, поэтому могу подтвердить, что он работает нормально. Вы можете получить uid, запустив id <username> (убедитесь, что вы используете формат, соответствующий вашему use_fully_qualified_names установка).

В любом случае, если вы не можете получить uid своего пользователя, запустив id <username> тогда ваша проблема, скорее всего, связана с вашей конфигурацией SSSD, а не с конфигурацией докера.