• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Статья Как установить контейнер LXD под виртуальную машину KVM или Xen

Для обеспечения безопасности и удобства администрирования я хочу установить LXD на моем облачном сервере либо на базе XEN, либо KVM. Как установить LXD на сервер Ubuntu Linux на базе технологии виртуализации KVM?

Вы можете реализовать контейнер Linux (LXD / LXC) для разделения вашего облачного сервера. Оба облачных сервера, его файлы и ресурсы получают доступ только к таким сервисам, как Apache, Nginx, MySQL, Proxy, Memcached и т. Д. Canonical LXD – это гипервизор с чистым контейнером, который запускает немодифицированные операционные системы и приложения Linux с операциями в стиле VM с невероятной скоростью и интенсивностью. В этом кратком руководстве вы узнаете, как установить последнюю стабильную версию контейнера LXD под облачным сервером KVM, размещенную в Linode для механизма безопасности на сервере LTS Ubuntu Linux 16.04.xx.

28801


Шаг 1 – Настройте PPA

Для установки самой последней версии, вам необходимо использовать PPA следующим образом. Введите команду apt или apt-get так, как указано ниже для того, чтобы установить software-properties-common:
Код:
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:ubuntu-lxc/lxd-stable
Примеры возможных выводов данных:
Код:
This PPA contains the latest stable release of LXD as well as the latest stable version of any of its dependencies.
More info: https://launchpad.net/~ubuntu-lxc/+archive/ubuntu/lxd-stable
Press [ENTER] to continue or ctrl-c to cancel adding it

gpg: keyring `/tmp/tmpgjzialhs/secring.gpg' created
gpg: keyring `/tmp/tmpgjzialhs/pubring.gpg' created
gpg: requesting key 7635B973 from hkp server keyserver.ubuntu.com
gpg: /tmp/tmpgjzialhs/trustdb.gpg: trustdb created
gpg: key 7635B973: public key "Launchpad PPA for Ubuntu LXC team" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
OK
Обновите вашу систему:
Код:
$ sudo apt-get update
$ sudo apt-get dist-upgrade
Примеры возможных выводов данных:
Код:
Reading package lists... Done
Building dependency tree      
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
  libseccomp2
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 36.9 kB of archives.
After this operation, 28.7 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://ppa.launchpad.net/ubuntu-lxc/lxd-stable/ubuntu xenial/main amd64 libseccomp2 amd64 2.3.1-2ubuntu2~ubuntu16.04.1~ppa1 [36.9 kB]
Fetched 36.9 kB in 0s (79.1 kB/s)     
(Reading database ... 29837 files and directories currently installed.)
Preparing to unpack .../libseccomp2_2.3.1-2ubuntu2~ubuntu16.04.1~ppa1_amd64.deb ...
Unpacking libseccomp2:amd64 (2.3.1-2ubuntu2~ubuntu16.04.1~ppa1) over (2.2.3-3ubuntu3) ...
Processing triggers for libc-bin (2.23-0ubuntu5) ...
Setting up libseccomp2:amd64 (2.3.1-2ubuntu2~ubuntu16.04.1~ppa1) ...
Processing triggers for libc-bin (2.23-0ubuntu5) ...
Шаг 2 – Установка lxd

Введите следующие команды: apt команда или apt-get команда:
Код:
$ sudo apt-get install lxd
ИЛИ
Код:
$ sudo apt install lxd
Примеры возможных выводов данных:
Код:
Reading package lists... Done
Building dependency tree      
Reading state information... Done
The following additional packages will be installed:
  acl dns-root-data dnsmasq-base ebtables liblxc1 liblzo2-2 libnetfilter-conntrack3 lxc-common lxcfs lxd-client squashfs-tools uidmap
Suggested packages:
  criu lxd-tools
The following NEW packages will be installed:
  acl dns-root-data dnsmasq-base ebtables liblxc1 liblzo2-2 libnetfilter-conntrack3 lxc-common lxcfs lxd lxd-client squashfs-tools uidmap
