Добавление www-data в /etc/sudoers не работает для PHP shell_exec() для запуска команды

Добавление www-data в /etc/sudoers не работает для PHP shell_exec() для запуска команды

Я запускаю веб-сервер lighttpd на Raspbian (основанный на Debian) на Raspberry Pi. Сервер работает как пользователь www-data (проверено с помощью ps aux). Я добавил следующую строку в /etc/sudoers:

www-data ALL=NOPASSWD:/opt/vc/bin/vcgencmd

чтобы иметь возможность запустить vcgencmdинструмент с Raspberry Pi, который выдает информацию о состоянии из PHP-файла с

<? echo shell_exec('vcgencmd version'); ?>

Все, что он выводит, это «VCHI initialization failed» (вместо предполагаемой информации о версии, которая появляется, когда я запускаю его от имени своего пользователя, даже без sudo), что появляется, когда vcgencmd запускается с неправильными разрешениями.

Например, бег

<? echo shell_exec('cat /sys/class/thermal/thermal_zone*/temp'); ?>

работает отлично без каких-либо /etc/sudoersизменений, так что проблем с PHP нет (типа запрещенных shell_execили чего-то в этом роде).

Что еще нужно настроить для выполнения команды?

решение1

Если вы хотите использовать что-то, что вы добавили /etc/sudoers, вам нужно позвонить sudo.

sudoэто просто программа с установленным битом setuid. В ней нет абсолютно ничего особенного, то есть она не вмешивается каждый раз при запуске программы.

Причина, по которой вы можете вызвать, cat /sys/class/thermal/thermal_zone*/tempзаключается в том, что у вас есть доступ на чтение этих файлов. В зависимости от того, как установлены разрешения вашей файловой системы, у вас может быть доступ на чтение, но не обязательно на запись.

Причина vcgencmd versionможет сработать при запуске, поскольку у вашего собственного пользователя есть 2 возможных объяснения:

  1. alias vcgencmd='sudo vcgencmdУ вас в профиле есть , таким образом вы автоматически запускаете sudo.
  2. У вас достаточно прав на файлы, которые vcgencmdнужно обработать. Если вам нужен доступ на запись, а файлы принадлежат группе, членом которой вы являетесь, и у вас есть доступ на запись для этой группы, то вам не понадобится sudo.

Короче говоря, либо измените команду на sudo vcgencmd version. Либо найдите, какие разрешения файла вам нужны для изменения, и измените их.

Связанный контент