Мультипротокольный NAS-доступ к Netapp-ресурсам c ACLs

2017-08-10 11:51:06 995

Небольшое предисловие

Заказчик выставил требование организовать доступ по CIFS (SMB) к некоторым NFS-экспортам, которые лежат на NetApp. Звучит вроде бы несложно: нужно создать CIFS-шару на уже экспортированном qtree. Позже было выставлено требование, что нужно гранулярно управлять доступом на эти шары. Опять-таки задача выглядит решаемой: это можно контролировать и с NetApp и через оснастку Shared Folders (share permissions). Затем выяснилось, что нужно варьировать доступ к различным подпапкам на CIFS-шаре. Это уже оказалось нетривиальной задачей. Так как нужно было настроить списки контроля доступа (ACL) и для CIFS и для NFS к одним и тем же данным.

На первый взгляд, можно воспользоваться классическими правами доступа в Linux. У каждой папки и файла есть атрибуты владельца, группы владельца и others (все остальные). Ниже приведен пример классических прав доступа в Linux.

>$ ls -lrt

drwxr-xr-x. 2 root root 4096 May 8 15:47 nfsv4_test

Но что делать, если нужно более гранулярно контролировать доступ? POSIX ACLs? Они не поддерживаются NetApp. В итоге единственным решением оказались NFSv4 ACLs.

В этой статье предлагаем описание того, как транслировать NFSv4 ACLs для Windows-пользователей. Будем проводить нашу настройку пошагово. Стиль будет максимально сжатый и емкий. Я не буду останавливаться на каждом пункте подробно, к тому же не буду приводить детального листинга всех команд. Итак, приступим.

Привязка NetApp к LDAP

Предполагается, что в данной инфраструктуре существует сервер LDAP, через который происходит авторизация и аутентификация пользователей. Поэтому маппинг не используется и соответственно файл usermap.cfg не правится. Также не нужно вносить изменений в файлы passwd и group — все пользователи и группы берутся из LDAP. Ниже приведены параметры необходимые для нормальной работы сцепки:

ldap.ADdomain здесь указывается домен, к которому будем цепляться

ldap.base DC=com

ldap.enable on

ldap.fast_timeout.enable on

ldap.minimum_bind_level simple

ldap.name учетка, с которой будет проходить запрос в базу

ldap.nssmap.attribute.homeDirectory unixHomeDirectory

ldap.nssmap.attribute.uid sAMAccountName

ldap.nssmap.objectClass.posixAccount User

ldap.nssmap.objectClass.posixGroup Group

ldap.port 3268

ldap.retry_delay 10

ldap.servers адреса домен-контроллеров

ldap.usermap.attribute.unixaccount uid

ldap.usermap.attribute.windowsaccount sAMAccountName

Их необходимо выполнить на целевом vFiler. Отмечу, что существуют различные вариации этих настроек. И в вашей конкретной инфраструктуре это может не взлететь. В нашем случае мы цеплялись к AD DC с FSMO ролью Global Catalog. Проверка работоспособности сцепки на NetApp возможно провести командами getXXbyYY и wcc. Эти команды можно выполнить только в advanced mode.
Примеры корректной работы команды getXXbyYY:
FILER0*> vfiler run VFILER03 getXXbyYY getpwbyname_r ivanov

===== VFILER03

pw_name = ivanov

pw_passwd = {{******}}

pw_uid = 10000, pw_gid = 10000

pw_gecos = Ivanov, Ivan

pw_dir = /home/ivanov

pw_shell = /bin/bash


Если эта команда не возвращает подобный вывод, значит что-то настроено не так.

Продолжение статьи читайте на Хабрахабр: https://habrahabr.ru/company/icl_services/blog/335256/.