Pull to refresh

Citrix XenServer Free: Hypervizor hardening with PAM and RBAC

Reading time 5 min
Views 5.3K
Доброго времени суток, коллеги.
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.
Всем привет, спасибо за внимание.
Tags:
Hubs:
+16
Comments 15
Comments Comments 15

Articles