【问题标题】:Apache Folder PermissionsApache 文件夹权限
【发布时间】:2010-09-14 21:47:27
【问题描述】:

当我使用 PHP 的 mkdir() 创建目录时,文件夹的所有者是 'apache'。当我通过 FTP 创建目录时,所有者是 'ftpadmin'。

出于某种奇怪的原因,使用 PHP 的 rename() 函数,我无法将任何文件移动到“apache”拥有的目录中。我已经chmod() 将文件和目录都指向了 777 和 0777,但是 'apache' 拒绝将任何文件移动到它创建的目录中。我可以让“apache”将文件移动到“ftpadmin”目录中。我已经用 777、0777、755、0755、1777、01777 等尝试了 chmod()mkdir()

目录需要我的客户端动态生成,文件需要移入移出。

服务器是一个专用的虚拟服务器,我可以通过 ssh 进入并拥有管理员权限。

【问题讨论】:

    标签: php apache permissions


    【解决方案1】:

    也许是安全模式功能? http://www.php.net/manual/en/features.safe-mode.functions.php

    rename() 检查正在操作的文件或目录是否与正在执行的脚本具有相同的 UID(所有者)。检查脚本正在运行的目录是否与正在执行的脚本具有相同的 UID(所有者)。

    如果安全模式已打开,请将其关闭,并在适当的级别解决它提供的功能。如果这不是问题,那么显示 php 发出的实际错误无疑会对我们有很大帮助。

    【讨论】:

    • 谢谢!我将 php.ini 错误报告设置为 E_ALL,这正是返回的错误。奇怪的是我让 PHP(“apache”用户)创建目录和文件(或上传),但由于某种原因,文件夹和文件被分配给不同的用户......
    【解决方案2】:

    PHP 以 Apache 用户身份运行。您的 FTP 帐户以用户“fpadmin”的身份运行。这就是业主不同的原因。你试过 chown() php 函数 (http://php.net/manual/en/function.chown.php) 吗?这将更改文件/目录的所有者。

    干杯


    呃,我的第一个反对票。刺痛..虽然这是一个愚蠢的答案..

    好的,所以我正在尝试理解您的问题/复制您的错误。这是我尝试过的,这是我的结果。希望它至少对您有所帮助。

    我的目录结构如下:

    /var/www/public_html/test (chmod = 777 via SSH, owned by 'ftpuser')
    /var/www/public_html/test/index.php (chmod = 777 via SSH, owned by 'ftpuser')
    /var/www/public_html/test/ftp_owned.file (chmod = 644 (default), owned by 'ftpuser')
    

    然后在 index.php 文件中我有以下代码:

    mkdir("./downvoted");
    chmod("./downvoted", 0777);
    $h = fopen("./i_am_so.sad", "x+");
    fwrite($h, "attempting to redeem myself");
    fclose($h);
    rename("./i_am_so.sad", "./downvoted/i_am_so.sad");
    rename("./ftp_owned.file", "./downvoted/ftp_owned.file");
    

    产生一个新的目录结构:

    /var/www/public_html/test (chmod = 777 via SSH, owned by 'ftpuser')
    /var/www/public_html/test/index.php (chmod = 777 via SSH, owned by 'ftpuser')
    /var/www/public_html/test/downvoted (chmod = 0777 via PHP, owned by 'apache')
    /var/www/public_html/test/downvoted/i_am_so.sad (permissions = 644 (default), owned by 'apache')
    /var/www/public_html/test/downvoted/ftp_owned.file (permissions = 644 (default), owned by 'ftpuser')
    

    仍然很难过,因为我无法重现错误,也无法挽回自己。希望您可以发布您收到的错误(权限被拒绝?)或指出我的实验与您的应用程序有何不同。

    【讨论】:

    • 来自 Apache 的 chown 不会更改任何已正确设置的系统上的任何内容。
    • 你不能用 chown “放弃”文件,所以你不能 chown 一个 ftpadmin 文件给 apache。只允许 root 这样做。
    • 是的,谢谢,我知道我只是没有思考。赞成强调我的错误信息。
    • 是的,chown() 仅适用于超级用户。我确实执行了您的代码,并且在本地运行良好
    • 糟糕,这是我第一次使用 stackoverflow;并不是要提交我的最后评论。我是说它在本地工作,但不在我的服务器上。它创建了目录和文件,两者都归“apache”所有,但它们都在根目录中—— i_am_so.sad 不会移动到 /downvoted/ 。也许apache conf或php.ini中有设置?
    猜你喜欢
    • 2010-11-28
    • 2011-09-01
    • 1970-01-01
    • 2015-12-11
    • 2015-12-21
    • 2011-08-12
    • 2011-05-29
    相关资源
    最近更新 更多