【问题标题】:Linux PHP create file permissions deniedLinux PHP创建文件权限被拒绝
【发布时间】:2011-07-29 16:31:26
【问题描述】:

我在 Ubuntu 上工作,并试图让一个 PHP 脚本工作,它允许用户输入一个 Youtube 视频 URL,该脚本将下载 flv 并使用 youtube2mp3 转换它(我在这里找到: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 目录?最终,我会将它放在面向公众的服务器上,并且我不希望在我的实现中出现任何漏洞。非常感谢任何和所有的建议和答案!

【问题讨论】:

  • 忘了提,我在这里查看了 youtube-dl 源:xtga.net/downloads/youtube-dl 并且脚本似乎正在使用 urllib2 进行文件下载,我怀疑这非常相关,尽管我很漂亮确定这是什么用户正在执行命令的问题,斜线他们的权限允许

标签: php linux youtube file-permissions


【解决方案1】:

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

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

【讨论】:

  • 如何找到运行 php 进程的用户?如果,在我的脚本中,我输入“echo exec("whoami");"它打印www-user,那会是用户吗?我将创建一个新文件夹 /var/videofiles/,我将如何确保用户可以访问它?修改它?
  • 经过一番谷歌搜索后,我使用了 ps aux | grep apache 并且用户是 www-data,所以那是运行 apache/php 的用户?我的目录 /var/videofiles/ 在最右边的 3 列中有 r-x 以获取其权限,我应该对其进行 chmod 以便该部分读取 rw- 吗?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 我阅读了维基百科 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。再次感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 2015-05-11
    • 2018-02-10
    • 2012-08-18
    相关资源
    最近更新 更多