![多用户 Linux 环境中的权限](https://linux22.com/image/569233/%E5%A4%9A%E7%94%A8%E6%88%B7%20Linux%20%E7%8E%AF%E5%A2%83%E4%B8%AD%E7%9A%84%E6%9D%83%E9%99%90.png)
这个问题已经被问过很多次了,但我还没有找到这种权限的解决方案。
我有一个 VPS,其中有多个网站处于 chroot 状态,每个网站都由一个唯一用户运行,没有 root 权限。我正在尝试实现一个部署脚本,该脚本由主用户(也不是 root)运行,主用户可以访问所有网站并修改所有文件。
一个共同的群体
我通常看到的第一个建议是创建一个组,其中包含主用户和所有网站用户。
据我了解,我必须将文件和文件夹的权限更改为 770(或类似权限,使组拥有与所有者相同的权限)。但是,我经常遇到这些权限被“重置”为 700(或类似权限,组失去权限)。我的大多数网站都是在 Wordpress 上构建的,Wordpress 可能有一些自动安全功能,可以重置过高的权限。此外,如果开发人员在本地更改组权限并上传这些权限,权限也会更改。
我正在寻找更稳定的解决方案-有什么线索吗?
干杯 :)
答案1
如果网络服务器没有权限更改 files.dirs,那么它就无法更改所有权。
虽然这里实际上没有足够的信息来设计一个安全模型,但总的来说,我发现以“其他”权限为基础的 Web 服务器 uid 访问通常是最好的方法 - 因此目录应该是 drwxrwSr-x(由一个组拥有,其中包括需要修改访问权限但不包括 Web 服务器 uid 的用户,注意使用 setgid 位)和文件 -rw-rw-r--(如果您需要让 Web 服务器 uid 编辑文件,那么就是 drwxrwxrwx)。
但这不一定是最适合您的情况的模型 - 当您说网站处于 chroot 中时,您是指它们都在同一个 chroot 中吗?或者您有多个 Web 服务器实例,每个实例都在自己的 chroot 中运行?在第二种情况下,拆分用户 ID 是多余的,我上面描述的模型是合适的。
当然,您不想允许 Web 服务器的 uid 权限在文档根目录中写入任何文件,除了专门为此目的指定的文件。
因此听起来也许你应该让部署用户拥有所有文件/目录,并让组所有权仅由 2 个成员组成 - 部署用户和 Web 服务器 uid - 并将你的目录/文件创建为 drwxr-S--- / -rw--r----- (再次将指定的上传目录/文件指定为 drwxrwS--- / -rw--rw----)
答案2
你为什么不使用像卡皮斯特拉诺编写一个任务,连接所有具有可变用户的服务器,并使用 scp 或 sftp 上传内容,甚至从 git 存储库中检出?
您可以使用 shell 脚本和 SSH 做一些类似的事情,但是存在部署工具来解决这类问题。