私はRaspberry PiのRaspbian(Debianベース)でWebサーバーlighttpdを実行しています。サーバーはwww-dataユーザーとして実行されています(確認ps aux
)。次の行を追加しました/etc/sudoers
。
www-data ALL=NOPASSWD:/opt/vc/bin/vcgencmd
vcgencmd
PHPファイルのステータス情報を提供するRaspberry Piでツールを実行する機能
<? echo shell_exec('vcgencmd version'); ?>
sudo
印刷されるのは、vcgencmdが無効な権限で実行されたときに表示される「VCHI初期化に失敗しました」(ユーザーが実行したときに表示される予想バージョン情報の代わりに)です。
ランニングを例に挙げましょう。
<? 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
。