Общая сетевая папка NFS+SAMBA с правами для всех

Цель: расшарить директорию через NFS и CIFS так, чтобы для обоих протоколов был общий доступ и файлы, залитые через один протокол, были доступны на чтение и запись через второй.

NFS

Метод, до которого дошел я (возможно не единственный), реализуется через дополнительного пользователя на сервере, с которого шарится директория. В моем случае это пользователь "user" с UID 1000 (входит в одноименную группу с GID 1000).

Файл /etc/exports выглядит так

"/share/Public" *(rw,nohide,async,no_subtree_check,crossmnt,all_squash,anonuid=1000,anongid=1000)

ключевыми параметрами являются:

  • all_squash - опция говорит что все подключения будут считаться анонимными
  • anonuid=1000 - определяет UID пользователя от имени которого будет осуществляться доступ для анонимных подключений
  • anongid=1000 - аналогично определяет GID

Таким образом все файлы и папки, создаваемые на сервере через NFS будут иметь владельца "user"

ls -la /share/Public/test_dir/
total 12
drwxr-xr-x  3 user user 4096 Jan 14 16:18  .
drwxrwxrwx 14 user user 4096 Jan 14 16:18  ..
drwxr-xr-x  2 user user 4096 Jan 14 16:18 'nfs dir'
-rw-r--r--  1 user user    0 Jun 19  2020 'nfs file.txt'

Настройка монтирования через autofs

public -fstype=nfs4,rw,soft,tcp,retry=0   "192.168.1.2:/share/Public"

SAMBA

Теперь можно переходить к настройке самбы. Приведу весь свой конфиг /etc/samba/smb.conf

[global]
    workgroup = WORKGROUP
    dns proxy = no
    log file = /var/log/samba/log.%m
    max log size = 200
    panic action = /usr/share/samba/panic-action %d
    server role = standalone server
    passdb backend = tdbsam
    obey pam restrictions = yes
    unix password sync = yes
    passwd program = /usr/bin/passwd %u
    passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
    pam password change = yes
    map to guest = bad user
    security = user
    usershare allow guests = yes
    acl allow execute always = true
    allow insecure wide links = yes
    # WinXP/Android X-Plore compatibility:
    ntlm auth = yes
    server min protocol = NT1

[Public]
    path = /share/Public
    mangled names = no
    writeable = yes
    follow symlinks = yes
    wide links = yes
    browsable = yes
    guest ok = yes
    guest only = yes
    force user = user
    force group = user
    create mask = 666
    directory mask = 777
  #recycle
    vfs objects = recycle
    recycle:repository = .Trash-1000/files/%U
    recylce:exclude_dir = /.Trash-1000
    recycle:keeptree = Yes
    recycle:versions = Yes
    recycle:touch = Yes

Здесь ключевыми являются опции директории:

  • guest ok = yes - пускать юзера без аутентификации
  • guest only = yes - пускать только анонимусов
  • force user = user - работа с файлами ведется от имени указанного юзера "user" (аналог nfs-ного "anonuid=1000")
  • force group = user - аналогично для группы (аналог nfs-ного "anongid=1000")

Настройка монтирования через autofs

public -fstype=cifs,rw,iocharset=utf8,file_mode=0666,dir_mode=0777,uid=1000,gid=1000  ://192.168.1.2/Public

Корзина

Отдельно прокомментирую вот это кусок

#recycle
    vfs objec ts = recycle
    recycle:repository = .Trash-1000/files/%U
    recylce:exclude_dir = /.Trash-1000
    recycle:keeptree = Yes
    recycle:versions = Yes
    recycle:touch = Yes

Дело в том, что при удалении файлов из директории, смонтированной через NFS, скорее всего (это зависит от файлового менеджера)  в точке монтирования будет создана директория корзины ".Trash-1000". В то же время клиенты Windows для сетевых путей корзину не используют, но именно для этого существуют опции самбы, которые включают сетевую корзину и позволяют указать - в какой именно директории хранить удаляемые файлы. В моем случае опция "recycle:repository" указывает правило хранения, которое соответствует правилам удалению в корзину в линуксе. То есть, при такой настройке, файлы что удаленные в линуксе через NFS, что в виндусе через SMB - попадут в один каталог. В винде, конечно, они не появятся в виндовой "корзине", но как минимум их можно будет достать из папки ".Trash-1000".

Однако при этом возникает парадоксальная ситуация, что в винде данную "корзину" очистить не получится, так как она лежит в той же шаре. То есть удаляемые файлы будут валиться в нее же. Поэтому указывается дополнительная опция, исключающая саму папку корзины из действия самба-корзины.

Поделиться:
Метки: , . Закладка Постоянная ссылка.
0 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments