Серверная веб-система для управления несколькими СКУД-контроллерами Z5RWeb.
- неограниченное число ключей
- неограниченное число контроллеров
- мониторинг событий
- проксирование событий посредством http-запросов
- ограничение доступа по IP как для действий, так и для логинов
- разные права доступа для разных логинов
- двухфакторная аутентификация (TOTP, Email, Bitcoin)
- HTTP-JSON API
- Контроллеры СКУД могут находиться за NAT
- Мультиязычность (русский, английский)
- Подготовьте минимальный веб-сервер с поддержкой PHP и MySQL. Например, по вот этому мануалу:
Системные требования - любые, где сможете запустить. По софту - рекомендуется 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'
- Залогиньтесь в веб-систему с пустым паролем и назначьте новый пароль.
- Подключитесь к серверу по SSH, введите команду
-
Как давно используется и почему не выкладывалась раньше ?
- Написана в 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 будут рассматриваться только при наличии времени на это.