我正在尝试将文件从本地目录移动到CentOS 7服务器上的nfs挂载目录。 这个出口是由FreeNAS提供的。
这两个目录都由当前用户拥有至less755(nfs显示为777,但我不知道我相信它)。
我的fstab看起来像这样
host:/path/to/export /mnt/nfs nfs defaults 0 0
我无法移动文件
mv /local/file /mnt/nfs/file mv: cannot create regular file 'file': Operation not permitted
但是我可以复制并删除它
cp /local/file /mnt/nfs/file rm /local/file
mount输出
host:/path/to/export on /mnt/nfs type nfs (rw,relatime,vers=3,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=host,mountvers=3,mountport=908,mountproto=udp,local_lock=none,addr=host)
客户端上的目录权限
ls -ld /local /mnt/nfs drwxrwxrwx. 15 user user 17 Nov 28 08:32 /mnt/nfs/ drwxrwxrwx. 2 root root 17 Nov 29 12:20 /local
进一步调查后,这似乎是关于更改权限。 mv获取文件的权限,但是cp会创build一个从父目录inheritance权限的新文件。 看来nfs挂载不允许我chown文件即使我是root或文件的所有者。 所以现在我的问题是如何允许更改权限,或者忽略mv给出的权限。
你是否拥有nfs客户端上的nfs挂载目录上的任何文件?
nobody nobody
你能从服务器和客户端发布nfsidmap -d的输出吗? 提示 – 使用NFSV4输出时应该匹配。
很有可能您的NFS服务器上的UID / GID与NFS客户端之间存在差异。 我将以一个简单的例子来展示这个工作。
假设你正在像这样在你的NFS客户端/ nfs_share上共享。 请注意,任何人都可以写入nfs_share (777)。
[root@nfsserver nfs_share]# cat /etc/exports /nfs_share 192.168.0.52(rw,no_root_squash) [root@nfsserver nfs_share]# ls -ld /nfs_share drwxrwxrwx. 2 root root 4096 Nov 30 23:55 /nfs_share
并像这样安装在你的NFS客户端上
mount 192.168.0.51:/nfs_share /mnt
现在你已经在nfs服务器用户名为德米特里
[root@nfsserver nfs_share]# getent passwd|grep dmitry dmitry:x:500:500::/home/dmitry:/bin/bash [root@nfsserver nfs_share]# getent group|grep dmitry dmitry:x:500:
而在你的nfs客户端你有用户helen
[root@nfsclient ~]# getent passwd|grep helen helen:x:500:500::/home/helen:/bin/bash [root@nfsclient ~]# getent group|grep helen helen:x:500:
请注意,尽pipe这些用户是不同的 – 它们具有相同的UID和GID。 那么如果我在nfs共享上以用户helen文件的方式触摸会发生什么?
[helen@nfsclient mnt]$ touch helen_client [helen@nfsclient mnt]$ ls -lrt [helen@nfsclient mnt]$ ls -lrt total 0 -rw-rw-r--. 1 nobody nobody 0 Nov 30 23:58 helen_client
在NFS客户端上,这个新文件将显示为nobody nobody拥有。 这是因为nfsidmap无法将client_user_name @ domain映射到server_user_name @domain。 而现在休战的时刻。 让我们来检查一下nfs服务器上的文件所有者。
[root@nfsserver nfs_share]# ls -rlt total 0 -rw-rw-r--. 1 dmitry dmitry 0 Nov 30 23:58 helen_client
惊讶呢?
但实际上并没有什么奇怪的。 这按预期工作。
NFS服务器不能映射用户helen,但它收到的是UID和GID。 所以它使用UID 500和GID 500创build了文件(因为文件夹是世界可写的),它映射到NFS服务器上的dmitry:dmitry。
现在让我们说,我们有其他用户的UID / GID和名称匹配的服务器和客户端
[root@nfsserver mnt]# getent passwd|grep angelina angelina:x:501:501::/home/angelina:/bin/bash [root@nfsserver mnt]# getent group|grep angelina angelina:x:501: [angelina@nfsclient mnt]$ getent passwd|grep angelina angelina:x:501:501::/home/angelina:/bin/bash [angelina@nfsclient mnt]$ getent group|grep angelina angelina:x:501:
如果我以用户angelina的身份在nfs客户端上触摸文件,我将在服务器和客户端上看到正确的用户名/组
[angelina@nfsclient mnt]$ pwd /mnt [angelina@nfsclient mnt]$ touch angelina_1 [angelina@nfsclient mnt]$ ls -l total 0 -rw-rw-r--. 1 angelina angelina 0 Dec 1 2016 angelina_1 -rw-rw-r--. 1 nobody nobody 0 Dec 1 00:16 helen_1 [root@nfsserver nfs_share]# pwd /nfs_share [root@nfsserver nfs_share]# ls -l total 0 -rw-rw-r--. 1 angelina angelina 0 Dec 1 00:27 angelina_1 -rw-rw-r--. 1 dmitry dmitry 0 Dec 1 00:16 helen_1
底线是NFSV4正常工作,你需要有
nfsidmap -d上达成一致