Настройка

Настройка приложения после установки: локальные конфиг-файлы, режимы авторизации и аутентификации, а также справочник дополнительных параметров (params).

Настройка производится посредством файлов в папке config/:

  • params-local.php - основные опции приложения: если не указано иное, то настройки вписываются именно сюда. Переопределяет значения по умолчанию из params.php (сам params.php не редактируем - он обновляется вместе с приложением)
  • db-local.php - параметры БД
  • ldap.php - параметры LDAP backend для аутентификации
  • web-local.php - низкоуровневое переопределение параметров Yii движка

Авторизация

Приложение поддерживает следующие режимы авторизации пользователей:

  • Отсутствие контроля прав - в таком режиме выполнять все действия может любой человек получивший веб доступ (ограничения могут быть настроены на уровне авторизации веб сервера или ограничения по IP). Приложение работает в таком режиме по умолчанию
  • Требование аутентификации для работы - для доступа к данным нужно будет пройти аутентификацию, выполнив “Вход”. Для этого должна быть настроена аутентификация и выставлен параметр php 'authorizedView'=>false, //аутентификация достаточна для авторизации
    • false - (по умолчанию) не требовать аутентификацию,
    • true - требовать аутентификацию для работы
  • RBAC - Role Based Access Control, в таком режиме каждому пользователю необходимо задавать разрешения на просмотр, редактирование и изменение доступа пользователей. Для этого должна быть настроена аутентификация и выставлен параметр php 'useRBAC'=>false, //включить RBAC и выдавать права только тем кому они явно назначены
    • false - (по умолчанию) ничего не требовать - у всех полные права
    • true - права назначаются явно каждому пользователю, по умолчанию никто ничего не может (исключение: если при этом authorizedView выключен, просмотр открыт всем — см. таблицу ниже)

Комбинации аутентификации и RBAC:

authorizedView useRBAC результат
false false аутентификации, авторизации и ограничений в правах нет - всем можно все
true false аутентификация требуется, полные права у всех аутентифицированных
false true аутентификация не требуется, просмотр доступен всем (в том числе без входа), права на изменение нужно выдавать явно — действуют они после аутентификации
true true аутентификация требуется, и никаких прав по умолчанию нет, все права нужно выдавать явно

Аутентификация

Чтобы пользователь мог вводить пароль, надо их где-то хранить, вариантов всего два

Local backend

Хэши паролей (bcrypt) будут храниться прямо в БД. Для включения такого режима нужно выставить параметр

'localAuth'=>true,          //включить локальную БД паролей

LDAP backend

Для этого локальное хранение паролей должно быть отключено:

'localAuth'=>false,         //включить локальную БД паролей

Настройки LDAP указываются следующим образом: нужно создать файл config/ldap.php следующего содержания:

<?php
return [
    'class' => \app\components\ldap\LdapService::class,
    'connection' => [
        'port'           => 636,        // 636 = LDAPS (use_ssl); для 389 см. ниже
        'hosts'          => ['dc1.domain.local', 'dc2.domain.local'],
        'account_suffix' => '@domain.local',
        'base_dn'        => 'DC=domain,DC=local',
        // под кем подключаться к AD (подойдёт любой пользователь, права админа не нужны)
        'username'       => 'inventory@domain.local',
        'password'       => 'SuperSecretPassword1!',
        'use_ssl'        => true,       // LDAPS на 636
        'use_tls'        => false,      // STARTTLS на 389 (взаимоисключающе с use_ssl)
        'timeout'        => 5,
        'options'        => [
            LDAP_OPT_X_TLS_REQUIRE_CERT => LDAP_OPT_X_TLS_NEVER,
        ],
    ],
];

Доступ к AD реализован компонентом app\components\ldap\LdapService (поверх directorytree/ldaprecord). Проверить настройку против живого контроллера домена:

php yii ldap/ping                     # доступность DC и bind сервисной учётки
php yii ldap/account <login>          # справка об учётке (OU, срок пароля, статус)
php yii ldap/auth <login> <password>  # проверка логина/пароля

Недоступность DC не роняет вход 500-й ошибкой: на странице входа будет сообщение «Служба аутентификации временно недоступна».

