JumpServer PAM » Документация » Дополнительеные возможности » Использование [#username#] при выдаче доступа к персональным УЗ

Использование [#username#] при выдаче доступа к персональным УЗ

Важно: инструкция не является инструкцией от вендора, обсуждаем внедрение такого сценария в дистрибутив "из коробки", так что просьба пользоваться инструкцией с учетом этого :)

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

Но можно чуть модифицировать файлы продукта, чтобы можно было использовать [#username#] в политике доступа.
Как это работает

Создайте группу доступа и укажите там имя аккаунта в виде [#username#]_adm (или другой постфикс\префикс):

изображение.png

Таким образом каждый пользователь входящий в группу доступа получит возможность подключаться с любым аккаунтом, имя которого совпадает с логином пользователя+постфикс, если такие УЗ существуют в системе.
То есть пользователь ivan увидит аккаунт ivan_adm, а пользователь sergey увидит sergey_adm


Как это сделать

На JumpServer копируем файл из контейнера jms_core в папку /opt/jumpserver/:

docker cp jms_core:/opt/jumpserver/apps/perms/utils/asset_perm.py /opt/jumpserver/

Редактируем файл в 2 местах:
Примерно на 18й строчке добавляем одну строку
    USERNAME_TEMPLATE_TOKEN = '[#username#]' чтобы получилось так:


class PermAssetDetailUtil:
    """ 资产授权账号相关的工具 """
    USERNAME_TEMPLATE_TOKEN = '[#username#]'

    def __init__(self, user, asset_or_id):
        self.user = user

        if isinstance(asset_or_id, Asset):
            self.asset_id = asset_or_id.id
            self.asset = asset_or_id
        else:
            self.asset_id = asset_or_id

Примерно на 136 строчке добавляем
            if alias == AliasAccount.USER and user.username in username_accounts_mapper:
                _accounts = username_accounts_mapper[user.username]
            elif cls.USERNAME_TEMPLATE_TOKEN in alias:
                rendered_username = alias.replace(cls.USERNAME_TEMPLATE_TOKEN, user.username)
                _accounts = username_accounts_mapper.get(rendered_username, [])
чтобы получилось так:

    def map_alias_to_accounts(cls, alias_action_bit_mapper, alias_date_expired_mapper, asset, user):
        username_accounts_mapper = defaultdict(list)
        cleaned_accounts_expired = defaultdict(list)
        asset_accounts = asset.all_valid_accounts.all()

        # 用户名 -> 账号
        for account in asset_accounts:
            username_accounts_mapper[account.username].append(account)

        cleaned_accounts_action_bit = defaultdict(int)
        for alias, action_bit in alias_action_bit_mapper.items():
            account = None
            _accounts = []
            if alias == AliasAccount.USER and user.username in username_accounts_mapper:
                _accounts = username_accounts_mapper[user.username]
            elif cls.USERNAME_TEMPLATE_TOKEN in alias:
                rendered_username = alias.replace(cls.USERNAME_TEMPLATE_TOKEN, user.username)
                _accounts = username_accounts_mapper.get(rendered_username, [])
            elif alias in username_accounts_mapper:
                _accounts = username_accounts_mapper[alias]
            elif alias in ['@INPUT', '@ANON', '@USER']:
                account = VirtualAccount.get_special_account(alias, user, asset, from_permed=True)
            elif alias.startswith('@'):
                continue

Сохраняем файл и подключаем его в compose файле из текущего дистрибутива.

nano /opt/jumpserver-installer-v4.10.16/compose/core.yml

Добавляем в файле ссылку на отредактированный файл asset_perm.py:


services:
  core:
    image: ${REGISTRY:-docker.io}/jumpserver/core:${VERSION}
    container_name: jms_core
    hostname: jms_core
    ulimits:
      core: 0
    restart: always
    command: start web
    env_file:
      - ${CONFIG_FILE}
    environment:
      TIME_ZONE: ${TZ:-Asia/Shanghai}
    volumes:
      - ${CONFIG_DIR}/certs:/opt/jumpserver/data/certs
      - ${VOLUME_DIR}/core/data:/opt/jumpserver/data
      - /opt/jumpserver/asset_perm.py:/opt/jumpserver/apps/perms/utils/asset_perm.py
    healthcheck:
      test: "check http://localhost:8080/api/health/"
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 90s
    networks:
      - net

После правки compose файла нужно перезапустить JumpServer:

jmsctl restart
Важно:
При обновлении JumpServer compose файлы перезаписываются, так что после обновления нужно будет повторно подключить файл, а еще лучше сравнить старый и новые файлы, вдруг в новой версии в нем будут какие-то изменения.
<< Примеры API запросов (получение списка пользователей и устройств, список команд в сессии)

Нужна помощь?

Поддержка во время пилота JumpServer PAM Enterprise Edition

Вы начали тестирование JumpServer PAM EE и столкнулись с проблемой? Наш процесс включает в себя организацию групп переписок в электронной почте или групп в Telegram для оперативного решения вопросов. Если вы уверены, что вас не добавили в такую группу, обратитесь к вашему поставщику или к нам по адресу support@afi-d.ru

Обучение ваших специалистов настройке и администрированию JumpServer PAM

В рамках действующей подписки на техническую поддержку мы обучим ваших специалистов установке, настройке, адмнистрированию JumpServer PAM, а также восстановлению после ошибок и аварий.

Обучение проходит онлайн, по заранее согласованному плану, включает в себя обязательную проверку знаний на практике с выдачей именных сертификатов (в случае успешной сдачи экзамена).

Видео-инструкции

Посетите наш канал на RuTube с видео-инструкциями по настройке всех разделов JumpServer PAM. Видео на русском языке и актуализируются с выходом новых версий.

Техподдержка бесплатной редакции JumpServer PAM Community Edition

Мысль о внедрении непростой, но критичной для бизнеса PAM-системы может пугать кажущейся сложностью настройки системы, обучением администраторов и специалистов ИБ, изменениями в процессах работы с учетными записями.

Чтобы внедрение и настройка JumpServer Community Edition были комфортными, а также чтобы вы всегда могли обратиться за помощью к профессионалам, AFI Distribution предлагают годовую подписку на техническую поддержку.

Пакет поддержки в 1.5 млн рублей за экземпляр JumpServer Community Edition (без ограничений на количество пользователей и целевых систем) включает всё необходимое для использования PAM:

  • документацию на русском языке;
  • сценарии использования и рекомендуемые архитектуры для установки;
  • обучение администраторов и специалистов ИБ работе с JumpServer;
  • подсказки и решения для популярных вопросов;
  • оповещения о выходе новых версий с проверенной инструкцией для апгрейда;
  • подключение к Radius и многофактороной аутентификации «Мультифактор» ;
  • прямой доступ к инженеру (без первой линии) с понятным SLA.
Узнать больше и приобрести вы можете на странице Подписка на техподдержку