0 upgraded, 13 newly installed, 0 to remove and 0 not upgraded.
Need to get 5,708 kB of archives.
After this operation, 24.2 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://mirrors.linode.com/ubuntu xenial/main amd64 liblzo2-2 amd64 2.08-1.2 [48.7 kB]
Get:2 http://mirrors.linode.com/ubuntu xenial/main amd64 acl amd64 2.2.52-3 [38.0 kB]
Get:3 http://mirrors.linode.com/ubuntu xenial/main amd64 dns-root-data all 2015052300+h+1 [15.0 kB]
Get:4 http://mirrors.linode.com/ubuntu xenial/main amd64 libnetfilter-conntrack3 amd64 1.0.5-1 [36.6 kB]
Get:5 http://mirrors.linode.com/ubuntu xenial-updates/main amd64 dnsmasq-base amd64 2.75-1ubuntu0.16.04.1 [294 kB]
Get:6 http://mirrors.linode.com/ubuntu xenial/main amd64 ebtables amd64 2.0.10.4-3.4ubuntu1 [79.6 kB]
Get:7 http://mirrors.linode.com/ubuntu xenial/main amd64 squashfs-tools amd64 1:4.3-3ubuntu2 [105 kB]
Get:8 http://mirrors.linode.com/ubuntu xenial/main amd64 uidmap amd64 1:4.2-3.1ubuntu5 [65.9 kB]
Get:9 http://ppa.launchpad.net/ubuntu-lxc/lxd-stable/ubuntu xenial/main amd64 lxc-common amd64 2.0.6-0ubuntu5~ubuntu16.04.1~ppa1 [77.2 kB]
Get:10 http://ppa.launchpad.net/ubuntu-lxc/lxd-stable/ubuntu xenial/main amd64 liblxc1 amd64 2.0.6-0ubuntu5~ubuntu16.04.1~ppa1 [252 kB]
Get:11 http://ppa.launchpad.net/ubuntu-lxc/lxd-stable/ubuntu xenial/main amd64 lxcfs amd64 2.0.5-0ubuntu2~ubuntu16.04.1~ppa1 [42.8 kB]
Get:12 http://ppa.launchpad.net/ubuntu-lxc/lxd-stable/ubuntu xenial/main amd64 lxd-client amd64 2.7-0ubuntu2~ubuntu16.04.1~ppa1 [1,923 kB]
Get:13 http://ppa.launchpad.net/ubuntu-lxc/lxd-stable/ubuntu xenial/main amd64 lxd amd64 2.7-0ubuntu2~ubuntu16.04.1~ppa1 [2,730 kB]
Fetched 5,708 kB in 3s (1,448 kB/s)
Selecting previously unselected package liblzo2-2:amd64.
(Reading database ... 29837 files and directories currently installed.)
Preparing to unpack .../liblzo2-2_2.08-1.2_amd64.deb ...
Unpacking liblzo2-2:amd64 (2.08-1.2) ...
Selecting previously unselected package acl.
Preparing to unpack .../acl_2.2.52-3_amd64.deb ...
Unpacking acl (2.2.52-3) ...
Selecting previously unselected package dns-root-data.
Preparing to unpack .../dns-root-data_2015052300+h+1_all.deb ...
Unpacking dns-root-data (2015052300+h+1) ...
Selecting previously unselected package libnetfilter-conntrack3:amd64.
Preparing to unpack .../libnetfilter-conntrack3_1.0.5-1_amd64.deb ...
Unpacking libnetfilter-conntrack3:amd64 (1.0.5-1) ...
Selecting previously unselected package dnsmasq-base.
Preparing to unpack .../dnsmasq-base_2.75-1ubuntu0.16.04.1_amd64.deb ...
Unpacking dnsmasq-base (2.75-1ubuntu0.16.04.1) ...
Selecting previously unselected package ebtables.
Preparing to unpack .../ebtables_2.0.10.4-3.4ubuntu1_amd64.deb ...
Unpacking ebtables (2.0.10.4-3.4ubuntu1) ...
Selecting previously unselected package lxc-common.
Preparing to unpack .../lxc-common_2.0.6-0ubuntu5~ubuntu16.04.1~ppa1_amd64.deb ...
Unpacking lxc-common (2.0.6-0ubuntu5~ubuntu16.04.1~ppa1) ...
Selecting previously unselected package liblxc1.
Preparing to unpack .../liblxc1_2.0.6-0ubuntu5~ubuntu16.04.1~ppa1_amd64.deb ...
Unpacking liblxc1 (2.0.6-0ubuntu5~ubuntu16.04.1~ppa1) ...
Selecting previously unselected package lxcfs.
Preparing to unpack .../lxcfs_2.0.5-0ubuntu2~ubuntu16.04.1~ppa1_amd64.deb ...
Unpacking lxcfs (2.0.5-0ubuntu2~ubuntu16.04.1~ppa1) ...
Selecting previously unselected package lxd-client.
Preparing to unpack .../lxd-client_2.7-0ubuntu2~ubuntu16.04.1~ppa1_amd64.deb ...
Unpacking lxd-client (2.7-0ubuntu2~ubuntu16.04.1~ppa1) ...
Selecting previously unselected package squashfs-tools.
Preparing to unpack .../squashfs-tools_1%3a4.3-3ubuntu2_amd64.deb ...
Unpacking squashfs-tools (1:4.3-3ubuntu2) ...
Selecting previously unselected package uidmap.
Preparing to unpack .../uidmap_1%3a4.2-3.1ubuntu5_amd64.deb ...
Unpacking uidmap (1:4.2-3.1ubuntu5) ...
Selecting previously unselected package lxd.
Preparing to unpack .../lxd_2.7-0ubuntu2~ubuntu16.04.1~ppa1_amd64.deb ...
Adding system user `lxd' (UID 111) ...
Adding new user `lxd' (UID 111) with group `nogroup' ...
Creating home directory `/var/lib/lxd/' ...
Adding group `lxd' (GID 118) ...
Done.
Unpacking lxd (2.7-0ubuntu2~ubuntu16.04.1~ppa1) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for libc-bin (2.23-0ubuntu5) ...
Processing triggers for dbus (1.10.6-1ubuntu3.3) ...
Processing triggers for systemd (229-4ubuntu16) ...
Processing triggers for ureadahead (0.100.0-19) ...
Setting up liblzo2-2:amd64 (2.08-1.2) ...
Setting up acl (2.2.52-3) ...
Setting up dns-root-data (2015052300+h+1) ...
Setting up libnetfilter-conntrack3:amd64 (1.0.5-1) ...
Setting up dnsmasq-base (2.75-1ubuntu0.16.04.1) ...
Setting up ebtables (2.0.10.4-3.4ubuntu1) ...
update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
Setting up lxcfs (2.0.5-0ubuntu2~ubuntu16.04.1~ppa1) ...
Setting up lxd-client (2.7-0ubuntu2~ubuntu16.04.1~ppa1) ...
Setting up squashfs-tools (1:4.3-3ubuntu2) ...
Setting up uidmap (1:4.2-3.1ubuntu5) ...
Setting up liblxc1 (2.0.6-0ubuntu5~ubuntu16.04.1~ppa1) ...
Setting up lxd (2.7-0ubuntu2~ubuntu16.04.1~ppa1) ...
Setting up lxd dnsmasq configuration.

