Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux PHP创建文件权限被拒绝_Php_Linux_Youtube_File Permissions - Fatal编程技术网

Linux PHP创建文件权限被拒绝

Linux PHP创建文件权限被拒绝,php,linux,youtube,file-permissions,Php,Linux,Youtube,File Permissions,我正在Ubuntu上工作,并试图让一个PHP脚本工作,允许用户输入Youtube视频URL,该脚本将下载flv并使用Youtube E2MP3(我在这里找到:)进行转换。我已经得到了错误,我相信是基于权限的,我想知道最好的和最安全的方式来纠正他们。现在我在打电话 echo system("youtube-dl --output=testfile.flv --format=18 $url"); 只是为了让下载部分正常工作。下一页显示的是 [youtube] Setting language [y

我正在Ubuntu上工作,并试图让一个PHP脚本工作,允许用户输入Youtube视频URL,该脚本将下载flv并使用Youtube E2MP3(我在这里找到:)进行转换。我已经得到了错误,我相信是基于权限的,我想知道最好的和最安全的方式来纠正他们。现在我在打电话

echo system("youtube-dl --output=testfile.flv --format=18 $url");
只是为了让下载部分正常工作。下一页显示的是

[youtube] Setting language
[youtube] xOMEi2g_oEU: Downloading video webpage
[youtube] xOMEi2g_oEU: Downloading video info webpage
[youtube] xOMEi2g_oEU: Extracting video information
[youtube] xOMEi2g_oEU: Extracting video information
在显示其余(无关)输出之前。在apache错误日志中,我得到

ERROR: unable to open for writing: [Errno 13]
    Permission denied: u'testfile.flv.part'

这显然表明存在权限问题。我是否必须将有问题的目录发送给www用户?安全吗?或者我应该改为chmod目录?最终我将把它放在一个面向公众的服务器上,我不希望我的实现中有任何漏洞。非常感谢您的任何建议和回答

这是作为运行php进程的用户运行的,因此有两件事:

  • 确保此用户有权访问您将测试文件写入的目录。我将指定一个独立的路径,而不是它现在似乎正在执行的web服务器目录结构的一部分
  • $url
    是否来自用户输入?如果是,我将对整个字符串使用
    escapeshellcmd
    ,以确保其中没有随机
    rm-rf*
    命令

  • chown只能由超级用户使用,所以如果方便的话,您可以使用它,但是服务器通常不会以超级用户的身份运行,所以我会选择chmod

    两个@Wes的建议都值得遵循;您不希望一些傻瓜提供像
    |nc-l 8888 | sh&
    这样的url,然后在一秒钟后登录到您的系统

    我强烈建议使用、或等工具限制您的配置。任何这些工具都可以防止应用程序在特定位置写入、执行任意命令、读取私有数据等


    我在AppArmor系统上工作了十年,这是我最熟悉的系统;我相信您可以在半天左右的时间内完成部署的配置文件。(这大约需要十到十五分钟,但正如我所说,我已经在AppArmor上工作了十年。

    忘了提及,我在这里查看了youtube dl源代码:脚本似乎正在使用urllib2进行文件下载,我怀疑这是否非常相关,因为我很确定这是一个什么用户正在执行命令的问题,删除他们允许的权限。我会如何找到运行php进程的用户?如果在我的脚本中,我把“echo exec(“whoami”);”放在上面,它会打印www用户吗?我将创建一个新文件夹/var/videofiles/,如何确保用户有权访问它?chmod it?在谷歌搜索之后,我使用了ps-aux | grep-apache,用户是www-data,所以这就是运行apache/php的用户?我的目录/var/videofiles/在其权限的最右边的3列中有r-x,我是否应该对其进行chmod,以便该部分显示为rw-?我阅读了wikipedia MAC页面的前几段并浏览了AppArmor站点。。。我了解MAC的基本概念,但apparmor网站让我不知所措。我正在做的只是一个基本的LAMP脚本加上youtube2mp3功能,我真的不知道从哪里开始保护它,我已经做了输入验证和消毒,但我相信安装AppArmor不会有什么坏处。@dude,也许在一个较小的程序上通过示例学习会有所帮助;尝试
    apt get install xpdf
    安装旧的
    xpdf
    PDF查看器,然后在一个终端中运行
    aa genprof xpdf
    ,在另一个终端中运行
    xpdf/path/to/a/file.PDF&
    。回答问题,重新启动程序几次,尝试一下,过一会儿再看是否有意义。:)使用
    rm/etc/apparmor.d/usr.bin.xpdf,您随时可以恢复到原来的状态/etc/init.d/apparmor reload
    。谢谢@sarnold,现在我正急于获得概念验证,希望能在今年夏天获得一个软件开发实习机会,但一旦我得到了应用程序和一个合理的演示分发,我将回到您的评论和学习apparmor,正如您所描述的。再次感谢:)