Формула remote-access-groups-xrdp-formula

Формула используется для установки и настройки ограниченного удаленного доступа к рабочему столу через xRDP — открытой реализации протокола RDP (Remote Desktop Protocol).

Формула устанавливает и настраивает специализированный пакет osmax-ira-xrdp для Astra Linux, подбирая совместимую версию пакета в зависимости от версии ОС и X-сервера.

На Astra Linux пакет osmax-ira-xrdp не является универсальным — это сборка, привязанная к конкретной версии xserver-xorg-core.

Особенности обработки формулы с учетом версии ОС

Начиная с версии 1.19.0, пакеты xRDP для Astra Linux разделены по версиям ОС и X-сервера. Формула автоматически определяет и подставляет нужную версию пакета на основе:

  • grains.osrelease — версия Astra Linux (1.7 или 1.8);

  • dpkg-query xserver-xorg-core — версия X-сервера (1.20 или 1.21).

Механизм реализован в map.jinja и работает только при наличии установленного xserver-xorg-core.

В формуле указывается базовое имя пакета (name: osmax-ira-xrdp), без указания версии ОС. Параметр pkg.name в pillar не обязателен: по умолчанию формула использует name: osmax-ira-xrdp и автоматически заменяет его на версию с суффиксом -astra<версия>-xorg<версия> при работе на Astra Linux.

В пользовательском интерфейсе «Кабинет администратора» при заполнении содержимого pillar указывать имя пакета не требуется. Пример:

{
  "lookup": {
    "pkg": {
      "version": "1.5.5"
    },
    "xrdp_ini": {
      "port": "3388",
      "LogFile": "xrdp-daemon.log",
      "LogLevel": "INFO",
      "SysLogLevel": "INFO",
      "security_layer": "negotiate"
    },
    "sesman_ini": {
      "param": "/usr/lib/xorg/Xorg",
      "LogLevel": "INFO",
      "ListenPort": "3349",
      "SysLogLevel": "INFO",
      "IdleTimeLimit": "0",
      "KillDisconnected": "false",
      "DisconnectedTimeLimit": "0"
    },
    "xrdp_access_ips": [
      "+"
    ],
    "remote_access_groups": [
      "Domain Users"
    ]
  }
}

Доступные состояния

Состояние remote-access-groups-xrdp

Мета-состояние, которое включает в себя все необходимые действия для настройки xRDP-доступа.

Автоматически:

  • устанавливает пакет osmax-ira-xrdp (с указанием версии, если задана);

  • создает файлы /opt/osmax/xrdp/etc/xrdp/xrdp.ini, /opt/osmax/xrdp/etc/xrdp/sesman.ini, /etc/access-groups-rdp, /etc/access-ip-rdp;

  • включает и запускает сервисы osmax-ira-xrdp и osmax-ira-xrdp-sesman.

Зависит от remote-access-groups-xrdp.package через include.

Состояние remote-access-groups-xrdp.package

Устанавливает пакет osmax-ira-xrdp, создает файлы конфигурации (xrdp.ini, sesman.ini, access-groups-rdp, access-ip-rdp) и запускает сервисы.

Состояние remote-access-groups-xrdp.clean

Мета-состояние, отменяющее все действия remote-access-groups-xrdp в обратном порядке:

  • останавливает сервисы osmax-ira-xrdp и osmax-ira-xrdp-sesman;

  • удаляет файлы конфигурации /opt/osmax/xrdp/etc/xrdp/xrdp.ini, /opt/osmax/xrdp/etc/xrdp/sesman.ini, /etc/access-groups-rdp, /etc/access-ip-rdp;

  • удаляет установленный пакет osmax-ira-xrdp.

Зависит от remote-access-groups-xrdp.package.clean через include.

Состояние remote-access-groups-xrdp.package.clean

Удаляет пакет osmax-ira-xrdp и файлы конфигурации /opt/osmax/xrdp/etc/xrdp/xrdp.ini, /opt/osmax/xrdp/etc/xrdp/sesman.ini, /etc/access-groups-rdp, /etc/access-ip-rdp.

Пример файла pillar.example

