允许用户和 Web 服务器编辑 /var/www 的 Apache 权限

ale*_*bal 4 permissions root apache2

出于安全原因,我想通过 ssh 禁用 root 访问。

我创建了一个具有管理权限的新用户 (user1)。

adduser user1
usermod -aG sudo user1
Run Code Online (Sandbox Code Playgroud)

并将 /www 目录分配给该用户。

sudo chown -R $USER:$USER /var/www/
sudo chmod -R 755 /var/www
Run Code Online (Sandbox Code Playgroud)

(我的文件夹结构是 www/site1.com、www/site2.com 等)

我的网站需要写一些文件(比如sitemaps、rss feeds等)所以我把www目录的权限设置为:

sudo chown -R www-data:www-data /var/www
sudo chmod -R 755 /var/www
Run Code Online (Sandbox Code Playgroud)

但是,现在用户 user1 通过 shell 使用 sudo 命令完美工作,但不能再通过 sftp 添加/编辑/删除 /www 目录及其子目录中的文件和文件夹。

我阅读了很多指南,如何设置 apache 权限以提高安全性,与其他用户共享管理等等等等。

但我仍然不明白如何解决我的问题。

目前为了能够通过 sftp 处理我服务器上的文件,我必须使用 root 用户,以确保安全。

我是否错过了有关设置用户或文件夹权限的内容?

tho*_*ter 7

可以为文件和目录设置不同的用户访问权限,这将允许 Apache 和您的 user1 用户编辑其中的内容,/var/www而无需 root/sudo 并且无需使任何内容都可写。

因此,将里面的“用户”权限设置/var/wwwuser1. 将“组”权限设置为www-data(但仅限于 Web 服务器需要写入的特定文件或目录)。

sudo chown -R user1:user1 /var/www
sudo chgrp www-data /var/www/specific-file
Run Code Online (Sandbox Code Playgroud)

您应该避免让 Web 服务器写入整个/var/www目录及其内容,而应仅在必要时将上述组权限授予特定文件。这是一个很好的安全原则,将 Web 服务器对文件的访问权限限制为仅那些它绝对需要的文件 - 尝试确保这些文件不被直接执行是一个好主意(不是 .php 或其他可执行脚本,例如)。