我在一台旧笔记本电脑上安装了 Ubuntu Server 12.04 LTS 上的 apache2。它在我的本地网络上充当网络服务器,帮助我学习 PHP(和 Linux)。
/var/www 文件夹(apache 的网页存储于此)的默认所有者是 www-data。将所有者设置为 www-data 后,我无法通过 ftp 将文件/文件夹复制到该文件夹。如果我将 /var/www 文件夹的所有者更改为 james(我的 ftp 用户),那么我可以通过 ftp 移动文件,但 apache 无权显示任何页面或子文件夹。
允许 ftp 用户 james 和 apache 访问的正确所有者应该是谁?
答案1
我建议将其设置为 所拥有james:james
。
或者,您可以将其保留原样root:root
,sudo
以便任何人都可以部署其中的文件,但如果您直接在 /var/www 目录中工作(而不是在其他地方工作并将文件推送到那里),这可能不方便,并且它也不适用于 FTP。
您可以将 /var/www 的所有者设置为任意名称,只要用户www-data
具有读取权限即可。您可以通过设置权限以允许所有人读取(默认设置)来实现此目的。
默认情况下,它归root:root
(不是 www-data
正如您在问题中所述)。
为了安全起见,不是最好将其设置为所有者
www-data
。www-data
旨在成为一个非特权帐户,不能写入任何文件,并且只能读取它们。是的,有时您可能需要授予
www-data
对给定文件的写入权限,但为了安全起见,这应该严格限制在那些特定文件上,并且应采取预防措施,例如确保这些文件不能被 Web 服务器作为脚本执行(即,它们不在可能被解释为 PHP 或 CGI 文件的位置)等。为了安全起见,这甚至更差将文件权限设置为全球可写(例如 777)是个
www-data
不错的主意。非特权用户(例如不是能够写入此目录中的文件。唯一需要写入权限的人是实际在其中写入文件的人。/var/www 目录旨在供您随意使用。将所有权设置为将编辑文件的帐户是有意义的。如果您有多个人,您可以为此创建一个组,但在这种情况下只有您自己。
注意:如果要创建组,请创建一个新组。不是重新使用该
www-data
组,因为该组是一个没有特权的组,对任何文件都没有写权限(正如我上面解释的那样)。
我经常看到人们建议采用非常坏的安全实践,例如将 /var/www 设置为 所拥有www-data
,或将人员添加到www-data
组以赋予该组编辑权限,或将 /var/www 设置为全球可写(例如 777)。通过执行任何这些操作,您都可能面临严重的安全问题。
答案2
理想的权限是将自己设为所有者,将 www-data 设为组,将自己设为文件所有者,sudo chown -R yourname:www-data /var/www/public_html/
并sudo chmod -R g+w /var/www/public_html/
确保适当更改目录和用户名。您将能够写入文件,并且 apache 进程不会受到阻碍。我建议这样做是因为 OP 正在运行 APACHE 的本地实例以进行练习,并且将使用大量脚本或开源脚本(如 wordpress 等),这些脚本将需要写入权限。这里安全性不是主要问题,因为本地服务器不会使用公共 IP,并且安装、复制和运行脚本的便利性至关重要。OP 可以专注于学习 PHP,而不是管理服务器。