У меня есть сервер под управлением Ubuntu 18.04 с настройкой NFS. У меня есть несколько служб, которые помещают/обрабатывают файлы в этом ресурсе, а также другие клиенты, получающие к нему доступ по сети. Я хочу, чтобы сервер NFS установил разрешения по умолчанию для всех новых файлов/папок на 775.
Я установил s
флаг на папку, чтобы все новые файлы и папки наследовали одну и ту же группу, так что все пользователи этой группы могли создавать и изменять файлы в этой папке. Но я не могу заставить NFS сделать это. Он только создал новые файлы с 644 и папки с 2755.
Вот мой/etc/exports/
/srv/nfs 192.168.11.0/24(ro,fsid=0,no_subtree_check,)
/srv/nfs/lpt-2tb 192.168.1.0/24(rw,sync,all_squash,no_subtree_check,insecure,anonuid=1002,anongid=1002)
1002 — это идентификатор nfs
пользователя.
Я пробовал umask и acl, оба безрезультатно.
Я создал домашний каталог для пользователя nfs и поместил umask 002
в него ~/.profile
.
Я попробовал установить ACL для общей папки
/srv/nfs/lpt-2tb$ sudo setfacl -d --set u::rwx,g::rwx,o::r-x .
/srv/nfs/lpt-2tb$ sudo setfacl -R -m u::rwx,g::rwx .
/srv/nfs/lpt-2tb$ sudo getfacl .
# file: .
# owner: nfs
# group: nfs
# flags: -s-
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x
Я пробовал изменить конфигурацию nfs-server, расположенную в /lib/systemd/system/nfs-server.service
и добавить туда UMask=002
в [Service]
разделе. Это сработало для некоторых других служб, которые я создал сам, но не для NFS.
Я перезапускал службу NFS и даже перезагружался после всех этих изменений, но когда я копирую файл на общую папку со своего ноутбука, у него все равно есть права доступа 644.
drwxr-sr-x+ 2 nfs nfs 4096 Apr 5 20:34 acl2
-rw-r--r-- 1 nfs nfs 434506 Mar 7 21:31 acl_test.png
---РЕДАКТИРОВАТЬ---
Вот вывод acl для файла и папки
/srv/nfs/lpt-2tb$ sudo getfacl acl_test.png
# file: acl_test.png
# owner: nfs_share
# group: kodi
user::rw-
group::r--
other::r--
/srv/nfs/lpt-2tb$ sudo getfacl acl2
# file: acl2
# owner: nfs_share
# group: kodi
# flags: -s-
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x
---ОБНОВЛЕНИЕ---
Я проверил, что мой сервер работает на nfs v2-3-4, но мой клиент подключается через v3, и я не могу его переопределить. Я попробую проверить, исправляет ли v4, когда мне удастся заставить его работать.
На данный момент я отказался от поиска чистого решения и просто запущу задание cron, которое будет периодически проверять и исправлять разрешения.
решение1
Во-первых, то, что вы пытаетесь сделать с umask, не сработает. umask — это штука для каждого процесса, а важен процесс создания файла. Umask пользователя nfs на сервере NFS (если вы это имели в виду) не будет иметь значения, когда файлы создаются пользователем nfs на клиенте NFS, а umask самой службы сервера NFS вообще ни на что не должен влиять.
Далее вы упоминаете, что получаете неправильные разрешения, когда копируете файл в общий ресурс NFS. Если вы буквально имеете в виду копирование, как в команде "cp", то это недействительный тест. Команда cp имеет различные особые действия, когда дело касается разрешений - в отличие от большинства программ, она не просто создает файл и оставляет разрешения по умолчанию, она фактически возвращается и меняет разрешения на нем. Вот одно место, где это обсуждалось в прошлом:
https://serverfault.com/questions/183800/why-does-cp-not-respect-acls
Я использую команду "touch" для создания файлов для такого рода тестирования. Попробуйте, и вы, возможно, обнаружите, что ваша настройка ACL уже работает нормально, просто команда cp не учитывает некоторые вещи.