Пользователь хочет запустить сервер Apache httpd от пользователя без полномочий root в CentOS / RHEL 7.
Как этого можно добиться с помощью службы под systemd?
Настройка сервера Apache httpd для запуска от пользователя без полномочий root (с использованием службы systemd)
При запуске systemd владелец и права доступа к файлу /run/httpd изменяются из-за файла /usr/lib/tmpfiles.d/httpd.conf.
Он устанавливается вместе с пакетом httpd и не требует включения httpd.service.
Если пользователь без полномочий root попытается запустить службу httpd, он получит ошибку ниже:
$ /usr/sbin/httpd -k start (13)Permission denied: AH00058: Error retrieving pid file /run/httpd/httpd.pid AH00059: Remove it before continuing if it is corrupted.
Следуйте приведенным ниже инструкциям, чтобы настроить Apache httpd для запуска в качестве пользователя без полномочий root (при желании вы также можете настроить его для запуска в качестве службы systemd).
1. Измените настройки пользователя и группы в /etc/httpd/conf/httpd.conf для своего пользователя и группы.
Например, если ваш пользователь и группа myuser и mygroup, используйте настройки ниже.
# vi /etc/httpd/conf/httpd.conf User myuser Group mygroup
2. Установите для порта прослушивания значение выше 1024 в /etc/httpd/conf/httpd.conf.
# vi /etc/httpd/conf/httpd.conf Listen 8080
3. Измените владельца каталога журнала httpd.
# chown -R myuser:mygroup /var/log/httpd
4. Измените владельца каталога /run/httpd.
# chown -R myuser:mygroup /run/httpd
Чтобы сделать это изменение постоянным, необходимо изменить /usr/lib/tmpfiles.d/httpd.conf, чтобы использовать myuser и mygroup, как показано ниже.
$ sudo cat /usr/lib/tmpfiles.d/httpd.conf d /run/httpd 710 myuser mygroup d /run/httpd/htcacheclean 700 myuser mygroup
Примечание. Обновления пакетов вернут изменение в /usr/lib/tmpfiles.d/httpd.conf, поэтому это изменение должно стать частью ваших работ по обновлению.
Настройка apache httpd для запуска в качестве службы под systemd
(Необязательно) Если вы хотите, чтобы Apache httpd запускался как сервис под systemd, вам придется отредактировать файл сервисного блока.
Это делается путем создания системного раскрытия, как показано ниже.
# systemctl edit httpd
Редактор по умолчанию будет открыт автоматически.
Добавьте следующий контент, затем сохраните и выйдите из редактора.
[Service] User=myuser Group=mygroup
Проверка
Остановите httpd, если он уже запущен, затем запустите httpd с помощью приведенной ниже команды. (Как пользователь без полномочий root)
$ /usr/sbin/httpd -k start
Или, если вы выполнили необязательные шаги для использования systemd, запустите службу:
$ systemctl start httpd.service