Linux NFS 创建掩码并强制用户等效

Linux NFS 创建掩码并强制用户等效

我有两台 Linux 服务器:

文件服务器
Debian 5.0.3(2.6.26-2-686)
Samba 版本 3.4.2

阿帕奇
Ubuntu 10.04 LTS(2.6.32-23-通用)
Apache 2.2.14

我有许多 Samba 共享文件服务器这样我就可以从 Windows PC 访问文件。我还导出/data/www-data阿帕奇服务器,我已将其安装为/var/www

设置没问题,除了当我在 NFS 挂载上创建文件时。我最终得到的文件无法被 Apache 读取,或者无法被系统上的其他用户修改。

使用 Samba,我可以指定force userforce group和,这可确保所有文件都具有适合我的 Apache Web 服务器的权限。我找不到使用 NFS 执行此操作的方法。有没有办法使用 NFS 强制执行权限和所有权 - 我是否遗漏create maskdirectory mask一些显而易见的东西?

尽管我已经在 Linux 上花了相当多的时间,并且正在逐渐摆脱对 Windows 的依赖,但我仍然还没有完全掌握 Linux 权限...如果这不是正确的做事方式,我愿意接受其他建议。

答案1

鉴于您来自 Windows,您会发现 NFS 是....不同的。

您遇到的问题相当常见。NFS 正在机器之间来回传递文件​​/目录的 UID 和 GID假设用户和组 ID 在两个设备上的映射相同。这意味着您可能会遇到这样的情况:服务器上的 UID/GID 被传回 NFS 客户端,但无法在客户端的/etc/passwd或中匹配/etc/group,这意味着无法访问。

在(遥远的)过去,这与 NIS 和 NIS+ 协调一致,尽管还有其他方案被纳入这个框架(Samba 的 Winbind 就是其中之一)。然而,这需要一个中央 ID 服务器,随后需要大量手动修复权限。

有多种方法可以解决此问题,但最便宜/最快捷的方法是创建一个在两台机器上具有相同组 ID 号的组 - 比如,组 ID 50000 - 并在文件服务器上设置组位,同时在客户端上将适当的用户添加到该组;然后使用文件上的组权限来控制访问。这不是一个好的解决方案,但它会起作用。请注意,您可能会遇到在运行时明确更改其组的服务问题(又称特权删除),您可能需要更改控制在运行时假定哪个组的设置,以确保它是您创建的组。

对于通过 Windows 共享(又名 Samba)传入的文件,只需强制组与您创建的组相同即可。这样,所有文件都会自动获得“正确的”GID。

答案2

您还可以使用all_squash使所有导出的文件和文件夹匿名(用户和组)的选项,并将它们附加到特定的 GID 和 UID。

/data/www-data apache(rw,all_squash,anonuid=<your UID>,anongid=<your GID>,sync)

问题在于,apache服务器上的所有用户都将以用户和组的身份看到您的挂载点nobody nobody,并可以在挂载中写入(但无论如何,在 Samba 服务器上,文件将创建为<your UID>/ <your GID>)。

相关内容