我们有一台 RHEL 5.9 服务器,其中带有来自中央 NAS 的 NFS 安装目录。在那里,我们有一个aird1(11055):app_dev(1101)
由具有权限的用户/组拥有的目录rwxrwsr-x
(即sgid到app_dev)。最后我们有了一个以grid(1001)
用户身份运行的进程。
问题是grid
用户可以写入该目录,尽管它不应该这样做。当我创建一个与 NFS 安装目录具有相同所有权和权限的本地测试目录时,我无法写入它,这正是我所期望的。
由于某种原因,NFS 挂载不完全遵守权限。这是一个例子:
$ ls -ldn /nfs/aird1/tmp
drwxrwsr-x 5 aird1(11055) app_dev(1101) 24576 Oct 17 13:21 /nfs/aird1/tmp
该目录的所有者是该目录aird1(11055):app_dev(1101)
,并且没有附加 ACL。
当我尝试在我的帐户下创建文件时失败:
$ id
uid=20501(myuser) gid=1003(mygroup) groups=10(wheel),1003(mygroup)
$ ls -l /nfs/aird1/tmp/xyz
ls: /nfs/aird1/tmp/xyz: No such file or directory
$ touch /nfs/aird1/tmp/xyz
touch: cannot touch `/nfs/aird1/tmp/xyz': Permission denied
这是预期的,但现在与用户相同grid
......
$ id
uid=1001(grid) gid=1001(oinstall) groups=1001(oinstall),1002(dba)
$ touch /nfs/aird1/tmp/xyz
$ ls -l /nfs/aird1/tmp/xyz
-rw-r--r-- 1 grid(1001) app_dev(1101) 0 Oct 17 13:24 xyz
我怎么能够创建该文件?目录所有权的 UID 和 GID 之间没有重叠,并且myuser
某些grid
UID/GID 可以创建文件,而其他一些则不能。
这是来自的记录/etc/fstab
:
nas:/vol/... /nfs nfs rw,bg,hard,nointr,rsize=32768,wsize=32768,tcp,vers=3,timeo=600,nosuid,actimeo=0 0 0
有什么想法吗?
谢谢!
答案1
NFS 最初设计用于所有计算机上具有相同帐户(用户、组和组成员身份)的网络。如果情况并非如此,就会发生奇怪的事情。最近的 NFS 实现确实有办法在客户端和服务器之间重新映射用户和组 ID。
这是我对正在发生的事情的猜测。该目录可由组 1101(app_dev
在客户端上调用)写入。服务器看到代表用户 1001 的请求(在客户端上调用grid
,服务器不关心),因此它尝试以用户 1001 的身份写入目录。/nfs/aird1/tmp
碰巧服务器上的用户 1001 属于组 1101 ,因此可以在此目录中写入。因此,该请求被批准。