Управление доступом к файловым серверам Samba в домене Windows на базе AD

    Мы продолжаем серию статей про взаимодействие Linux и Windows. Эта статья посвящена управлению доступом к серверам Samba из домена AD.

    В отличие от предыдущих статей, где в качестве примера использовалась тестовая сеть, эта статья базируется на реальной, «боевой» сети Московского энергетического института. В сети МЭИ зарегистрировано около 25000 пользователей. Сеть объединяет все учебные корпуса МЭИ с более чем 4500 рабочими станциями. Мы рассмотрим настройку доступа к серверу Samba, предоставляющему пользователям следующие услуги:
    •доступ к персональному каталогу пользователя;
    •доступ к общим каталогам;
    •управление доступом как с использованием средств Samba, так и с использованием средств Windows.

    Про сеть МЭИ

    Информационно-вычислительная сеть Московского энергетического института (ИВС МЭИ) использует доменную структуру Windows на базе AD. Наша сеть поддерживает несколько доменов. Доменом верхнего уровня является домен mpei.local. Домен public.mpei.local предназначен для пользователей МЭИ, домен init.mpei.local предназначен для сотрудников Информационно-вычислительного центра МЭИ.
    Сервер, который мы настраиваем, представляет собой кластерное файловое хранилище и предназначен для размещения каталогов пользователей — сотрудников ИВЦ МЭИ и сотрудников МЭИ (пользователи домена INIT и PUBLIC) и общих каталогов. Операционная система сервера — Ubuntu Linux 12.04 LTS.
    Backups Предназначен для хранения резервных копий. Доступ к каталогу имеют администраторы доменов.
    Каталоги ISOs и Software Предназначены для хранения образов дисков дистрибутивов операционных систем и другого программного обеспечения, используемого в ИВС МЭИ. Информация, размещенная в этих каталогах, доступна всем пользователям, но запись разрешена только администраторам доменов.
    Каталог VMImages Предназначен для хранения образов виртуальных машин, применяемых в ИВС МЭИ. Этот каталог доступен всем пользователям, запись разрешена только администраторам доменов.
    Каталоги пользователей Предназначены для размещения файлов пользователей.

    Кластерное файловое хранилище создано на основе распределенного объектового хранилища и файловой системы Ceph. Более подробно о Ceph можно прочесть на сайте проекта — www.ceph.com. В состав хранилища входят три сервера, которые одновременно являются хранилищами объектов и управляют размещением данных. Доступ к файловой системе хранилища осуществляется через шлюз, который является клиентом хранилища Ceph с одной стороны, а с другой — предоставляет доступ к этому хранилищу через Samba. Шлюзовая машина представляет собой виртуальную машину на базе KVM, работающую на серверах с Ceph. Именно эта шлюзовая машина и будет тем сервером, который мы настраиваем для организации доступа. Операционная система — тоже Ubuntu Linux 12.04 LTS. Наш сервер называется filer.mpei.local.

    Способ организации кластерного файлового хранилища не является определяющим для решения задачи управления доступом. Для создания такого хранилища могут быть использованы самые различные технологии и их реализации.

    Необходимо отметить, что в нашей сети зарегистрировано большое количество пользователей — около 25000. Поэтому создание каталогов для них является весьма трудоемкой задачей. При этом далеко не все пользователи будут иметь свои каталоги на файловом хранилище. Отсюда следует, что создание каталогов должно производиться автоматически, при первом соединении пользователя с сервером. Способ автоматического создания каталогов пользователей при использовании командной оболочки Linux рассматривался ранее в статье про настройку CentOS. В нашем случае такой метод неприменим, поскольку институтская сеть объединяет пользователей с различным опытом работы и знанием операционных систем. Создание каталога при первом подключении должно быть прозрачно для пользователя и не зависеть от операционной системы сервера.

    Способ включения сервера Samba на базе Ubuntu Linux уже рассматривался раньше. Мы включаем наш сервер в домен верхнего уровня mpei.local. Для авторизации пользователей мы будем использовать winbind.

    Поскольку у нас используется несколько доменов, то целесообразно в разделе глобальной конфигурации Samba в файле smb.conf указать:
    winbind use default domain = no
    


    Отключив эту опцию, мы поясняем Samba, что пользователи без указания доменного имени будут рассматриваться как локальные пользователи сервера, а для остальных случаев необходимо указывать доменное имя. Это необходимо сделать, поскольку пользователи могут иметь совпадающие имена в различных доменах.

    При правильном включении сервера filer в домен в ответ на запрос getent passwd мы должны увидеть список пользователей всех доменов, а в ответ на запрос getent group — список групп всех доменов. Если это не так, следует проверить содержимое файла /etc/nsswitch.conf, который должен выглядеть так:
     root@filer:~# cat /etc/nsswitch.conf
    # /etc/nsswitch.conf
    #
    # Example configuration of GNU Name Service Switch functionality.
    # If you have the `glibc-doc-reference' and `info' packages installed, try:
    # `info libc "Name Service Switch"' for information about this file.
    
    


    passwd:         compat winbind
    group:          compat winbind
    shadow:         compat
    


    hosts:          files dns
    networks:       files
    


    protocols:      db files
    services:       db files
    ethers:         db files
    rpc:            db files
    


    netgroup:       nis
    root@filer:~#
    


    Следует проверить, как авторизуются пользователи Samba. Для этого посмотрим содержимое файла /etc/pam.d/samba:
    root@filer:~# cat /etc/pam.d/samba
    @include common-auth
    @include common-account
    @include common-session-noninteractive
    root@filer:~#
    


    Как видно, файл очень простой и состоит из ссылок на файлы /etc/pam.d/common-auth, /etc/pam.d/common-account и /etc/pam.d/common-session-noninteractive.
    Соответственно, следует проверить и содержимое этих файлов, на предмет использования ими модуля pam_winbind.so. В подавляющем большинстве случаев нет необходимости править содержимое файлов системы PAM, расположенных в /etc/pam.d. Но у нас есть требование автоматического создания каталогов пользователей при первом входе в систему. Для нашей конфигурации в файл /etc/pam.d/common-session-noninteractive нужно добавить строку
    session 	required                 pam_mkhomedir.so skel=/etc/skel umask=0077
    


    Можно включить эту строку и в файл /etc/pam.d/common-session. Наличие этой строки вызывает модуль pam_mkhomedir.so (более подробно можно прочесть на http://manpages.ubuntu.com/manpages/maverick/man8/pam_mkhomedir.8.html или http://www.ibm.com/developerworks/ru/library/l-pam/index.html) для автоматического создания домашнего каталога пользователя при входе в систему.
    В результате вывод команды getent passwd должен выглядеть примерно так:
    PUBLIC\khorkov:*:28972:10007:Хорьков Сергей Николаевич:/ceph/home/PUBLIC/khorko :/bin/bash
    


    Поля соответствуют полям файла /etc/passwd, стандартного места хранения данных о пользователях в системах Linux и Unix. Поля именуются так:
    •login name
    •optional encrypted password
    •numerical user ID
    •numerical group ID
    •user name or comment field
    •user home directory
    •optional user command interpreter
    При подключении к домену Windows на базе AD поле login name представляет собой комбинацию имени домена и имени пользователя, где разделителем является либо обратный слэш (\), либо символ, определенный в опции winbind separator.
    Поле password представляется символом *, что означает внешний источник паролей.
    Значения полей UID и GID формируются на основе опций idmap uid и idmap gid (или idmap config) файла конфигурации Samba.
    Поле user home directory формируется на основе опции template homedir файла конфигурации Samba. А поле user command interpreter — на основе значения опции template shell файла конфигурации Samba.

    На основании этого вывода мы можем сказать, что домашний каталог для пользователя khorkov в домене PUBLIC будет /ceph/home/PUBLIC/khorkov. Именно этот каталог и должен автоматически создаваться. Таким образом, наш файл /etc/samba/smb.conf в разделах global и homes выглядит следующим образом:
    [global]
            log file = /var/log/samba/log.%m
            obey pam restrictions = yes
            map to guest = bad user
            encrypt passwords = true
            dns proxy = no
            netbios name = Filer
            server string = %h server (Samba, Ubuntu)
            unix password sync = yes
            workgroup = MPEILOCAL
            os level = 20
            security = ads
            syslog = 4
            panic action = /usr/share/samba/panic-action %d
            usershare allow guests = yes
            max log size = 1000
            pam password change = yes
            realm = MPEI.LOCAL
            idmap uid = 10000-50000
            idmap gid = 10000-50000
            template shell = /bin/bash
            template homedir = /ceph/home/%D/%U
            winbind enum groups = yes
            winbind enum users = yes
            winbind refresh tickets = yes
            acl compatibility = auto
            map acl inherit = yes
            usershare path = /var/lib/samba/usershares
    [homes]
       comment = Home Directories
       browseable = no
        path = /ceph/home/%D/%U
       read only = no
       create mask = 0700
       directory mask = 0700
       valid users = PUBLIC\%S INIT\%S
    
    


    Большая часть параметров уже рассматривалась в предыдущих статьях (например, http://habrahabr.ru/post/171057/ или http://habrahabr.ru/post/143190/). Остановимся подробнее на тех опциях, которые имеют значение для безопасности и управления доступом.

    Опция obey pam restrictions = yes дает директиву серверу Samba подчиняться указаниям, изложенным в директивах pam для учетных записей пользователей и сессий. В нашем случае — мы согласны с командой на создание домашнего каталога.
    Опции acl compatibility = auto и map acl inherit = yes разрешают серверу Samba устанавливать режим совместимости списков доступа к файлам и наследование списков доступа. Эти параметры имеют важное значения для поддержки Samba управления доступом от Windows-клиентов. Для корректной работы необходимо, чтобы файловая система, на которой размещен разделяемый ресурс Samba, поддерживала POSIX ACL. Для этого необходимо установить соответствующие пакеты в Linux (для Ubuntu это acl и attr).

    Далее, в секции [homes] определяются каталоги пользователей. Путь к каталогам определяется опцией path. В файле конфигурации Samba действуют правила подстановки. В частности, %D заменяется на краткое имя домена, %U — на имя пользователя, %S — на имя сессии (совпадает с именем пользователя). Доступ к каталогам определяется для чтения-записи, о чем говорит опция read only = no. Опция valid users описывает список пользователей, которым разрешен доступ (регистрация) к этому каталогу. Важное значение имеют опции create mask (маска прав при создании файла) и directory mask (права при создании каталога). В любом случае владельцем домашнего каталога, создаваемых файлов и каталогов будет пользователь, соединившийся с ресурсом. При этом uid и gid пользователя определяются в соответствии с результатом команды getent passwd.

    Учтите, что в 99% случаев имя группы будет \Domain users. Указанные значения 0700 дают пользователю полные права на доступ к файлам или каталогам и запрещают доступ всем остальным (в том числе и группе). Для разрешения доступа группе на чтение третий октет должен быть равен либо 4 (чтение), либо 5 (чтение и исполнение). Об определении прав доступа в Linux можно прочесть в любой книге по этой операционной системе.
    Значения опции valid users ограничивает список пользователей, имеющих доступ к каталогу, пользователями доменов INIT и PUBLIC.

    Теперь перейдем к настройкам общих каталогов на примере настройки каталога Software:
    [Software]
            browseable = yes
            comment = Various soft
            read only = yes
            valid users = MPEILOCAL\%U  PUBLIC\%U  INIT\%U
            path = /ceph/data/Software
            inherit acls = yes
            inherit owner = yes
            inherit permissions = yes
            map acl inherit = yes
            nt acl support = yes
            write list = @"MPEILOCAL\enterprise admins" @"PUBLIC\Domain admins" @"IN
    IT\Domain admins"  PUBLIC\khorkov
            admin users = PUBLIC\khorkov
            hide unreadable = yes
    


    Описание пути к разделяемому каталогу и ограничения для пользователей мы уже рассматривали. Опция nt acl support = yes дает директиву Samba отображать права доступа Windows на права доступа Linux. Опции inherit acls = yes, inherit owner = yes, inherit permissions = yes и map acl inherit = yes указывает на поддержку Samba наследования прав и списков доступа. Опция hide unreadable = yes скрывает от пользователя нечитаемые каталоги и файлы.
    Опция admin users задает список пользователей, имеющих административные права (права суперпользователя). Опция write list задает список пользователей, имеющих права записи в этот каталог. При создании каталога следует определить его принадлежность. Большей частью достаточно владельцем назначить root, а группу определить как Domain users (в нашем случае — как MPEILOCAL\Domain users). Списки пользователей могут задаваться как в виде DOMAIN\user (пользователи домена), так и в виде user (пользователи самого сервера). Можно задавать их и в виде наименований групп, предваряя имя группы символом @. В списке поля разделяются пробелами. Имена групп Windows, в случае, когда они состоят из более чем одного слова, следует заключать в кавычки. В нашем примере мы дали разрешение на чтение каталога Software всем пользователям доменов MPEILOCAL, INIT и PUBLIC, а право на запись — для администраторов доменов. Остальные каталоги (Backups, ISOs и VMimages) настраиваются аналогично вышеприведенному примеру.

    Подключимся к серверу filer (рис. 1).


    Рис. 1. Доступ к серверу Samba.

    Проверим доступ к домашнему каталогу (рис. 2).


    Рис. 2. Доступ к домашнему каталогу.

    Можно проверить права доступа на создание и удаление файлов и каталогов. Домашний каталог с точки зрения Linux выглядит следующим образом:
    root@filer:~#
    root@filer:~# ls -l /ceph/home/PUBLIC/khorkov
    total 0
    drwx------ 1 PUBLIC\khorkov PUBLIC\domain users 45360157 Oct 11 19:36 For Cisco
    root@filer:~#
    


    Как видим, права на любые действия с файлами принадлежат только владельцу. Если сейчас попытаться внести изменения в настройки доступа средствами Windows, то мы получим ошибку о запрете записи (рис. 3).


    Рис. 3. Ошибка задания прав.

    Эта ошибка задания прав на каталог, к которому пользователь имеет все права, возникает потому, что файловая система, где размещен каталог, не поддерживает списки доступа. На файловой системе с поддержкой списков доступа такой ошибки не возникает. Проверить наличие этой поддержки можно командой:
    root@filer:~# tune2fs -l /dev/sda1
    tune2fs 1.42 (29-Nov-2011)
    Filesystem volume name:   <none>
    Last mounted on:          /
    Filesystem UUID:          e4136579-9486-4e54-a8cf-6b28d4015e92
    Filesystem magic number:  0xEF53
    Filesystem revision #:    1 (dynamic)
    Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
    Filesystem flags:         signed_directory_hash
    Default mount options:    user_xattr acl
    Filesystem state:         clean
    Errors behavior:          Continue
    Filesystem OS type:       Linux
    
    


    Здесь мы видим, что файловая система на устройстве /dev/sda1 поддерживает управление доступом. Включение поддержки acl возможно при монтировании файловой системы Linux, либо через утилиту tune2fs. Список файловых систем, поддерживающих acl, можно узнать в справочном руководстве (man) по команде mount в разделе FILESYSTEM SPECIFIC MOUNT OPTIONS.
    Можно посмотреть и сами списки доступа, командой
    root@filer:~# getfacl /srv
    getfacl: Removing leading '/' from absolute path names
    # file: srv
    # owner: root
    # group: root
    user::rwx
    user:MPEILOCAL\134horkovsn:rwx
    group::r-x
    mask::rwx
    other::r-x
    default:user::rwx
    default:user:MPEILOCAL\134horkovsn:rwx
    default:group::---
    default:mask::rwx
    default:other::---
    
    root@filer:~#
    


    Для задания списков доступа из командной строки Linux можно воспользоваться командой setfacl или командой smbcacls. Правда, интерфейс этих команд достаточно сложный, и целесообразнее использовать окно настроек доступа Windows.

    Мы предоставляли управление доступом к серверу Samba в основном через редактирование файла /etc/samba/smb.conf. Это один из самых простых и эффективных способов. Существует масса графических приложений для настройки Samba, поставляемых вместе с дистрибутивом Linux. Можно также использовать web-средства управления, такие как swat или webmin. Достоинством swat, например, является встроенная документация — не нужно постоянно переключаться между настройками и справочным руководством. Но и swat, и webmin грешат ошибками в настройках.

    Заключение


    Таким образом, мы успешно выполнили задачу по настройке доступа к файловому серверу Samba в домене Windows на базе AD.

    Работа выполнена на базе Информационно-вычислительного центра МЭИ.

    Мы будем рады вашим замечаниям и предложениям. У нас есть возможности собрать тестовую сеть, на которой отладить различные варианты и конфигурации систем для обеспечения их взаимодействия.
    Share post

    Similar posts

    Comments 19

      0
      Весьма достойно описано! Помнится, настраивал доступ из hp-ux к windows-шарам — тоже было все неоднозначно! В копилку поместил себе — пригодится!
        0
        Спасибо за статью, сейчас с этим мучаюсь.
        Надеюсь что скоро допишу статью по переводу из домена на SAMBA в ActiveDirectory с минимальными потерями.
          0
          Было бы очень интересно увидеть подобную статью — сам относительно недавно перевёл достаточно большой домен на Samba в Active Ditectory. Пришлось решать много интересных задач.
        –1
        Не совсем по теме, но вы не в курсе почему виндовая инфраструктура застыла на уровне 2005-2006 года? Тот же Exchange с тех пор не обновлялся, хотя был «центр технологий Microsoft».
        • UFO just landed and posted this here
          0
          На заметку — домен .local зарезервирован и не рекомендуется для использования.

          Интересно было бы еще про настройку Ceph и производительность.
            0
            еще на заметку, в ubuntu пока я не добавил shadow: compat winbind — у меня не отдовался список пользователей из домена.
            0
            Большое спасибо. Долго мучился с редактированием прав, через окно безопасность в Windows, пакеты acl и xattr ставил. И в конфигурацию sab.conf и /etc/fstab прописывал. С автоматическим созданием домашних каталогов тоже проблемы были, хотя прописывал «pam_mkhomedir.so skel=/etc/skel umask=0077»
            Завтра попробую у себя на файловом сервере.
            Если заработает, будет здорово!
              0
              Проверяйте пути, у меня лично так
              session required /lib/security/pam_mkhomedir.so skel=/etc/samba/skel umask=0022
                0
                Я сейчас по памяти не могу пути назвать. Настраивал больше года назад. И у меня не Ubuntu, а Debian Squeeze, но думаю разница не велика.
                Завтра проверю.
                  0
                  Ну у меня вообще gentoo, но пути проверить стоит в любом случае :)
                    0
                    Всё получилось. Только теперь появился один неприятный момент. Он создал домашние каталоги для учёток компьютеров в Active Directory. Можно-ли что-нибудь сделать, чтобы учётки создавались только для пользователей?
                      0
                      Эм, поидее не должен, тут уже надо смотреть конфиги самбы, с чего он вдруг понасоздавал директории. Поидее он её должен создавать при обращении пользователя к шаре, а не сразу все скопом.
              +2
              Слава богу не через GUI в этот раз :))
                0
                Скажите пожалуйста, а еще статьи по этой теме будут? А то у меня есть пара небольших дополнений, хотел бы вынести их в отдельный топик, «по следам» вашей серии, так сказать.
                  0
                  Большое спасибо за комментарии. Что касается продолжения этой темы, то нужно будет обсудить этот вопрос со спонсорами данного проекта. И тут Ваши комментарии имеют огромное значение в выборе тематики статей.

                  navion,
                  Как я понимаю, Вы говорите про инфраструктуру сети МЭИ? Безусловно, мы развиваемся. Все домены переведены под Windows 2008 R2, почтовые службы переезжают на Exchange 2010. Запущен кластер Vmware, на который переехала большая часть серверов. Но вносить серьезные изменения, затрагивающие работу пользователей, мы не можем. У нас, все-таки, пользователей более 4000 и пользователей очень разных. А какие-либо серьезные изменения могут привести к тому, что часть пользователей не сможет эффективно использовать сеть для своих задач. Так что изменять нужно аккуратно и, желательно, с наименьшими для пользователя сложностями и потерями.

                  KorP,
                  Задача нашего проекта, или точнее — одна из задач — расширить круг пользователей, привлечь туда еще и тех, кто предпочитает GUI командной строке. Поэтому немалая часть материалов была посвящена настройке Samba через GUI.

                  Про настройку Ceph и производительность.
                  Ceph и его использование достойны отдельной серии статей и отдельной дискуссии. Мы сейчас имеем две инсталляции Ceph. Одна из них упомянута в статье и мы планируем использование Ceph расширять. Думаю, что вскоре расскажем и про вторую инсталляцию Ceph.

                  Ceph порадовал высокой устойчивостью. Особенно хороши версии 0.56 и выше. Что я только с ним не делал — данные сохраняются. А вот скорость работы оставляет желать лучшего. Другой недостаток Ceph — отсутствие поддержки списков доступа — упомянут в статье. Ceph не сложен в установке, но требует внимания в «переходных» режимах, когда меняется состав работающих серверов. Для информационных систем, где большее значение имеет надежность и где операции записи данных сведены к минимуму — Ceph неплохое решение.

                  И еще раз спасибо за комментарии и замечания — теперь есть вопросы для обсуждения со спонсорами.

                    0
                    Не надо в nix среду привлекать тех, кто предпочитает гуй, не портите им жизнь и не усложняйте жизнь тем, кому предстоит это говно после них разгребать. Даже MS поняла что вся сила в консоле и активно вместе с 2012-м сервером пропагандирует работу в консоле через PS, а не через гуй (даже советуют ставить ОСь в режиме core, а потом уже гуй накатывать если нужно)!
                    0
                    Можно будет статью о ceph? Очень интересно.

                    Only users with full accounts can post comments. Log in, please.