Быстрый старт

  • Стартуем приложение без контроля доступа php 'authorizedView'=>false, 'useRBAC'=>false,
  • Заводим пользователя вручную (на этом этапе для этого не нужно ни полномочий ни авторизации), допустим это пользователь pupkin
  • Настраиваем аутентификацию (включаем локальную или настраиваем LDAP)
  • В случае локальной аутентификации создаем(сбрасываем) пароль созданному пользователю pupkin
  • Включаем RBAC php 'useRBAC'=>true,
  • Если роль admin еще не создана (при установке шаг «Роли» был пропущен) — создаем: bash php yii rbac/init либо при работе в докер контейнере bash docker exec -it "arms-arms-app-1" php yii rbac/init
  • Выдаем pupkin права админа из консоли bash php yii rbac/grant admin pupkin либо при работе в докер контейнере bash docker exec -it "arms-arms-app-1" php yii rbac/grant admin pupkin
  • Авторизуемся под pupkin
  • ???
  • PROFIT

Params

Дополнительные параметры определяются в файле config/params-local.php в формате

<?php
return [
    'param'=>'value',
];

Значения по умолчанию (и полный перечень параметров) можно посмотреть в файле config/params.php.

Авторизация/аутентификация

  • authorizedView: true|false требовать авторизации для работы с системой
  • useRBAC: true|false использовать разграничение прав на базе ролей
  • localAuth: true|false использовать локальную БД паролей для авторизации (иначе LDAP)

Настройки генератора номеров оборудования

  • techs.invNumStrPads: количество знаков числовой части инвентарного номера в зависимости от количества префиксов. Default: [9,6,4] - без префикса 9, с одним префиксом 6, с двумя 4; последнее значение действует и для большего числа префиксов.

    Пример:

    000000001 //0 префиксов - 9 цифр
    МСК-000001 //1 префикс - 6 цифр
    МСК-ПРН-0001 //2 префикса - 4 цифры
    МСК-IT-ПРН-0001 //3 префикса также 4 цифры
    
  • techs.prefixFormat: формат автоматического формирования префикса инв. номера. Default: ['place','org','type'] - сначала префикс помещения, потом организации-владельца оборудования, потом тип оборудования
  • techs.invNumMaxLen: максимальная длина в которую будет пытаться уложиться формирование инв. номера уменьшая по возможности. Default: 15 (Внимание, макс. размер поля - 16 знаков)
  • techs.hostname.enable: включить атрибуты hostname,domain для оборудования (по умолчанию у оборудоания нет сетевого имени)
  • techs.hostname.asName: использовать в качестве отображаемого имени оборудования hostname, если заполнено. По умолчанию включено

Дополнительная маркировка

  • techs.uidLabel: название дополнительной маркировки оборудования. Напр. QR-код, Штрих-код. Default: Доп. маркировка
  • techs.uidHint: подсказка для заполнения дополнительной маркировки оборудования. Default: Какая-либо дополнительная маркировка нанесенная на оборудование

Сети

  • networkDescribeSegment: показывать описание сегмента сети на страничке сети. Default: auto
    • true - да
    • false - нет
    • auto - если нет описания самой сети
  • networkInlineDescriptionLimit: максимальное количество строк описания сети которое выводить прямо на страничку. Все что больше будет скрыто во вкладку на страничке. Default: 20

Домены

  • domains.default: какой домен подставлять в ОС и оборудование, если домен явно не указан. Default: workgroup
  • domains.fqdn_hostname: true|false отображать hostname как FQDN (иначе как DOMAIN\host). Default: false

Подразделения

  • departments.enable: включить использование функциональных подразделений (если оргструктура организаций не отображает функционального разделения на отделы)
    • true - включить
    • false - выключить (по умолч.)

Ответственные/поддержка

  • support.service.min.weight: минимальный вес сервиса, необходимый для учета его команды как поддержка узла/оборудования на котором он живет. Например если задать тут 20, то команда сервиса весом в 10 не будет считаться поддержкой серверов и оборудования сервиса (предполагается что там должны быть более весомые сервисы для этого)
  • techs.managementService.enable: вместо закрепления сотрудника ИТ за оборудованием закреплять сервис/услугу сопровождения оборудования (удобно если оборудования много и надо менять ответственного везде: проще поменять одного ответственного за сервис)
  • services.no_backup.warn: true|false предупреждать, если у сервиса не объявлены требования на резервное копирование. Default: true

Пользователи

