Я запускаю веб-сервер 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 возможных объяснения:
alias vcgencmd='sudo vcgencmd
У вас в профиле есть , таким образом вы автоматически запускаетеsudo
.- У вас достаточно прав на файлы, которые
vcgencmd
нужно обработать. Если вам нужен доступ на запись, а файлы принадлежат группе, членом которой вы являетесь, и у вас есть доступ на запись для этой группы, то вам не понадобится sudo.
Короче говоря, либо измените команду на sudo vcgencmd version
. Либо найдите, какие разрешения файла вам нужны для изменения, и измените их.