我的 Web 服务器中有一个文件夹/var/www
。我需要将文件添加到该文件夹中,但系统不允许我这样做,除非我使用sudo
。
我是否可以授予自己修改文件夹及其内容的权限,这样我就不需要sudo
创建文件,而可以使用 FTP 客户端直接将文件上传到 Web 服务器?
如果有必要的话,Web 服务器是 Apache2。
答案1
该/var/www/
文件夹由系统而非用户/管理员操作,因此除非您知道自己在做什么,否则不应在基本/var/www
目录上乱动这些设置。通常,按照我的操作方式,我会创建特定于站点的目录里面 /var/www/
,然后在那里授予我自己权限,这解决了系统意外覆盖站点数据的问题(它通常不会弄乱您自己创建的子文件夹)。
因此,您可能希望设置一个文件夹里面并/var/www/
修改您的 Apache 站点的 DocumentRoot 设置以将网站指向该子文件夹(例如/var/www/mysite/
),然后运行命令命令为您自己提供写入权限,并授予 Web 服务器读取权限,同时阻止其他用户访问。
首先,创建文件夹,将“mysite”替换为您想要使用的任何名称:
sudo mkdir /var/www/mysite
其次,让我们授予您访问权限和 WebServer 访问权限。Apache2 默认运行www-data
。
sudo chown $USER:www-data /var/www/mysite
第三,我们需要确保所有文件创建文件夹中的用户将自动被指定www-data
为组所有者(因此它实际上可以读它需要读取的文件);我们为此设置了“SetGID”粘性位。我们可能还想阻止其他用户(超级用户和 Web 服务器除外)访问该文件夹,以防数据中存储了不应暴露的密码(请参阅答案底部的警告):
sudo chmod g+s /var/www/mysite
sudo chmod o-rwx /var/www/mysite
第四,您必须编辑 Apache 站点。如果您是新手,您可能正在使用“默认”站点配置。您需要运行一组任务:
- 查找配置文件 — — 通常在 中
/etc/apache2/sites-enabled
。 - 编辑配置文件 - 找到 DocumentRoot 行,并将其修改为:(
DocumentRoot /var/www/mysite
将“mysite”替换为您创建的任何目录名称)。 - 重新启动 Apache-
sudo service apache2 restart
。
完成所有这些操作后,您应该能够/var/www/mysite
直接将文档放入其中,无需sudo
(因此 FTP/SFTP 可以工作),并且 Web 服务器应该具有站点目录内所有内容所需的访问权限。
(强制性 IT 安全警告,因为我是一名 IT 安全人员)
警告!
网站权限非常棘手,根据您在网站上使用的内容,如果不付出更多努力,几乎不可能让其正常工作。某些 Web 应用程序中的文件也不应该由您必须授予访问权限之外的世界访问。
还需要注意的是,Web 应用程序很容易受到大量潜在攻击,因此不仅要使用 Apache 软件更新来保持您的网站更新,还要更新您在网站上运行的软件(例如 WordPress)。