我正在研究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目录而不是?最终我将把它放在面向公众的服务器上,我不希望在我的实现中有任何漏洞。非常感谢任何建议和答案!
答案 0 :(得分:4)
这是作为运行php进程的用户运行的两件事:
$url
来自用户输入吗?如果是,我会在整个字符串上使用escapeshellcmd
以确保其中没有随机rm -rf *
命令。答案 1 :(得分:0)
chown只能由超级用户使用,所以如果方便你可以使用它,但是服务器通常不会作为超级用户运行,所以我会选择chmod。
答案 2 :(得分:0)
@Wes的两个建议值得关注;你不希望一些goofball提供像||nc -l 8888 | sh &
这样的网址,并在一秒钟之后登录你的系统。
我强烈建议您使用AppArmor,SElinux,TOMOYO或SMACK等工具限制配置。这些mandatory access control工具中的任何一个都可以阻止应用程序在特定位置写入,执行任意命令,读取私有数据等。
我已经在AppArmor系统上工作了十年,这是我最熟悉的一个;我相信您可以在半天左右的时间内将您的部署配置文件放在一起。 (这需要我十到十五分钟,但就像我说的那样,我已经在AppArmor上工作了十年。:)