【问题标题】:executing a command from php that requires being root从 php 执行一个需要 root 权限的命令
【发布时间】:2017-08-07 09:48:34
【问题描述】:

我想找到解决这个问题的方法:我有一个图像列表,我想在服务器上转换成视频。我用 centOS 创建了一个虚拟机并安装了 ffmpeg 来测试它。当我在终端中输入这一行时,一切正常

sudo ffmpeg -r 10 -i img%03d.png -c:v libx264 -preset veryslow -crf 0 
video.mp4

我想要的是当我点击一个按钮时调用它。代码如下:

Javascript:

$(document).ready(function(){
    $("#ffmpeg").click(function(){
        $.get('ffmpegBooklet.php', function (data) {
            console.log(data);
       });
    });
});

PHP:

echo shell_exec("/usr/local/bin/ffmpeg  -r 10 -i /img%03d.png -c:v 
libx264 -preset veryslow -crf 0 video.mp4 2>&1");

我在浏览器控制台中得到的是: 来自 ffmpeg 的日志,最后 --> Permission denied

我尝试过使用静态构建(在互联网上阅读后),但我遇到了同样的问题。如果没有 sudo 权限,是否有任何解决方案可以做到这一点?我不想以 sudo 或一些棘手的命令通过 php 授予 sudo 权限来执行此操作,因为我认为它不安全。

欢迎任何帮助!感谢阅读:)

【问题讨论】:

  • 不要以 root 身份运行,而是为输出路径设置适当的权限。
  • 好的!权限的问题不是来自 ffmpeg 的执行,而是来自输出?我认为在没有 root 身份的情况下调用程序是问题
  • 我已经尝试使用具有权限的文件夹(chmod 777),我得到了同样的错误:权限被拒绝
  • @P.G 检查输入。而不是777 将组更改为包含php 进程所有者的组,并确保它可以写入。

标签: php ffmpeg centos sudo


【解决方案1】:

这样固定。谢谢你的帮助。

我禁用 SELinux 只是为了检查发生了什么。 FFmpeg 通过 php 的工作就像一个魅力。我检查了创建的文件,所有者和组是 apache:apache。首先,我更改了输入和输出文件夹的所有者并设置了 apache.然后我给了apache的权利。我打开 SELinux 并再次遇到权限问题。我找到了这个解决方案,解决了我的问题:

# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html(/.*)?'

# restorecon -R /var/www/html

我还将我的个人资料添加到 apache 组,因为我无法再访问该文件夹。

现在一切都在 SELinux ON 上运行,这让我很满意。 FFmpeg/apache 不再被屏蔽!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 2020-10-02
    相关资源
    最近更新 更多