Citrix XenServer Free: Hypervizor hardening with PAM and RBAC

    Доброго времени суток, коллеги.
    XenServer является одним из самых популярных гипервизоров на данный момент.
    Во многом благодаря тому, что дает неплохой функционал «за бесплатно».
    Поэтому многие решения сделаны на Free версии без возможностей Enterprise.
    А в число «платных» фишек входит и авторизация средствами LDAP с возможностью разграничения прав пользователей.
    Да-да, вы не ослышались. В бесплатном XenServer все пользователи равны. То есть имеют роль Pool Admin.
    Попробуем разобраться, — как мы сможем «защитить» гипервизор в бесплатной версии?




    В соответствии с политикой компании Citrix версии XenServer именуемые Free и Advanced, суть дела, являются однопользовательскими. То есть любой пользователь системы будет восприниматься XenAPI как пользователь с ролью PoolAdmin. Что негативно сказывается на процессе обслуживания гипервизора с точки зрения информационной безопасности.
    Для решения этой проблемы без покупки версии Enterprise есть как минимум два пути.
    Начнем с первого, более простого и понятного.

    Ограничим круг пользователей системы, имеющих доступ к XenApi.
    Для этого для начала создадим файл:

    [root@xenserver /]# cd /etc/
    [root@xenserver etc]# vi xapi_allow


    В него мы внесем список пользователей, допущенных к управлению гипервизором.

    root
    admin1
    admin2
    admin3


    Спасибо ребятам из XenSource за то, что сделали они: это PAM модуль xapi для управления доступом к гипервизору. Но по-умолчанию, он в системе используется немножко не так, как нам надо.
    Поэтому удалим из него все записи, и внесем новые:

    [root@xenserver /]# cd /etc/pam.d/
    [root@xenserver pam.d]# vi xapi


    #%PAM-1.0
    auth required pam_env.so
    auth required pam_listfile.so item=user sense=allow file=/etc/xapi_allow
    auth sufficient pam_unix.so try_first_pass nullok
    auth required pam_deny.so
     
    account required pam_unix.so
     
    password required pam_cracklib.so try_first_pass retry=3
    password sufficient pam_unix.so try_first_pass use_authtok nullok md5
    password required pam_deny.so
     
    session optional pam_keyinit.so revoke
    session required pam_limits.so
    session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
    session required pam_unix.so
     


    Теперь для того, что бы пользователь подключился к XenAPI необходимо, что бы запись о нем содержалась в файле xapi_allow. Теперь стоит ограничить доступ к этому файлу:

    [root@xenserver /]# chmod 600 /etc/xapi_allow


    Отлично! Теперь мы можем «не допускать» неугодных нам пользователей системы к управлению гипервизором. В пределах лицензии Free/Advanced, пожалуй, это все что можно сделать.
    Но, можно пойти и дальше. Можно включить использование RBAC системы. Для этого нам потребуется включить в системе внешнюю аутентификацию. Тут мы упираемся в ограничение лицензии, и не можем подключиться на LDAP. Но никто нам не мешает сделать это через PAM.

    [root@xenserver /]# xe pool-enable-external-auth auth-type=PAM service-name=pam


    Теперь нам необходимо назначить роли нашим пользователям.
    Но, увы и ах, лицензия Free/Advanced не позволяет этого сделать.
    Что же, давайте попробуем сделать это, не нарушая при этом лицензии.

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

    [root@xenserver /]# xe role-list
    uuid ( RO): 7955168d-7bec-10ed-105f-c6a7e6e63249
    name ( RO): vm-power-admin
    description ( RO): The VM Power Administrator role has full access to VM and template management and can choose where to start VMs and use the dynamic memory control and VM snapshot features
     
     
    uuid ( RO): aaa00ab5-7340-bfbc-0d1b-7cf342639a6e
    name ( RO): vm-admin
    description ( RO): The VM Administrator role can manage VMs and templates
     
     
    uuid ( RO): fb8d4ff9-310c-a959-0613-54101535d3d5
    name ( RO): vm-operator
    description ( RO): The VM Operator role can use VMs and interact with VM consoles
     
     
    uuid ( RO): 7233b8e3-eacb-d7da-2c95-f2e581cdbf4e
    name ( RO): read-only
    description ( RO): The Read-Only role can log in with basic read-only access
     
     
    uuid ( RO): b9ce9791-0604-50cd-0649-09b3284c7dfd
    name ( RO): pool-operator
    description ( RO): The Pool Operator role manages host- and pool-wide resources, including setting up storage, creating resource pools and managing patches, high availability (HA) and workload balancing (WLB)
     
     
    uuid ( RO): 0165f154-ba3e-034e-6b27-5d271af109ba
    name ( RO): pool-admin
    description ( RO): The Pool Administrator role has full access to all features and settings, including accessing Dom0 and managing subjects, roles and external authentication


    Это те роли, которые вы сможете использовать на своем сервере.
    Теперь добавьте субъектов-пользователей.

    [root@xenserver /]# xe subject-add subject-name=admin1
    932d3540-d08c-bbf8-adf8-03c0f9aaaf43


    И убедитесь, что все сделано правильно и ваш новый субъект получил права «pool-admin» по умолчанию.

    [root@xenserver /]# xe subject-list
    uuid ( RO): 932d3540-d08c-bbf8-adf8-03c0f9aaaf43
    subject-identifier ( RO): u501
    other-config (MRO): subject-name: admin1; subject-uid: u501; subject-gid: g501; subject-gecos:; subject-displayname: admin1; subject-is-group: false; subject-account-disabled: false; subject-account-expired: false; subject-account-locked: false; subject-password-expired: false
    roles (SRO): pool-admin
     


    Теперь нам необходимо задать ему необходимые права. Инструменты для этого, к сожалению, заблокированы лицензией. Но никто не мешает это сделать «вручную» отредактировав файл-базу state.db.
    В качестве удобного метода рекомендую использовать «мини» программы на подобие описанной
    здесь
    Сейчас же я опишу, как это сделать вручную. Для начала остановите XenAPI.

    [root@xenserver /]# /etc/init.d/xapi stop


    Теперь откройте в вашем любимом редакторе файл /var/xapi/state.db:

    [root@xenserver /]# vi /var/xapi/state.db


    Теперь сделайте поиск по файлу «admin1» (имя добавленного вами пользователя). Нас интересуют вот эти строчки:

    other_config="(('subject-name' 'admin1') ('subject-uid' 'u501') ('subject-gid' 'g501') ('subject-gecos' '') ('subjec
    t-displayname' 'admin1') ('subject-is-group' 'false') ('subject-account-disabled' 'false') ('subject-account-expired' 'false') ('subject-account-locked'
    'false') ('subject-password-expired' 'false'))"
    subject_identifier="u501" uuid="932d3540-d08c-bbf8-adf8-03c0f9aaaf43" roles="


    Как вы видите, изменить роли можно и вручную в разделе «roles=» Поменяем нашему пользователю роль с «pool-admin» на «read-only»:

    roles="('OpaqueRef:7233b8e3-eacb-d7da-2c95-f2e581cdbf4e')"


    Окей! Теперь запустим обратно XenAPI и проверим результат:

    [root@xenserver /]# /etc/init.d/xapi start
    Starting xapi: ....start-of-day complete. [ OK ]
    [root@xenserver /]# xe subject-list
    uuid ( RO): 932d3540-d08c-bbf8-adf8-03c0f9aaaf43
    subject-identifier ( RO): u501
    other-config (MRO): subject-name: admin1; subject-uid: u501; subject-gid: g501; subject-gecos:; subject-displayname: admin1; subject-is-group: false; subject-account-disabled: false; subject-account-expired: false; subject-account-locked: false; subject-password-expired: false
    roles (SRO): read-only
     

    Вот и все. Можно запускать виртуальные машины обратно.
    Таким образом мы, не нарушая лицензии, смогли использовать RBAC с аутентификацией через PAM.
    Всем привет, спасибо за внимание.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 15

      0
      А правка state.db вручную точно не нарушает лицензию?
        0
        Не уверен. Но скорее «нет» чем «да».
        Вопрос скорее юридический. Поскольку данные действия, по сути, являются walkaround для использования необходимого функционала.
          0
          В EULA пишут, что нельзя модифицировать сам XenServer. Запрета на обход ограничений при беглом просмотре не нашел.
            0
            state.db суть дела конфигурационный файл, куда складывает все данные XenAPI во время остановки.
            По-сути, мы лишь меняем настройки XenServer.
              0
              Как правило, это часть программы. Значит её нельзя редактировать, ссылаясь на особенности бесплатной лицензии.
                +2
                Изменение конфигурационных файлов является неотъемлемой частью работы с системой.
                Изменение этого файла предусмотрено, так как компания Citrix дает совету по изменению параметров таким методом (при некоторых специфичных неисправностях). Так же компания выпустила утилиту для работы с этим файлом.
                В совокупности, это позволяется считать данные изменения легитимными, хоть и не документированными.

                При наличии претензий со стороны компании Citrix я, в свою очередь, готов убрать размещенный материал.
                  0
                  Ну у Вас своя точка зрения, у меня своя. Возможно я и ошибаюсь. Ну здесь без «выносок» в действующей лицензии, трудно будет разобраться. Спор абы: яйцо или курица появилась первой.
                    0
                    Конечно. Здесь требуется жесткий юридический подход.
              0
              С учётом, что xapi вообще опенсорсный, это всё странно звучит :)
                0
                Но тем не менее, производитель накладывает некоторые ограничения в лицензиях.
                  0
                  Я имею в виду, что никто не мешает вам собрать туда свою версию с теми изменениями, которые хотите. Сырцы xapi тут: github.com/xen-org/xen-api

                  Лицензия на xapi позволяет вам делать с ним что угодно для личного пользования и даже раздавать это окружающим.
                    0
                    Несомненно. Но xapi в версии Citrix уже несет в себе некоторый функционал, отличный от исходного. И его хотелось бы использовать.
          0
          Любопытно.

          А не знаете ли вы способ включить Live Memory Snapshot? Очень уж интересно пощупать эту фичу на предмет того, насколько хорошо она работает.
            0
            Наиболее доступный способ, — взять триал лицензию на сайте компании Citrix (http://www.citrix.com)
            Они предоставляют возможность попробовать весь их платный функционал.
          • НЛО прилетело и опубликовало эту надпись здесь

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

            Самое читаемое