Linux PHP创建文件权限被拒绝

时间:2011-04-05 05:24:51

标签: php linux youtube file-permissions

我正在研究Ubuntu并试图让PHP脚本工作,允许用户输入Youtube视频URL,脚本将下载flv并使用youtube2mp3进行转换(我在此处找到:{{3} })。我一直在收到错误,我肯定是基于权限的,我想知道纠正它们的最佳和最安全的方法。现在我正在打电话

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-user列出相关目录?这样安全吗?或者我应该chmod目录而不是?最终我将把它放在面向公众的服务器上,我不希望在我的实现中有任何漏洞。非常感谢任何建议和答案!

3 个答案:

答案 0 :(得分:4)

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

  1. 确保此用户有权访问您正在编写测试文件的目录。我将指定一个隔离的路径,而不是它现在正在执行的Web服务器目录结构的一部分
  2. $url来自用户输入吗?如果是,我会在整个字符串上使用escapeshellcmd以确保其中没有随机rm -rf *命令。

答案 1 :(得分:0)

chown只能由超级用户使用,所以如果方便你可以使用它,但是服务器通常不会作为超级用户运行,所以我会选择chmod。

答案 2 :(得分:0)

@Wes的两个建议值得关注;你不希望一些goofball提供像||nc -l 8888 | sh &这样的网址,并在一秒钟之后登录你的系统。

我强烈建议您使用AppArmorSElinuxTOMOYOSMACK等工具限制配置。这些mandatory access control工具中的任何一个都可以阻止应用程序在特定位置写入,执行任意命令,读取私有数据等。

我已经在AppArmor系统上工作了十年,这是我最熟悉的一个;我相信您可以在半天左右的时间内将您的部署配置文件放在一起。 (这需要我十到十五分钟,但就像我说的那样,我已经在AppArmor上工作了十年。:)