Так что проблема в том, что ошибка появляется в apache.err.
Я могу выполнить как пользователь в оболочке.
root@ubuntu:~# su www-data
www-data@ubuntu:/root$ sudo /usr/local/bin/metronomectl restart
Stopped
Started
www-data@ubuntu:/root$
но когда я пытаюсь ту же команду через php
exec('sudo /usr/local/bin/metronomectl restart');
я понял ошибку
sudo: PERM_ROOT: setresuid(0, -1, -1): Operation not permitted
Пользователь www-данных находится в sudoers.
Я в конце моего ума здесь …
Любая помощь приветствуется.
PS. Пожалуйста, спросите, нужна ли вам дополнительная информация.
редактировать:
root@ubuntu:~# uname -a
Linux ubuntu 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
root@ubuntu:~#
линия sudoers:
www-data ALL= NOPASSWD: /usr/local/bin/metronomectl
Вместо прямого отключения mpm-itk, вы можете просто отключить его ограничения на sudo:
<IfModule mpm_itk_module>
# Permit using "sudo"LimitUIDRange 0 65534
LimitGIDRange 0 65534
</IfModule>
Исправлено отключением модуля mpm_itk в apache.
Поскольку mpm-itk должен быть в состоянии setuid (), он запускается от имени пользователя root (хотя по возможности ограничен возможностями POSIX и seccomp v2)
Похоже, что поддержка seccomp v2 (в Linux 3.5.0 или новее) полностью нарушает работу таких вещей, как sudo
или же crontab
так как они используют setuid
системный вызов внутри.
Обходной путь не использовать mpm_itk
или избегайте выполнения таких двоичных файлов.
Refs: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=738131