Linux的PHP创build文件权限被拒绝

我在Ubuntu上工作,并试图让PHP脚本工作,将允许用户inputYoutubevideoURL,脚本将下载flv并使用youtube2mp3(我在这里find: http ://hubpages.com / hub / Youtube-to-MP3-on-Ubuntu-Linux )。 我一直在得到错误,我确定是基于权限的,我想知道最好和最安全的方法来纠正它们。 现在我正在打电话

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目录呢? 最终我会把这个放在面向公众的服务器上,我不希望我的实现有任何漏洞。 任何和所有的意见和答案,非常感谢!

这是以用户运行php进程的方式运行的,所以有两点:

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

chown只能由超级用户使用,所以如果方便的话可以使用它,但是服务器通常不会像超级用户那样运行,所以我会去chmod。

@韦斯的建议值得关注。 你不想要一些goofball提供像||nc -l 8888 | sh &这样的url ||nc -l 8888 | sh &然后登录到您的系统。

我强烈建议使用诸如AppArmor , SElinux , TOMOYO或SMACK之类的工具来限制您的配置。 任何这些强制访问控制工具都可以阻止应用程序写入特定位置,执行任意命令,读取私人数据等。

正如我在AppArmor系统上工作了十年,这是我最熟悉的一个。 我相信你可以在半天左右的时间内为你部署一个配置文件。 (这需要大概十到十五分钟,但就像我说的,我已经在AppArmor上工作了十年。