remote-access-groups-xrdp:
  # Переопределите значение map.jinja
  lookup:
    # Укажите параметры пакета
    pkg:
      # Формула использует значение по умолчанию: osmax-ira-xrdp
      # На Astra Linux имя пакета автоматически переопределяется на osmax-ira-xrdp-astra<версия>-xorg<версия>,
      # только если установлен пакет xserver-xorg-core
      name: 'osmax-ira-xrdp'
      # Укажите конкретную версию пакета.
      # Если значение представляет собой пустую строку, используется последняя версия.
      # Если требуется учесть установленную версию xorg, задайте номер версии в формате '1.3.0+xorg'.
      version: '1.3.0'
    # Задайте параметры xrdp
    xrdp_ini:
      # Порт, на котором XRDP будет слушать входящие подключения
      port: 3389
      # Уровень безопасности для соединения
      security_layer: negotiate
      # Путь к лог-файлам xrdp
      LogFile: /dev/null
      # Уровень логирования xrdp
      LogLevel: 'INFO'
      # Уровень логирования в syslog
      SysLogLevel: 'INFO'
    # Задайте параметры sesman
    sesman_ini:
      # Порт, на котором sesman будет слушать входящие соединения
      ListenPort: 3349
      # Завершение сеанса пользователя после его отключения
      KillDisconnected: false
      # Время в минутах, через которое сеанс пользователя будет завершен после отключения (если для параметра
      # KillDisconnected установлено значение true)
      DisconnectedTimeLimit: 0
      # Время в минутах, в течение которого пользователь не совершал никаких
      # действий; по истечении этого времени сеанс будет завершен
      IdleTimeLimit: 0
      # Уровень логирования
      LogLevel: 'INFO'
      # Уровень логирования в syslog
      SysLogLevel: 'INFO'
      # Путь к исполняемому файлу X-сервера, который будет использоваться для запуска графической сессии
      param: /usr/lib/xorg/Xorg
    # Задайте ip-адреса для доступа к xrdp
    xrdp_access_ips: []
    # Задайте группы доступа к xrdp
    remote_access_groups: []

Параметры конфигурации:

  • xrdp_access_ips — директивы для указания IP-шлюза, с которого разрешается подключение;

    До адреса необходимо указать символ:

    • + — доступ разрешён;

    • - — доступ запрещён.

      По умолчанию все подключения заблокированы — пустой файл правил блокирует все подключения. Эти директивы могут задаваться как сами по себе (что вызовет применение для всех адресов), либо с добавлением маски или конкретного IP-адреса, например: +199.35.209.1/32.

      Также можно задать несколько директив. В этом случае при подключении правила проверяются все адреса по очереди до первого подходящего, например:

      +199.35.209.1
      !

      Данный набор директив будет запрещать доступ для всех адресов, кроме 199.35.209.1.

  • remote_access_groups — группы пользователей, которым разрешено выполнять подключение.

    Доменные группы пользователей рекомендуется указывать в формате, поддерживаемом Samba: DOMAIN\username. Например, для группы пользователей Local Users в домене localdomain указание группы должно выглядеть следующим образом: LOCALDOMAIN\Local Users.

    Также если параметры конфигурации задаются в файле со специальным форматированием, необходимо экранировать спецсимволы. Например, для формата JSON экранируется символ \: LOCALDOMAIN\\Local Users.

Особенности указания версии пакета

В формуле может быть указана версия устанавливаемого пакета с помощью параметра pkg.version. Этот параметр позволяет контролировать, какая версия пакета будет установлена на целевом хосте.

Указание конкретной версии

Если необходимо установить конкретную версию пакета, укажите ее значение в поле version. Например, для установки пакета osmax-ira-xrdp версии 1.3.0:

remote-access-groups-xrdp:
  lookup:
    pkg:
      name: 'osmax-ira-xrdp'
      version: '1.3.0'
Убедитесь, что указанная версия пакета доступна в репозиториях, настроенных на целевом хосте.
На Astra Linux 1.7 и 1.8 формула автоматически подставит корректное имя пакета (osmax-ira-xrdp-astra1.7-xorg1.20 или osmax-ira-xrdp-astra1.8-xorg1.21), если указанная версия существует в репозитории и xserver-xorg-core установлен.

Использование последней доступной версии

Если поле version оставить пустым или не указывать его, будет установлена последняя доступная версия указанного пакета, доступная в репозитории:

remote-access-groups-xrdp:
  lookup:
    pkg:
      name: 'osmax-ira-xrdp'
      version: ''
На Astra Linux формула выберет последнюю доступную версию с подходящим суффиксом (-astra1.7-xorg1.20 или -astra1.8-xorg1.21), если xserver-xorg-core установлен.

Автоматическое определение версии пакета osmax-ira-xrdp

Для пакета osmax-ira-xrdp существует специальный механизм автоматического определения версии, который учитывает текущую версию xserver-xorg-core на хосте. Если в поле version указана версия с префиксом +xorg, то к ней будет добавляться версия xserver-xorg-core. Например:

remote-access-groups-xrdp:
  lookup:
    pkg:
      name: 'osmax-ira-xrdp'
      version: '1.3.0+xorg'

В этом случае, если текущая версия xserver-xorg-core равна 1.20.11, то будет установлена версия пакета osmax-ira-xrdp вида 1.3.0+xorg1.20.

При использовании специального механизма автоматического определения версии (+xorg) убедитесь, что пакет xserver-xorg-core установлен на хосте.