вместо того, чтобы пытаться дать права sudo пользователю apache/http, обычным способом является создание двоичного файла-оболочки suid, подобного этому:
$ sudo gcc -o suidmotion -xc - <<cEnd
#include "stdlib.h"
#include "string.h"
int main(int argc, char *argv[])
{ if (argc ==2)
{ if (!strcmp(argv[1], "start")) system("/etc/init.d/motion start");
if (!strcmp(argv[1], "stop" )) system("/etc/init.d/motion stop");
}
}
cEnd
$ sudo chmod +s suidmotion
... и чем в php вызыватьshell_exec("/path/to/suidmotion start/stop");
sudo gcc
создаст выходной двоичный файл suidmotion
, принадлежащий root:root
, а chmod +s
гарантирует, что права на двоичный файл при выполнении будут переданы владельцу двоичного файла (root ), независимо от того, кто его запускает.
Я нашел соответствующий код в libinput
, в filter-low-dpi.c
. Я разделил возвращаемое значение функции calculate_acceleration_factor
на 50.0
, затем скомпилировал и установил в соответствии с инструкциями.
Если у вас возникли подобные проблемы, в зависимости от модели мыши вам может потребоваться отредактировать filter-mouse.c
.