我有一个 ubuntu 12.04 应用服务器,托管几个网站。我们需要授予开发人员访问权限,以便仅能将文件上传到其中一个网站。我已经安装了 Jailkit,但似乎找不到如何授予他网站目录的 sFTP 访问权限。
以下是我们的网站目录结构:
/var/www/website.com/htdocs/ /var/www/someotherwebsite.com/htdocs/ /var/www/website3.com/htdocs/ 全部归 www-data:www-data 所有
有人可以逐步地告诉我,让用户通过 sFTP 访问这些目录中的其中一个或两个,而不允许 ssh 访问吗?
答案1
一般来说,由于您遇到的原因,这不是一个实用的目录结构。如果您只有一个网站,那么 /var/www 目录可能就足够了。但是,根据我 20 多年的经验,最好的方法是创建一个单独的主分区,以便可以挂载 nosuid、noexec、nodev 等。每个网站都有自己的系统用户帐户。该帐户被赋予一个 shell,rssh,它允许 sftp 但不允许 ssh。这在托管、雇用开发人员甚至从安全角度来看都很实用。
写了这么多,一个解决方案就变得清晰了:将网站移至用户帐户目录并更新 Web 服务器配置。这可以通过在子域上创建网站副本来安全地完成。例如,对于域 www.website.com,创建一个名为 test.website.com 的 CNAME。确保 test.website.com 上的网站正常运行。然后,一旦您知道它没有问题,就更新 Web 服务器配置文件以将 www.website.com 指向新位置。
此时,您可以通过 sFTP 向任何您想要的人提供访问权限,而不必担心这一点。
但是……直奔主题并回答这个问题:一个不太明显但有效的解决方案是使用 ACL。使用 ACL,您可以更好地控制文件系统权限。使用 ACL 可以提供所需的限制。
首先要做的是安装 acl 软件:
sudo apt-get install acl
接下来要做的是使用 ACL 选项挂载或重新挂载文件系统。
sudo -e /etc/fstab
您可能会看到这样的一行,因此请添加 acl 选项。
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 defaults,acl 0 1
保存并退出。重新挂载并启用 acl。
sudo mount -o remount,acl /
此后,您将可以访问 ACL。ACL 指南帮助中心。askubuntu.com 上一些 ACL 使用示例: