私は Raspberry Pi 上の Raspbian (Debian ベース) でウェブサーバー lighttpd を実行しています。サーバーはユーザー www-data として実行されます ( で確認済みps aux
)。 に次の行を追加しました/etc/sudoers
:
www-data ALL=NOPASSWD:/opt/vc/bin/vcgencmd
vcgencmd
PHPファイル内からステータス情報を提供するツールをRaspberry Piから実行できるようにするには
<? echo shell_exec('vcgencmd version'); ?>
出力されるのは、「VCHI の初期化に失敗しました」という内容だけです ( がなくても自分のユーザーで実行したときに表示されるバージョン情報ではなく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
、変更する必要があるファイル権限を見つけて変更します。