Linux PHP创建文件权限被拒绝
我正在Ubuntu上工作,并试图让一个PHP脚本工作,允许用户输入Youtube视频URL,该脚本将下载flv并使用Youtube E2MP3(我在这里找到:)进行转换。我已经得到了错误,我相信是基于权限的,我想知道最好的和最安全的方式来纠正他们。现在我在打电话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
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进程的用户运行的,因此有两件事:
$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,正如您所描述的。再次感谢:)