Skip to content

Latest commit

 

History

History
164 lines (130 loc) · 16.2 KB

README.md

File metadata and controls

164 lines (130 loc) · 16.2 KB

ACSWebAdmin

English readme

Серверная веб-система для управления несколькими СКУД-контроллерами Z5RWeb.

ACSWebAdmin ACSWebAdmin_keys

Возможности

  • неограниченное число ключей
  • неограниченное число контроллеров
  • мониторинг событий
  • проксирование событий посредством http-запросов
  • ограничение доступа по IP как для действий, так и для логинов
  • разные права доступа для разных логинов
  • двухфакторная аутентификация (TOTP, Email, Bitcoin)
  • HTTP-JSON API
  • Контроллеры СКУД могут находиться за NAT
  • Мультиязычность (русский, английский)

Установка и системные требования

  • Подготовьте минимальный веб-сервер с поддержкой PHP и MySQL. Например, по вот этому мануалу:

https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-ubuntu-18-04-ru

Системные требования - любые, где сможете запустить. По софту - рекомендуется Linux / BSD актуальных версий, nginx, php8, mysql Windows тоже можно, но не проверялось.

  • Установите помимо php-mysql также пакеты php-gd (для qr-кодов totp), php-gmp (для bitcoin-2fa), php-mbstring, php-curl
  • Создайте в базе данных mysql-пользователя и назначьте ему права доступа:

CREATE USER 'z5r'@'localhost' IDENTIFIED BY 'z5r-my-good-password';

