mv не работает, но cp преуспевает при монтировании nfs

Я пытаюсь переместить файл из локального каталога в смонтированный каталог nfs на сервере CentOS 7. Экспорт предоставляется FreeNAS.

Оба каталога принадлежат текущему пользователю с как минимум 755 (nfs отображается как 777, но я ' m не уверен, что верю).

Моя таблица 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)

Разрешения на каталог на client

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 создает новый файл, который наследует разрешения от родительского каталога. Похоже, монтирование nfs не позволяет мне chown файлов, даже если я являюсь пользователем root или владельцем файлов. Итак, теперь мой вопрос: как разрешить изменение разрешений или игнорировать разрешения, указанные в mv .

3
задан 2 December 2016 в 10:07
1 ответ
  • Синхронизируются ли ваши базы данных паролей / групп между клиентом и сервер?
  • Вы видите какие-либо файлы в смонтированном каталоге nfs на клиенте nfs как принадлежащие автор

    никто никто

  • Можете ли вы опубликовать вывод nfsidmap -d с сервера и клиента? Подсказка - при использовании NFSV4 выходы должны совпадать.

Скорее всего, вы столкнулись с несоответствием между UID / GID на сервере NFS и клиенте 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-сервере пользователь по имени dmitry

[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-клиенте у вас есть user helen

[root@nfsclient ~]# getent passwd|grep helen
helen:x:500:500::/home/helen:/bin/bash
[root@nfsclient ~]# getent group|grep helen
helen:x:500:

Обратите внимание, что, несмотря на то, что это разные пользователи, у них одинаковые UID и GID. Итак, что произойдет, если я коснусь файла helen в качестве пользователя на общем ресурсе nfs?

[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 этот новый файл будет отображаться как принадлежащий никто никому . Это потому, что 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, который сопоставлен с dmitry: dmitry на сервере NFS.

Теперь предположим, что у нас есть другой пользователь, у которого 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:

И если я коснусь файла на клиенте nfs как пользователь angelina - я увижу правильное имя пользователя / группу как на сервере, так и на клиенте

[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 вам необходимо синхронизировать

  • сервер и базу данных паролей / групп клиентов. Предпочтительно использовать ldap.
  • клиент и сервер должны согласовать общее доменное имя nfsidmap -d
2
ответ дан 3 December 2019 в 06:57

Теги

Похожие вопросы