Назад | Перейти на главную страницу

Доступ на запись из клиента Windows через ZFS SMB в файл, созданный на хосте в OpenIndiana

У меня есть сервер OpenIndiana с ZFS, который используется совместно nobody пользователь и группа. Я не совсем понимаю разрешения ACL Solaris, но я знаю разрешения в стиле Linux. Клиент - Windows 8, сервер - OpenIndiana - oi_148.

Я не могу понять, как правильно настроить разрешение на запись для клиента Windows. Он может создавать новые файлы, но не может изменять файлы, созданные оболочкой в ​​OpenIndiana.

Когда файл ("local file") создается локально как пользователь nobody в bash и еще один файл ("smb file") созданный удаленно через SMB (как nobody также), они совершенно разные по разрешениям:

# ls -V
-rw-r--r--   1 nobody   nobody         0 Dec  2 12:24 local file
                 owner@:rw-p--aARWcCos:-------:allow
                 group@:r-----a-R-c--s:-------:allow
              everyone@:r-----a-R-c--s:-------:allow

-rwx------+  1 nobody   nobody         0 Dec  2 12:24 smb file
            user:nobody:rwxpdDaARWcCos:-------:allow
       group:2147483648:rwxpdDaARWcCos:-------:allow

В bash я могу писать на smb file, но наоборот, клиент Windows не может писать в local file. Это сбивает меня с толку, потому что кажется, что он должен позволить клиенту SMB писать на local file, так как nobody является собственником и имеет w в ACL.

В sharesmb настройка довольно скучная, хотя я надеюсь, что здесь можно что-то установить, похожее на umask:

sharesmb name=shared,guestok=true

Как я могу заставить эти двое работать вместе и иметь симметричную систему разрешений, в которой и SMB, и локальный пользователь выдают одинаковые разрешения?

Есть ли какой-то ACL, который можно установить в корне файловой системы, чтобы все файлы создавались аналогичным образом?

С моей настройкой было несколько проблем:

  • ACL, созданный локальным пользователем, не имеет d и D flags установлен, что означает, что его нельзя удалить / переместить, хотя я до сих пор не понимаю, почему локальный пользователь смог удалить его, когда SMB не смог.
  • ACL не были установлены таким образом, чтобы ACL унаследовались, т.е. fd флаги.
  • ZFS aclinherit свойство должно быть установлено на passthrough вместо того restricted.

например.:

# chmod A=owner@:rwxpdDaARWcCos:fd:allow /z/shared
# zfs set aclinherit=passthrough z/shared

После создания файлов из SMB и локально:

$ ls -V
total 2
-rwx------+  1 nobody   nobody         0 Dec  8 00:17 local
                 owner@:rwxpdDaARWcCos:------I:allow
-rwx------+  1 nobody   nobody         0 Dec  8 00:17 smb
                 owner@:rwxpdDaARWcCos:------I:allow

Обратите внимание I что показывает, что ACL унаследован.

Настройки ZFS описаны в Руководство по администрированию ZFS:

ограниченный - Для новых объектов права write_owner и write_acl удаляются при наследовании записи ACL.

пройти через - Когда значение свойства установлено на сквозную передачу, файлы создаются в режиме, определяемом наследуемыми ACE. Если не существует наследуемых ACE, влияющих на режим, то режим устанавливается в соответствии с режимом, запрошенным приложением.

Теперь клиент SMB может удалять файлы, созданные локально.