To go through the initial LXD configuration, run: lxd init

Setting up lxc-common (2.0.6-0ubuntu5~ubuntu16.04.1~ppa1) ...
Processing triggers for libc-bin (2.23-0ubuntu5) ...
Processing triggers for dbus (1.10.6-1ubuntu3.3) ...
Processing triggers for systemd (229-4ubuntu16) ...
Processing triggers for ureadahead (0.100.0-19) ...
Шаг 3 – Добавление пользовательского аккаунта для lxd

Введите следующую команду для того, чтобы добавить пользователя с именем vivek, для этого запустите:
Код:
$ sudo adduser vivek
Убедитесь, что vivek является частью вторичной группы под названием lxd группа, для этого введите:
Код:
$ sudo usermod -a -G lxd vivek
Для проверки, запустите команду id command следующим образом:
Код:
$ id vivek
Примеры возможных выводов данных:
Код:
uid=1002(vivek) gid=1002(vivek) groups=1002(vivek),118(lxd)
Шаг 4 – Настройте lxd

Чтобы пройти начальную конфигурацию LXD, запустите:
Код:
$ sudo lxd init
Примеры возможных выводов данных:

28802


Шаг 5 – Создание и использование вашего первого контейнера

Сначала войдите как пользователь vivek:
Код:
$ ssh vivek@server1.cyberciti.biz
ИЛИ
Код:
$ su – vivek
Убедитесь, что клиент lxc взаимодействует LXD демоном:
Код:
$ lxc list
Примеры возможных выводов данных:
Код:
+------+-------+------+------+------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+------+-------+------+------+------+-----------+
Для создания вашего первого контейнера необходимо использовать следующий синтаксис:
Код:
lxc launch images:{distro}/{version}/{arch}{container-name-here}
Чтобы просмотреть все доступные образы для различных дистрибутивов Linux, выполните:
Код:
$ lxc image list images
Для создания контейнера CentOS Linux v7.x:
Код:
$ lxc launch images:centos/7/amd64 my-cenots
Примеры возможных выводов данных:
Код:
Creating my-cenots
Retrieving image: 100% (16.80MB/s)
Starting my-cenots
Для создания контейнера Ubuntu Linux 16.4 LTS:
Код:
$ lxc launch images:ubuntu/xenial/amd64 my-ubuntu
Примеры возможных выводов данных:

