【问题标题】:How to give apache permission to write to home directory?如何授予apache写入主目录的权限?
【发布时间】:2014-03-30 12:19:24
【问题描述】:

我的服务器在 /var/www/html 我在 /var/www/html/fileio_test/io_test.php 中有一个 php 脚本

<?php

$logging = <<< LOG
This is a test
LOG;

$testfile = fopen('/home/djameson/test.txt', 'a'); 
fwrite ($testfile, $logging);
fclose($testfile);

?>

当我尝试运行这个脚本时,我得到了

Warning: fopen(/home/djameson/test.txt): failed to open stream: Permission denied in   /var/www/html/fileio_test/io_test.php on line 7

Warning: fwrite() expects parameter 1 to be resource, boolean given in /var/www/html/fileio_test/io_test.php on line 8

Warning: fclose() expects parameter 1 to be resource, boolean given in /var/www/html/fileio_test/io_test.php on line 9

如何让 apache 写入我的主目录?服务器在 fedora 20 上运行。

【问题讨论】:

标签: php apache


【解决方案1】:

由于您的文件位于主目录中,我建议采用以下方法之一。

  1. 授予 0777 自行归档的权限。

    chmod 0777 /home/djameson/test.txt
    
  2. 将所有权更改为 apache 用户 www-data 并授予所有者写入权限。

    sudo chown www-data:www-data /home/djameson/test.txt
    chmod 0744 /home/djameson/test.txt
    
  3. 将您的用户添加到 www-data 组,或者将 www-data 用户添加到您的组。然后组写权限。

    sudo usermod -a -G www-data djameson
    chmod 0764 /home/djameson/test.txt
    

注意:我假设 apache 用户名和组名分别是 www-data 和 www-data。您必须相应地更改您的服务器 apache 用户名/组名。

【讨论】:

【解决方案2】:

默认情况下,Ubuntu 上的 Apache 作为 www-data 运行。

假设您的文件夹位于 /var/www/mysite

你可以这样做:

chown -R www-data:www-data /var/www/mysite

chmod -R og-r

/var/www/mysite 完成此操作后,www-data(Web 服务器)将拥有 对站点文件的完全访问权限,而其他非 root 用户将拥有 根本没有访问权限。

如果您希望允许选定的用户访问该网站,您可以将 文件夹组可读并将这些用户添加到组www-data

Set correct permissions on your apache files

【讨论】:

  • 这个很整洁,很有帮助,也没有弄乱其他设置谢谢
  • 最佳答案在这里。设置 0777 权限是一个非常糟糕的主意。
  • 效果很好!
【解决方案3】:

为了让用户“djameson”和网络服务器都能读取此文件,您需要做 4 件事:

  1. 将 apache 使用的用户(大多数系统上的 www-data)添加到系统上的用户组。您可能想要创建一个新的。
  2. 也将用户“djameson”添加到该组。
  3. 更改文件的所有者权限 (chown),使其归用户 django 和您刚刚设置的组所有。
  4. 确保文件权限 (chmod) 允许组读取权限。

【讨论】:

  • 好吧。那么,你为什么不创建它。
【解决方案4】:

如果您的某些文件位于 www 目录之外,并且您希望提供对您可能使用的 apache 环境之外的文件的访问权限 chmod -R o+rx

以上将授予“其他用户(也包括 apache 用户)”读取/执行文件的权限

【讨论】:

    【解决方案5】:

    我在这方面的经验从来都不是很好。无论如何,这个问题通常有两个方面:授予 apache(或那个用户)所有权权限,并告诉 selinux 你知道这个写请求。试试这个,它应该可以工作:

    chown -R apache /full-path-to-target-folder/
    chcon -R -t httpd_sys_rw_content_t /full-path-to-target-folder/
    

    此外,请确保您正确定位特定文件夹; 不是整个主目录

    【讨论】:

      猜你喜欢
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      • 1970-01-01
      • 2016-09-09
      • 2013-01-29
      • 2018-11-12
      相关资源
      最近更新 更多