`GRANT SELECT,UPDATE,INSERT,DELETE ON z5r.* TO 'z5r'@'localhost';

  • Скопируйте содержимое каталога www из архива в каталог веб-хоста

  • Восстановите из файла z5r.sql дамп базы данных z5r

  • Откройте конфиг www/options.php на сервере и проверьте, что там прописаны правильные параметры для соединения с базой данных. Исправьте параметр $sess_secret_salt в конфиге на длинную случайную строку. Установите нужный язык интерфейса в параметре localization из списка. Пулл-реквесты с файлами новых локализаций приветствуются.

  • Откройте страничку веб-сервера в браузере и попробуйте залогиниться с пустым паролем под логином admin. При первом логине будет предложено задать новый пароль.

Использование

  • Создайте логины операторов и назначьте им права доступа.
  • Для настройки контроллера откройте его веб-интерфейс, выберите режим работы WEB-JSON. В качестве адреса сервера укажите адрес, где установлен ACSWebAdmin. Например, это может быть http://acs-admin.local/z5r/ Логин и пароль указывать не надо, текущие версии прошивок его не передают.
  • !! На текущий момент контроллеры не умеют HTTPS !! Соединение контроллер <--> ACS будет на порт 80 по http нешифрованному.
  • Для шифрованных соединений пользователей к ACSWebAdmin настройте HTTPS на веб-сервере.

Зачем такая софтина нужна ?

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

Контроллеры СКУД модели Z5RWeb имеют несколько вариантов управления. Из основных - встроенный веб-интерфейс, который позволяет настраивать лишь базовые параметры (тип подключения, пароль, время), и софт типа Guard Lite / Guard Commander, который настраивает всё остальное (ключи, доступы, расписания). Однако этот софт а) требует виндовс-среду и таскать с собой приложение б) работает через проброс последовательного порта по сети без авторизации вообще. ACSWebAdmin использует третий режим работы контроллеров - Web-JSON. В этом случае контроллеры ходят за командами и настройками на наш сервер раз в 10 секунд, и оттуда получают уже команды для управления ключами и доступами. Данный софт позволяет разным операторам выдать разные уровни доступа при работе с такими контроллерами.

Частые вопросы

  • Можно ли использовать на мобилке / планшете ?

    • Именно для этого и писалось.
  • Я забыл пароль админа/суперпользователя или отключил доступы. Как сбросить пароль / воосстановить права доступа ?

    • Подключитесь к серверу по SSH, введите команду mysql для соединения с базой данных. Используйте root-пароль для MySQL или данные из конфига.
    • выберите базу данных: USE z5r;
    • Просмотрите список операторов: SELECT id, login FROM logins
    • Для выбранного пользователя поставьте пустой пароль: UPDATE logins SET password = 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', salt1 = '', salt2 = '' WHERE login = 'admin'
    • Включение логина пользователю и восстановления прав: UPDATE logins SET enable = '1', allow_manage_logins = '1' WHERE login = 'admin'
    • Залогиньтесь в веб-систему с пустым паролем и назначьте новый пароль.
  • Как давно используется и почему не выкладывалась раньше ?

    • Написана в 2021 для собсвенных нужд, с 2022 в паблике.
  • Что за пользователи созданы по умолчанию ?

    • Только admin с полными правами
  • Как ограничивается доступ ?

    • Для каждого контроллера можно задать IP/подсети, откуда допустимо принимать соединения
    • Для каждого логина можно задать IP/подсети, откуда разрешён логин
    • Можно ограничить список IP, с которых разрешено управлять ключами / открывать двери командой.
    • Для каждого логина можно помимо пароля включить двухфакторную аутентификацию.
  • Должен ли ACSWebAdmin быть постоянно доступен контроллерам ?

    • Не обязательно. ACSWebAdmin не переводит контроллеры в режим онлайн-проверки ключей. При недоступности веб-системы все ранее добавленные ключи и доступы будут работать. Однако команды на добавление / удаление / смену расписания доступа ключей не будут выполнены, пока контроллер не пообщается с системой. В случае MEMORY-таблиц рестарт сервера при длительном отсутствии связи с контроллерами может стереть запланированные команды. В этом случае действия по смене конфигурации потребуется повторить.
  • Как настроить расписание доступа по времени через ACSWebAdmin ?

    • Пока что только передачей TZ-параметра, который есть битовая маска. Текущее JSON-API контроллера не позволяет как-либо управлять расписанием. Используйте 0 для запрета доступа, и 255 - для доступа в любое время.
    • Если расписание всё-таки надо. Переведите контроллер в режим работы "Сервер" c помощью встроеного веб-интерфейса. Софтом Guard Commander подключитесь к контроллеру из доверенной сети и настройте расписания. Их может быть не более 8
    • Переведите контроллер обратно в режим "Web-JSON"
    • При необходимости залейте заново параметры доступа через веб-интерфейс. Подробнее тут: https://ironlogic.ru/il_new.nsf/file/ru_Protocol_WEBJSON_v7.pdf/$FILE/Protocol_WEBJSON_v7.pdf
  • Можно ли управлять блокирующими/мастер ключами ?

    • Нет. Все ключи на текущий момент считаются обычными. Но в БД поддержка других типов ключей заложена, в будущих версиях возможно будет добавлено.
  • Будет ли развитие системы ?

    • Вполне, по мере наличия интереса и реальных потребностей
  • В чём суть и почему именно веб ?

    • веб - кроссплатформенный. Суть в том, что операторы скуд не имеют прямого доступа к контроллерам в технологические сети.
    • можно сделать пользователя, который будет иметь возможность накатывать ключи, не раскрывая их.
    • можно сделать пользователя с правами только на просмотр данных.
  • Можно ли использовать для нескольких контроллеров / офисов ?

    • Да, есть возможность разделить контроллеры по офисам / филиалам.
  • Надо ли чистить и обслуживать БД ?

    • На ваш выбор, зависит от объёма событий. Можете с помощью веб-интерфейса типа Adminer удалить старые записи из таблиц events и queue_commands.
    • Если вам нужно только управление, без отчётности, можно поменять тип таблиц events и queue_commands на MEMORY В этом случае при рестарте сервера логи событий и отправленных контроллерам команд будут почищены автоматически.
    • Ещё более агрессивный вариант - для таблиц last_state и last_activity_keys также поставить тип MEMORY. В этом случае рестарт сервера очистит также данных о последем времени использования ключа и состоянии контроллеров. Данные обновятся автоматически по мере опроса контроллеров на предмет новых событий.
    • также можно по крону автоматом чистить старые события: DELETE FROM events WHERE ts < DATE_SUB(NOW(), INTERVAL 40 DAY)
  • Как проверить, что контроллер корректно общается с системой ?

    • в веб-интерфейсе у контроллеров должно обновляться время последней активности, а также время последних событий доступа, статистика.
    • tcpdump -s 65000 -w /tmp/1.pcap 'tcp port http' В дампе траффика должен быть обмен JSON-данными через http Если веб-сервер выдал что-то ещё в вывод, то в ответ на неправильный JSON контроллер может наспамть событиями. В этом случае надо устранить ошибку и почистить события.
    • Включите отладку (опция debug в конфиге) и посмотрите за файлом /tmp/z5r.txt Там будет лог активности
    • посмотрите логи веб-сервера. Не должно быть exception-ов, пятисотых ошибок и тому подобного.
  • Есть ли отчёт по рабочему времени ?

    • На текущий момент добавлены несколько простых отчётов, включая отчёт о присутствии/отсутствии в офисе
    • Точный поминутный отчёт нам не нужен. Однако вы можете проксировать события входа и выхода по карточке на сторонний веб-сервер, передавая туда параметры, и там уже по этим событиям считать что вам надо. Или написать свой отчёт для анализа базы данных.
  • Как добавить свой отчёт ?

    • пусть он будет называться myreport1
    • добавить запись о нём в reports/index.php -- $reports_array
    • создать по аналогии в /reports файл myreport1.php на основе любого имеющегося.
    • в /localization/* внести новые строчки вида $loc_reports_myreport1 = '...'; с названием на разных языках
    • пулл-реквесты с новыми отчётами приветсвуются.
  • Мне нужна новая/дополнительная опция.

    • Кнопка [Fork].
    • Софт писался для себя, поэтому issue будут рассматриваться только при наличии времени на это.