sudo를 사용하여 PHP에서 쉘 스크립트 실행

sudo를 사용하여 PHP에서 쉘 스크립트 실행

PHP 파일에서 루트로 명령줄 명령을 실행하고 싶습니다. 제 경우에는 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. 이것은 루트 crontab을 제공하고 -l해결책을 모르기 때문에 내가 사용한 라인보다 낫습니다 . 그러나 문제는 남아 있습니다. 출력은 0입니다.

답변1

좋아, 나는 php(apache2)나 php(apache2)에서 실행되는 쉘 스크립트에서 sudo 작업을 수행하는 방법을 알아냈습니다.

비결은 sudo visudo 이런 댓글을 많이 찾았다는 것입니다. 그런데 제가 잘못 사용했어요! sudo 작업을 수행하도록 허용되어야 하는 스크립트는 내 자신의 .sh 파일이 될 수 없습니다. 그러나 명령의 전체 경로입니다.

crontab 및 user:www-data의 경우:

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

누군가가 같은 문제를 안고 있을 때, 그 사람이 나보다 빨리 그 내용을 읽었으면 좋겠다.

관련 정보