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

我有两台Linux服务器:

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

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

我有一些文件服务器上的Samba共享,以便我可以从Windows PC访问文件。 我也出口/data/www-dataApache服务器,我把它挂载为/var/www

安装程序是可以的,除了当我来创buildNFS挂载文件。 我最终得到的文件不能被Apache读取,或者是我的系统上的其他用户无法修改的文件。

使用Samba,我可以指定force userforce groupcreate maskdirectory mask ,这确保了所有文件都以适当的权限为我的Apache Web服务器创build。 我找不到用NFS做这个的方法。 有没有办法强制使用NFS的权限和所有权 – 我错过了一些明显的东西?

尽pipe我花了相当多的时间在Linux上,并且正在把自己从Windows上解放出来,但是我仍然没有把握Linux权限……如果这不是正确的做法,我很乐于替代build议。

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

你遇到的问题是相当普遍的。 NFS正在传递文件/目录的UID和GID, 假设用户和组ID在两者上映射相同 。 这意味着你可以得到服务器上的UID / GID传回NFS客户端的情况,但是在客户端的/etc/passwd/etc/group不能匹配,这意味着没有访问权限。

在(遥远的)过去,这是与NIS和NIS +共同pipe理的,虽然还有其他的scheme被embedded到这个框架中(Samba的Winbind就是其中之一)。 但是,这需要一个中央的ID服务器,其次是大量的手动修复权限。

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

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

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

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

问题是,所有的用户在apache服务器将看到你的挂载点nobody nobody用户和组,并可以在挂载(但无论如何,在Samba服务器上,文件将被创build为<your UID> / <your GID> )。