如何使文件夹始终可被 apache 写入?

如何使文件夹始终可被 apache 写入?

我想让文件夹始终可被 PHP 写入。

我临时将文件夹权限更改为 777,但文件夹的内容是由 ftp 用户上传的,因此每次我重新运行脚本时都会出现以下情况:

Warning: file_get_contents(/var/www/html/.../file.txt): failed to open stream: Permission denied in /var/www/html/.../autoimport.php on line 25

同样的情况也发生在这个脚本中,我在其中显示了 error.log 的内容。我将其更改为 777,但当它重新生成时,我再次失去访问权限。

Warning: fopen(/var/log/apache2/error.log): failed to open stream: Permission denied in /var/www/html/admin/errorlog.php on line 48
Could not get lines from file - /var/log/apache2/error.log

答案1

我在服务器设置中通常采用的方法是为网站创建一个组,然后结合使用 setgid 和 umask 来确保文件仍可由我想要的应用程序写入。以下是分步指南:

1/ 为您的网站创建一个新组:

$ sudo groupadd web-grp

2/ 将运行 Web 服务器的用户添加到组中:

$ sudo gpasswd -a www-data web-grp

3/ chown 您希望服务器有权访问的目录和文件:

$ sudo chown -R :web-grp /path/to/website

4/ 设置这些目录的 gid 位和其他权限:

$ sudo chmod -R ug+rw /path/to/website
$ find /path/to/website -type d -exec chmod g+xs {} \;

5/ 将 ftp 程序的 umask 设置为002。这将取决于您的 ftp 客户端和服务器,请四处搜索以找出如何针对您的特定设置执行此操作。

6/ 重新启动您的 Web 服务器以获取新的组权限:

$ sudo service apache2 restart

有趣的是,setgid这些目录上的位将导致目录中创建的新文件默认具有相同的组。这意味着您不需要777权限 — 这意味着您拥有更高的安全性以及可以继续工作的系统。

umask部分也很重要。新文件将具有被剥离的权限位umask,因此如果您的umask022,新文件将无法进行组写入,并且工作不会很顺利。

我已经使用这个设置很多年了,并且非常成功。

相关内容