Zabbix: настройка VirtualHost в Apache + suEXEC

Автор: | 09/15/2014
 

zabbix_logoПри установке Zabbix создаёт свой файл конфигурации для Apache/etc/httpd/conf.d/zabbix.conf.

Сохраняем копию:

# mv /etc/httpd/conf.d/zabbix.conf /etc/httpd/conf.d/zabbix.conf.default

Создаём новый файл для Apache:

# cat /etc/httpd/conf.d/zabbix.domain.org.ua.conf
<VirtualHost 127.0.0.1:8080>
  DocumentRoot /usr/share/zabbix/
  ServerName zabbix.domain.org.ua
  ServerAlias www.zabbix.domain.org.ua
  CustomLog /var/log/httpd/zabbix.domain.org.ua-access.log combined
  ErrorLog /var/log/httpd/zabbix.domain.org.ua-error.log

  <IfModule mod_fcgid.c>
    SuexecUserGroup zabbix zabbix
    <Directory /usr/share/zabbix/>
      Options +ExecCGI
      AllowOverride All
      AddHandler fcgid-script .php
      FCGIWrapper /var/www/php-cgi/zabbix/zabbix.domain.org.ua/php.cgi .php
      Order allow,deny
      Allow from all
    </Directory>
  </IfModule>
</VirtualHost>

И для NGINX:

# cat /etc/nginx/conf.d/zabbix.domain.org.ua.conf
server {
 listen 80;
 server_name zabbix.domain.org.ua wwww.zabbix.domain.org.ua;

 location ~ /.ht {
     deny all;
 }

 location ~* .(jpg|swf|jpeg|gif|png|css|js|ico)$ {
     root /usr/share/zabbix;
 }

 location / {
     proxy_pass http://127.0.0.1:8080;
 }

}

Файл-обработчик для FCGID создаём как обычно.

Меняем владельца директорий:

# chown -R zabbix:zabbix /var/www/php-cgi/zabbix.domain.org.ua/
# chown -R zabbix:zabbix /usr/share/zabbix/

Запускакем Apache и получаем ошибку от suEXEC:

# tail -f /var/log/httpd/suexec.log
[2014-09-15 12:35:09]: uid: (494/zabbix) gid: (494/zabbix) cmd: php.cgi
[2014-09-15 12:35:09]: cannot run as forbidden uid (494/php.cgi)

Возникает она из-а того, что UID пользователя zabbix меньше, чем разрёшенный для suEXEC, который задаётся опцией AP_UID_MIN:

# suexec -V
 -D AP_DOC_ROOT="/var/www"
 -D AP_GID_MIN=100
 -D AP_HTTPD_USER="apache"
 -D AP_LOG_EXEC="/var/log/httpd/suexec.log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=500
 -D AP_USERDIR_SUFFIX="public_html"

Есть два варианта решения проблемы. Пересобрать suEXEC с установленным AP_UID_MIN меньше, чем 494 (текущий UID zabbix-а), либо — переназначить пользователю новый UID.

Выберем второй вариант.

Текущий UID:

# id zabbix
uid=494(zabbix) gid=494(zabbix) groups=494(zabbix)

Останавливаем все связанные службы (иначе при изменении данных пользователя получим ошибку типа «user already logged in»):

# service zabbix-server stop
Shutting down Zabbix server: [ OK ]
# service zabbix-agent stop
Shutting down Zabbix agent: [ OK ]
# service httpd stop
Stopping httpd: [ OK ]
# service nginx stop
Stopping nginx: [ OK ]

Меняем UID:

# usermod -u 510 zabbix

Т.к. мы изменили UID — надо переназначить пользователя на все связанные с Zabbix директории:

# ls -l /var/run/
total 104
...
drwxr-xr-x 2 494 zabbix 4096 Sep 15 15:12 zabbix

Ещё раз выполняем chown:

# chown -R zabbix /var/www/vhosts/zabbix/
# chown -R zabbix /var/www/php-cgi/zabbix
# chown -R zabbix:zabbix /usr/share/zabbix/
# chown -R zabbix:zabbix /etc/zabbix

Запускаем службы:

# service nginx start
Starting nginx: [ OK ]
# service httpd start
Starting httpd: [ OK ]
# service zabbix-agent start
Starting Zabbix agent: [ OK ]
# service zabbix-server start
Starting Zabbix server: [ OK ]

Проверяем лог suEXEC:

# tail /var/log/httpd/suexec.log
[2014-09-15 15:15:46]: uid: (510/zabbix) gid: (494/zabbix) cmd: php.cgi

Всё работает.