我更喜欢使用 Windows,所以请原谅我对这个基本的 Linux 问题的无知。
我正在照看一个仅安装了 Apache2 和 vsftp 的 Linux(Debian)服务器。
现在发生的事情是,我一直在为谁拥有文件和文件夹而苦苦挣扎,但似乎无法找到正确的答案。
这是我目前的理解:
- www-数据用户需要拥有文件夹和文件的所有权,因为 /var/www/html 下的所有文件都运行脚本,这些脚本要求用户写入文件夹。当然,它需要能够通过 http 提供页面。
- 我的 ftp 用户(我们称之为FTP用户) 还需要写入 /var/www/html 文件夹(递归)的权限,因为我需要能够上传新文件。
考虑到这一点,我创建了一个名为FTP和www并将所有文件夹和文件的所有权移交给该组。这在一定程度上起到了作用……
我几乎是在正确的地方,除了使用我的 FTP 客户端创建的任何新文件夹都有错误的权限(我可以通过更改 FTP 客户端下的权限来纠正),但 www-data 无法写入它们,因为它们归FTP用户最后我不得不通过 SSH 登录并运行 chown 到 ftpandwww 组,以便他们都很高兴。
如何使我在 FTP 下创建的所有新文件夹都具有正确的权限 (774) 并自动归属于FTP和www我可以通过 Web 上传并提供该组(具有写权限),而不必每次都进入并更改所有新文件夹和文件?
答案1
使用设置GIDWeb 根目录的权限,并将其传播给子目录。
当您在目录上应用 SetGID 时,该目录中的所有新项目都将使用其父级所在的组来创建,而不管用户的默认组成员身份如何。
要将 SetGID 应用于文件系统对象,请chmod
在权限代码前面使用 2。
(例如:740 => 2740)。
我在许多 Samba 共享上使用了 SetGID,这样文件始终具有所有者组Users
,并且该组的任何成员都可以读取这些文件(我通常使用2750
以便只有所有者用户可以写入文件)。
对于您来说,运行如下命令(将 XXX 替换为您想要的权限):
sudo chown -R root:ftpandwww /var/www
sudo chmod -R 2XXX /var/www
然后,新的文件和文件夹将以类似的所有权出现ftpuser:ftpandwww
。
编辑:
根据您的使用情况,SetGID 可能足以解决您的问题,但如果您继续遇到问题,其中一个用户或另一个用户由于组权限不正确(但所有权正确)而被拒绝写入,那么最好的办法是设置一个为创建文件的用户自定义 UMASK。
如果你在为用户设置 UMASK 时遇到困难(因为它是一个守护进程),请查看此线程中的选项设置守护进程用户的 UMASK。
007
如果您希望组成员能够写入和删除文件,并且非所有者没有任何特权,我建议您使用掩码。