出于安全原因,我想禁用通过 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/www
为user1
。将“组”权限设置为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。