从 php 中使用 sudo 执行 shell 脚本

从 php 中使用 sudo 执行 shell 脚本

我想以 root 身份从 php 文件执行命令行命令。就我而言,我想在我的 php 页面中查看 crontab 文件。

sudo不建议在 php 中运行命令,在我的树莓派和树莓派操作系统上运行 php 行

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

不起作用。所以我创建了一个shell脚本:

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

我能做些什么?我有一个 cron,用于每小时rsync将文件复制crontab -e到一个文件。cron.txt它有效,但我不想查看(旧的)副本。

编辑:我的问题是以 sudo 启动的任务输出为零。在评论中我得到了使用的建议sudo crontab -l。这比我使用的行更好,因为它提供了 root crontab,而我只是不知道-l解决方案。但问题仍然存在。输出为零。

答案1

好的,我找到了如何在 php (apache2) 或从 php (apache2) 执行的 shell 脚本中执行 sudo 任务。

诀窍在于sudo visudo 我发现很多这样的评论。但我用错了!应该允许执行 sudo 任务的脚本不能是我自己的 .sh 文件。但命令的完整路径。

对于 crontab 和 user:www-data 即:

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

当有人遇到同样的问题时,我希望他们比我更快地阅读。

相关内容