Софт

  • soft.deferred_rescan: отложенный рескан софта. Распознавание ПО в отпечатке (regexp-скан) — процедура медленная: и при изменении продукта в справочнике ПО (надо пересканировать все подходящие ОС), и при обновлении ОС с большим списком пакетов (push с linux-машин).

    • true - отложенный режим: сканирование не выполняется в момент запроса, вместо этого задание ставится в очередь comps_rescan_queue — как при изменении продукта в справочнике ПО, так и при обновлении отпечатка/паспорта самой ОС (push, правки). Обязательно через cron регулярно вызывать команду yii comps/rescan, которая обрабатывает очередь по 100 ОС за раз, иначе состав обнаруженного ПО перестанет обновляться.
    • false - realtime режим: сканирование выполняется прямо в запросе — при изменении элемента справочника ПО пересканируются все подходящие ОС, при push/правке ОС — эта ОС.

    В обоих режимах сохранение ОС без изменения отпечатка софта и паспортного ПО скан не запускает (например, ручная правка полей ОС или повторный push с тем же списком пакетов).

    Пример cron:

    */5 * * * *  php yii comps/rescan     # обработка очереди рескана (нужно при deferred_rescan=true)
    

Интеграция с Wiki

  • wikiUrl: адрес dokuWiki для интеграции
  • wikiUser: логин для подключения к dokuWiki
  • wikiPass: пароль для подключения к dokuWiki
  • confluenceUrl, confluenceUser, confluencePass: аналогичные параметры для подключения Confluence (см. интеграцию с wiki)

Документы

  • docs.pay_id.enable - Использовать поле для идентификации документа в реестре оплат (для отслеживания оплаты)
  • docs.pay_id.name - Наименование ключа в реестре оплат ЗНП
  • docs.name.instruction - Инструкция для правильного формирования имени документа
  • docs.max_preview_size - Предельный размер документа больше которого он не подгружается в форму просмотра, а требует клика для открытия.

Оповещения

Механизм e-mail-оповещений (очередь — Уведомления): события (смена статуса документа) и сторожевые правила ставят письма в очередь, отправку делает по cron команда yii notify/send. По умолчанию выключен — включается только осознанно, вместе с настройкой почты и cron.

  • notify.enable: true|false мастер-рубильник всего механизма. Default: false — события и правила не ставят письма в очередь.
  • notify.docs.state.enable: true|false точечный выключатель событийных писем о смене статуса документа. При false статусные письма не ставятся, но правила notifyRules продолжают работать. Действует только при включённом notify.enable. Default: true
  • mailer.useFileTransport: true|false true = складывать письма в runtime/mail вместо реальной отправки (режим отладки). Default: true — для боевой отправки выставить false и настроить транспорт.
  • mailer.transport: параметры SMTP, например ['scheme'=>'smtp','host'=>'mail.example.com','port'=>25]
  • mailer.from: адрес отправителя писем. Default: пусто — используется adminEmail.
  • web.hostInfo: базовый URL приложения (например https://arms.example.com) для абсолютных ссылок в письмах. Без него письма, поставленные из консоли (notify/watch), уходят без ссылок на объекты.
  • notifyRules: декларативные правила оповещений о «залежавшихся» объектах для yii notify/watch — формат, возможности условий, дедупликация и повторы описаны на отдельной странице Сторожевые правила оповещений. Короткий пример:

    'notifyRules'=>[
      'contract-stale-new'=>[
          'class'=>\app\models\Contracts::class,
          'condition'=>['state_id'=>1],   //массив для andWhere() либо callable(ActiveQuery)
          'age'=>'1 day',                 //не менялся дольше (по updated_at)
          'subject'=>'Документ «{name}» завис в статусе «Новый»',
          'repeat'=>'3 days',             //повторное письмо не чаще; не указано = однократно
      ],
    ],
    

Команды для cron:

*/5 * * * *  php yii notify/send      # отправка очереди
0 * * * *    php yii notify/watch     # прогон правил notifyRules
0 3 * * *    php yii notify/cleanup   # чистка отправленного старше 90 дней

Мониторинг производительности

Журнал медленных запросов, ежесуточный отчёт по access-логу и алертинг в Zabbix — механизм и включение описаны на отдельной странице Мониторинг производительности.

  • perf.slow_request_seconds: порог журнала медленных запросов (runtime/logs/perf.log), сек; 0 = выключить. Default: 3
  • perf.access_log: маски access-логов Apache для отчёта yii perf/report (список через запятую, glob; .gz читается прозрачно). Default: **/var/log/apache2/inventory.http_access.log***

Документация

  • docsOverridePath: путь к каталогу переопределения встроенной документации. Встроенная справка приложения - MD-файлы в docs/help; если указать здесь каталог с той же структурой, его страницы будут иметь приоритет над встроенными (можно переопределять и дополнять справку под свою организацию).