我有两台运行 RHEL6 的服务器。我有根可以同时访问两者。主服务器(我将称之为server
)是数据库服务器。应用服务器(我将称之为)通过 NFSclient
安装目录。server
appuser
在 和 上client
都有用户server
。但是appuser
上的 UIDclient
是502
。appuser
上的 UIDserver
是506
。
两个用户都需要对 NFS 共享具有读写权限。为了实现这一点,我将共享设为appuser
拥有server
。
id appuser
每次运行都会得到: uid=506(appuser)
。
当然,client
不承认所有权,因为appuser
上的 id 不同client
。所以我做了以下事情:
将 /etc/passwd 中的用户 UID 更改
client
为 506。appuser
将 的 $HOME所有权再次更改client
为 ,appuser
以便我可以登录。
现在,当我从侧面查看 NFS 共享时client
,我发现它归 拥有502
。502
是客户端上的旧 ID appuser
。 我无法从 更改 NFS 共享的所有权client
,因为这是一个物理上位于 上的卷server
。
我需要确保 NFS 共享显示appuser
和server
的所有权client
。
自从更改客户端上的 ID 以来,我错过了什么步骤appuser
?
笔记:我还没有重新启动client
(或做其他任何事情)。
答案1
id appuser
可能会显示 shell 仍然看到用户的旧 UID。注销并重新登录。
答案2
好的!我找到了。尝试了很多次后,终于在 Bing 上找到了。仍然不确定问题究竟修复了哪个部分,有两种可能。但它们在这里。
互联网上有人说 NFS v4 可能存在客户端所有权权限问题。我不知道这是否属实,我也不关心。有人提出了他们所谓的解决方案。所以我按照说明强制客户端将驱动器安装为 NFS 版本 3。所以我做的第一件事就是将 /etc/fstab 中的安装行权限从以下内容更改为:
rw,hard,intr
更改为:
rw,hard,intr,vers=3
另外,我启动了客户端上的 nfs 守护进程,只是因为有人说要这么做:
service nfs start
然后,因为我遵循一些过时的说明,我检查了该portmap
服务是否在客户端上运行:
service portmap status
并受到了以下欢迎:
portmap: unrecognized service
然后我发现portmap
现在被卷入了rpcbind
。所以:
service rpcbind status
我看到:
rpcbind dead but pid file exists
然后:
[root@myserver customers]# service rpcbind restart
Stopping rpcbind: [FAILED]
Starting rpcbind: [ OK ]
然后我检查了 NFS 共享的所有权,它是正确的!
答案3
文件所有权通过用户 ID 保存。当您查看这些文件并发现它们在appuser
502 -> 506 更改之前为所有者时,它们实际上属于用户 ID 502(ls -n
将确认)。这没有改变。
因此,如果您想appuser
以所有者身份查看,则必须将文件的所有权从 502 更改为 506。您可能必须这样做在服务器上如果您在客户端上没有权限。
如何更改权限是另一个话题。如果您无权访问服务器,您可以尝试使用新用户复制文件(假设您具有只读访问权限)并稍后删除它们。如果您临时创建一个 ID 为 502 的用户,该用户将能够更改 502 拥有的文件的权限(但不是所有权),重命名它们或在复制它们后删除它们,这可能会更容易。
答案4
我在 solaris 11 上遇到了同样的问题。
systema:与 systemB 共享的 zfs 文件系统 - 文件归用户 davida UID 305 所有 systemb:从 systemA 挂载的文件系统 - 创建了本地用户 davida,用户 UID 为 304
nfs 共享目录的权限为 755,文件的权限为 700。systemb 上的 davida UID 304 无法打开文件。
将 systemB 上 davida 的 UID 更改为 305
卸载 nfs 文件系统,并将系统 B 上的用户 ID davida 更改为 UID 305,以匹配系统 A。
已重新挂载 nfs 文件系统。文件仍显示所有者为 UID 304
为什么 ???