Вход в систему и systemd

Рекомендуется создать пользователя zabbix как системного, то есть без возможности входа в Подсистему. Некоторые пользователи игнорируют эту рекомендацию и используют ту же самую учетную запись для входа (например, используя SSH) на хост с работающим Подсистемой. Это может привести к аварийному останову демона Подсистемы при выходе. В этом случае в журнале Сервера получают примерно следующее:

zabbix_server [27730]: [file:"selfmon.c",line:375] lock failed: [22] Invalid argument
zabbix_server [27716]: [file:"dbconfig.c",line:5266] lock failed: [22] Invalid argument
zabbix_server [27706]: [file:"log.c",line:238] lock failed: [22] Invalid argument

и в журнале Агента:

zabbix_agentd [27796]: [file:"log.c",line:238] lock failed: [22] Invalid argument

Это происходит из-за того, что по умолчанию настройка systemd в файле /etc/systemd/logind.conf равна RemoveIPC=yes. Когда выполняется выход из Подсистемы, ранее созданные компонентами Подсистемы семафоры удаляются, что приводит к сбою.

В случае с systemd:

RemoveIPC=
Controls whether System V and POSIX IPC objects belonging to the user shall be removed when the user fully logs out. Takes a boolean argument. If enabled, the user may not consume IPC resources after the last of the user"s sessions terminated. This covers System V semaphores, shared memory and message queues, as well as POSIX shared memory and message queues. Note that IPC objects of the root user and other system users are excluded from the effect of this setting. Defaults to "yes".

Имеется 2 способа решения этой проблемы:

  • (рекомендуемый) Прекратить использование аккаунт zabbix для чего-либо, кроме процессов Подсистемы, выделить отдельную учетную запись для остальных потребностей.
  • (не рекомендуемый) Задать RemoveIPC=no в /etc/systemd/logind.conf и перезагрузить ОС. Следует обратить внимание, что RemoveIPC является общесистемным параметром, его изменение повлияет на всю ОС.

Если веб-интерфейс работает за Прокси-сервером, путь cookie в файле конфигурации Прокси необходимо переписать, чтобы он соответствовал reverse-proxied path (обратному пути Прокси). Если путь cookie не переписан, пользователи могут столкнуться с проблемами авторизации при попытке войти в веб-интерфейс.

Пример конфигурации для Nginx:

..
location / {
..
proxy_cookie_path /zabbix /;
proxy_pass http://192.168.0.94/zabbix/;
..

Пример конфигурации для Apache:

..
ProxyPass "/" http://host/zabbix/
ProxyPassReverse "/" http://host/zabbix/
ProxyPassReverseCookiePath /zabbix /
ProxyPassReverseCookieDomain host mon.rosa.dev
..