28803

Анимированный рисунок 01: Lxc, создающий вашу виртуальную машину (VM)

Step 6 – Заходим в ваш первый контейнер

Введите следующую команду:
Код:
$ lxc exec my-centos bash
$ lxc exec my-ubuntu bash
Теперь вы можете обновить свой контейнер или установить необходимое программное обеспечение.

Шаг 6 – Заблокировать пользователя root

Вам не нужен пользователь root или пользователь по умолчанию, такой как ubuntu / centos, созданный в вашем контейнере:
Код:
$ lxc exec my-ubuntu bash
Заблокируйте доступ к учетной записи root, для этого запустите:
Код:
# passwd -l root
Удалите нежелательные пользовательские аккаунты с помощью команды userdel, для этого запустите:
Код:
# userdel -r ubuntu
Шаг 7 – Основные команды управления контейнерами Linux

Давайте посмотрим важные команды для управления вашими контейнерами.

Запустите контейнер
Код:
$ lxc start containerName
Остановить работу контейнера
Код:
$ lxc stop containerName
Перезапуск контейнера
Код:
$ lxc restart containerName
Удаление контейнера
Код:
$ lxc delete containerName
Получить информацию о работающем в данный момент контейнере
Код:
$ lxc info containerName
Запустить указанную команду в контейнере
Код:
$ lxc exec containerName command1
$ lxc exec containerName command1 opt1
$ lxc exec containerName date
$ lxc exec containerName — command1 -arg1 -arg2
$ lxc exec my-cenots — yum update -y
Создание моментального снимка контейнера только для чтения
Код:
$ lxc snapshot containerName snapShotName
$ lxc snapshot my-cenots snap0
$ lxc info my-cenots
Восстановить состояние контейнера до предыдущего моментального снимка
Код:
$ lxc restore containerName snapShotName
$ lxc restore my-cenots snap0
$ lxc info my-cenots
$ lxc exec my-cenots bash
Я рекомендую вам позволить встроенному DHCP назначить статический IP для LXD контейнера/VM основанного на имени или MAC адресе для упрощения управления, включая взаимодействие, друг с другом. Я предлагаю вам установить стек LAMP следующим образом:
Код:
$ lxc launch images:ubuntu/xenial/amd64 db1
$ lxc launch images:ubuntu/xenial/amd64 nginx1
$ lxc launch images:ubuntu/xenial/amd64 apache-php1
$ lxc launch images:ubuntu/xenial/amd64 memcached

После запуска LXC VM. Войдите в каждый контейнер и настройте службы, то есть установите Apache и PHP на виртуальную машину apache-php1. Используйте Nginx (или любой другой прокси-сервер) или iptables на вашем облачном сервере для перенаправления трафика на порт 80/443 с вашего общего IP-адреса на контейнерную службу.

И вот у вас все получилось. Контейнер LXD/VM запускается для каждой службы, такой как веб-сервер, MySQL, Memcached, Proxy и т. д. Все ваши службы работают на отдельном экземпляре LXD vm. Естественно, это ограничивает количество других сервисов, которые могут быть взломаны, если злоумышленник может успешно использовать программную ошибку в одной сетевой службе.

 

M4357R0

Green Team
24.03.2019
56
65
BIT
0
Сейчас LXD контейнеры отошли на второй план.
Есть докер, образа которого работают вне зависимости от платформы в отличии от LXD.
Преимущество Docker: образа собраны, практически под всё что можно. А чего нету, то читаем статьи о линковщике и собираем сами.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!