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

Mik*_*ike 11 linux permissions nfs

我有两台 Linux 服务器:

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

Apache
Ubuntu 10.04 LTS (2.6.32-23-generic)
Apache 2.2.14

我在文件服务器上有许多 Samba 共享,以便我可以从 Windows PC 访问文件。我也导出/data/www-dataapache服务器,在那里我将它安装为/var/www.

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

随着桑巴,我可以指定force userforce groupcreate maskdirectory mask,而这将确保所有文件都与我的Apache Web服务器合适的权限创建。我找不到用 NFS 做到这一点的方法。有没有办法强制使用 NFS 的权限和所有权 - 我是否遗漏了一些明显的东西?

虽然我已经在 Linux 上花了很多时间,并且正在让自己远离 Windows,但我仍然没有完全掌握 Linux 权限......如果这不是正确的做事方式,我愿意接受替代建议。

Ave*_*yne 12

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

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

在(遥远的)过去,这是与 NIS 和 NIS+ 共同制定的,尽管还有其他方案已经融入到这个框架中(Samba 的 Winbind 就是其中之一)。但是,这需要一个中央 ID 服务器,然后是许多手动修复权限。

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

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


Ant*_* O. 9

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

/data/www-data apache(rw,all_squash,anonuid=<your UID>,anongid=<your GID>,sync)
Run Code Online (Sandbox Code Playgroud)

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