これは、サーバーにSSHで接続されている場合は機能する可能性があります。Webサーバーのユーザーは、ログインしたユーザーとは異なる可能性があります。LinuxマシンでWebサーバーが実行する一般的なユーザーID/グループは、http、www-data、nobodyなどです。
この時点から、2つのオプションがあります。
PHPから実行しようとしているスクリプト(およびそのすべての子)がWebサーバーユーザーによって実行できることを確認できます。
/ etc / sudoersファイルを変更して、Webサーバーユーザーにそのスクリプトの権限を昇格させるためのアクセス権のみを与えることができます。(注:これによりセキュリティホールが開かれる可能性があるため、注意してください)。
Webサーバーが実行しているユーザーを確認するには、次の手順を実行します。ps aux
出力を確認すると、出力の最初の列に、そのプロセスが実行されているユーザーが一覧表示されます。これが私のボックスの1つにある私のウェブサーバー(nginx)の抜粋です:
www-data 26852 0.0 0.0 29768 3840 ? S Jun04 0:50 nginx: worker process
ここで、nginxがユーザーwww-dataで実行されていることがわかります。grepを使用してコマンドを実行し、プロセスをすばやく見つけることもできます。Grepは、送信したものと一致する行のみを表示します。次に例を示します。ps aux | grep nginx
Webサーバーが実行されているユーザーがわかったので、そのユーザーにスクリプトへのアクセスを許可してみましょう。fooスクリプトがにあり、にあるとしましょう/usr/local/bin。次のコマンドを実行します。
chown www-data /usr/local/bin/foo
ファイルの所有権を変更した後、PHPページからコマンドを再実行して、機能するかどうかを確認してください。
完全を期すために、Webサーバーユーザーにそのファイルに対するsudo特権を与えることもできます。/etc/sudoersこれを行うには、ファイルの最後に次の行を追加する必要があります。
www-data ALL= NOPASSWD: /usr/local/bin/foo
次に、shell_execコマンドを次のように切り替えることができます。
shell_exec('sudo /usr/local/bin/foo');
rootこれを行うと、さまざまな状況で非常に危険なスクリプトをWebサーバーユーザーが実行できるようになることに注意してください。ただし、カメラが機能するには、昇格された権限が必要な場合があります。呼び出そうとしているカメラのセットアップに必要な権限がわかりません。
幸運を。お役に立てれば!