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

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

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

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

adduser user1
usermod -aG sudo user1

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

sudo chown -R $USER:$USER /var/www/
sudo chmod -R 755 /var/www

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

我的网站需要写入一些文件(例如站点地图、RSS 提要等),因此我将 www 目录的权限设置为:

sudo chown -R www-data:www-data /var/www
sudo chmod -R 755 /var/www

但是现在,用户 user1 可以通过 shell 使用 sudo 命令完美运行,但无法再通过 sftp 添加/编辑/删除 /www 目录及其子目录中的文件和文件夹。

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

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

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

我是否遗漏了有关设置用户或文件夹权限的某些内容?

答案1

可以设置不同的团体用户访问文件和目录,这将允许 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

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

答案2

如果您使用 setgid 位更改目录,这些问题就成为历史。

尝试这个

chmod 2775 /var/www

设置 setgid 位后,此目录中的所有文件都属于组 www-data(这应该是文件夹的标准用户和组,www-data:www-data)而不是用户。

因此,只要 user1 在 www-data 组中,该用户就应该能够修改、删除和打开文件。

试一试。

首先将用户输入到相应的组。最简单的方法

sudo nano /etc/group

找到 www-data,在结尾的“:”后输入 user1

注销/重新登录

现在创建文件夹,例如

sudo mkdir /var/www2

然后把 setgid 位放在上面

sudo chmod 2775 /var/www2 && sudo chown www-data:www-data /var/www2

现在进入文件夹,创建另一个文件夹或文件。它应该可以工作并且看起来像这样(请确保在使用 ls 时看到“s”)

参见此处

simmel@tron:/var/www2
$ ls -la
total 0
drwxrwsr-x 1 www-data www-data   8 Feb 21 10:28 .
drwxr-xr-x 1 root     root     126 Feb 21 10:26 ..
drwxrwsr-x 1 simmel   www-data   0 Feb 21 10:28 blah

如您所见,对于组部分,显示的是 RWS,而不是 RWX。

相关内容