sudoを使用してPHPでシェルスクリプトを実行する

sudoを使用してPHPでシェルスクリプトを実行する

PHPファイルからrootとしてコマンドラインコマンドを実行したいと思います。私の場合は、PHPページでcrontabファイルを見たいと思います。

sudo私のラズベリーパイとラズベリーパイOSの実行PHPラインからPHPにコマンドを実行することはお勧めできません。

echo (shell_exec("sudo more /var/spool/cron/crontabs/pi"));

動作しません。だからシェルスクリプトを作成しました。

crontab.sh

#!/bin/bash
echo "Start Crontab"
sudo more /var/spool/cron/crontabs/pi
echo "End Crontab"

PHPページを作成しました。 crontab.php

<?php
echo "Get Current User: " . get_current_user();
echo "<br>Who am I: ".(exec("whoami"));
echo "<br>";
echo (shell_exec("/var/www/html/cmd/crontab.sh"));
?>

コマンドラインからcrontab.shを実行したとき。うまくいくようです。 crontab テキストを表示するためです。 PHPページを読み込むとき。 crontab テキストは表示されません。私はただ見る

Get Current User: pi
Who am I: www-data
Start Crontab End Crontab

どうですか?毎時間rsyncファイルをcrontab -eファイルにコピーするクローンがあります。cron.txtうまくいきますが(以前)コピーを見たくありません。

編集:私の問題は、sudoで始まったジョブの出力が0であることです。コメントで使用の提案を受けましたsudo crontab -l。これはroot crontabを提供し、-l解決策がわからないので、私が使用した行よりも優れています。しかし、問題は残っています。出力は0です。

答え1

さて、私はphp(apache2)またはphp(apache2)で実行されているシェルスクリプトでsudo操作を実行する方法を見つけました。

秘訣は、sudo visudo このようなコメントをたくさん見つけたということです。しかし、私は間違って使用しました! sudo 操作を実行する必要があるスクリプトは、自分の .sh ファイルにすることはできません。しかし、コマンドのフルパスです。

crontabとuser:www-dataの場合:

www-data ALL=NOPASSWD: /usr/bin/crontab

誰かが同じ問題を抱えているとき、その人が私よりも早くその内容を読んでほしい。

関連情報