我有一个 Linux LAMP 网络服务器(Ubuntu),上面有一些网站。
它们都在同一个 apache2 实例中运行,并且可以通过不同的 vhost 访问。
其中大部分都是我自己运营的,但我也有一些朋友的网站托管在那里。
我想要并使用不同的网站单独的用户帐户来管理文件、cronjobs 等。
网络服务器以 www-data 的形式运行。
现在大多数文件/目录不需要网站的写入权限,但有些需要。我可以使用我用来管理文件的用户单独将这些文件/目录设置为可写。事实上我更喜欢这种方式。
然而,让我有点烦恼的是 Web 服务器创建的文件。例如缓存或会话文件。因此,它们归 Web 服务器用户所有,并且具有默认权限,Linux 用户无法写入。在我的例子中,Web 服务器用户 happyn 仅使用 PHP 修改文件。
现在,我发现该问题的“最佳”解决方案是运行 suexec/suphp,让 php 进程作为 PHP 文件的所有者运行。然而,这样做的代价是没有 apaches mod-php 的优势,而且性能损失很大,因为每个 php 进程都在 cgi 上运行。但我最大的问题是操作码和内存缓存。
现在我认为我可以做的是将我拥有的所有用户添加到组 www-data,这样 shell 用户就可以使用默认权限 664/775 来修改文件。但是 shell 用户将无法调整 chmods,因为他/她不是所有者,但这应该不是问题,因为我想不出在什么情况下需要这样做来处理由 web 服务器创建的文件/目录。而且作为所有者的 web 服务器无论如何都不需要它。
然而,我对整个组/用户/权限内容完全陌生,因为我曾经为每个项目配备自己的服务器,从未使用共享主机做过任何事情。
我只知道 plesk/confixx 和类似事物的结构,并且知道它们总是存在问题。
因此,我寻求一种最简单的方法来处理该问题的常见网络托管需求。
此外:我如何才能有效地将用户“监禁”到其自己的目录中,并使其看起来像 scp/ssh 中的顶级目录?我知道这并非完全可能,并且安全性不必依赖它(因为用户可以运行列出其他目录等的 php 脚本...)但这不是动机。动机是将所有内容隔离开来,以方便管理。
答案1
我认为这个问题没有“好”的解决方案。最好的办法可能是使用 cronjob 来将chowns
文件$user:www-data
复制到chmods
web 服务器需要写入的文件u=rwX,g=rwX,o=
(以及u=rwX,g=rX,o=
web 服务器只需要读取的文件)。就 SSH/SCP 隔离而言,最好的办法可能是文件权限。不过 FTP/FTPS 是一个更好的解决方案,因为 FTP 服务器可以在其目录中 chroot 用户。