Небольшое предисловие
Заказчик выставил требование организовать доступ по 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/.