Professional Documents
Culture Documents
Керування процесами в ОС Linux. Обмеження ресурсів
Керування процесами в ОС Linux. Обмеження ресурсів
КУРСОВА РОБОТА
з дисципліни: «Кібернетична безпека»
на тему: «Керування процесами в ОС Linux. Обмеження ресурсів»
Виконала:
курсант С-62 групи
сол. Томляк В.В.
Перевірив:
майор Сторчак А.С.
Київ
2018
ЗМІСТ
ВСТУП…………………………………………………………………………..……3
ВИСНОВОК………………………………………………………….………..........40
ВСТУП
2
Docker - це платформа для розробників і системних адміністраторів для
розробки, розгортання і запуску додатків з контейнерами. Використання
контейнерів Linux для розгортання додатків називається контейнеризацией.
Контейнери не нові, але їх використання для легкого розгортання додатків. [14]
3
Портування і легка природа docker дозволяє легко динамічно управляти
вашої навантаженням. Ви можете використовувати docker, щоб розгорнути або
погасити ваш додаток або сервіси. Швидкість docker дозволяє робити це майже
в режимі реального часу. [13]
4
РОЗДІЛ І. ТЕХНОЛОГІЇ КОНТЕЙНЕРИЗАЦІЇ
5
віртуальними машинами, контейнери можуть запускатися майже миттєво. При
виборі між контейнерами та віртуальними машинами слід враховувати цілі, які
потрібно досягти. [2]
Контейнер працює нативної на Linux і розділяє ядро хост - машині з іншими
контейнерами. Він запускає дискретний процес, займаючи не більш пам'яті, ніж
будь-який інший виконуваний файл, що робить його легким.
Рис.1.1
6
Рис.1.2
Переваги контейнерів
Гнучке середовище.
Найбільша перевага у використанні технологій контейнерів полягає в
тому, що їх можна створювати набагато швидше, ніж екземпляри віртуальних
машин. Їх легка вага забезпечує менші накладні витрати з точки зору
продуктивності і розміру. [5]
Підвищена продуктивність.
Контейнери підвищують продуктивність розробників за рахунок
усунення міжмережевих залежностей і конфліктів. Кожен контейнер може
розглядатися як окремий мікросервіс і, отже, може бути незалежно оновлений
без будь-яких проблем з синхронізацією. Управління версіями дозволяє
відстежувати версії контейнера, стежити за відмінностями між ними і т. д.
Переносимість середовища обчислень.
Контейнери інкапсулюють всі відповідні деталі, такі як залежності
додатків і операційні системи, необхідні для запуску програми. Це полегшує
переносимість способу контейнера з одного середовища в іншу. Наприклад,
один і той же образ можна використовувати для роботи в середовищі Windows /
Linux або dev / test / stage.
Стандартизація.
7
Більшість контейнерів засновані на відкритих стандартах і можуть
працювати в усіх основних дистрибутивах Linux, Microsoft і т. Д. Безпека.
Контейнери ізолюють процеси одного контейнера від одного і від базової
інфраструктури. Таким чином, будь-яке оновлення або зміна в одному
контейнері не впливає на інший контейнер. НЕДОЛІКИ контейнерів Підвищена
складність: при n числі контейнерів, які працюють з додатком, також
збільшується коефіцієнт складності. [5]
Управління безліччю контейнерів може бути складним завданням у
виробничому середовищі. Такі інструменти, як Kubernetes і Mesos, можуть
полегшити управління великою кількістю контейнерів. Також складність
полягає в тому, що зазвичай в контейнер «пакується» набагато більше ресурсів,
ніж потрібно, а це призводить до розростання образу і великому розміру
контейнера. Підтримка Native Linux: більшість контейнерних технологій, таких
як Docker, засновані на Linux-контейнерах (LXC). Тому запуск цих контейнерів
в середовищі Microsoft - трохи незграбний процес, а їх щоденне використання
може викликати складності в порівнянні з початковим запуском цих
примірників на Linux.
Незрілість:
8
можемо використовувати такі контейнерні технології, як LXC, OpenVZ, Linux
VServer, BSD Jails і Solaris.
9
майданчик для тестування. Незайвим буде згадати, як він працює. Потім ми
розглянемо особливості функціонування механізму просторів імен в сучасних
Linux-системах. [7]
Chroot (): перша спроба ізоляції
11
Один і той же процес може мати кілька ідентифікаторів PID (окремий
ідентифікатор для окремого простору імен).
Для створення нових просторів імен PID використовується системний
виклик clone () c прапором CLONE_NEWPID. За допомогою цього прапора
можна запускати новий процес у новому просторі назв і в новому дереві.
NET: ізоляція мереж
Завдяки простору імен NET ми можемо виділяти для ізольованих
процесів власні сeтевие інтерфейси. Навіть loopback-інтерфейс для кожного
простору імен буде окремим. [8]
Архітектура
Механізм cgroups складається з двох складових частин: ядра (cgroup
core) і так званих підсистем. В ядрі версії 4.4.0.21 таких підсистем 12:
12
blkio - встановлює ліміти на читання і запис з блокових пристроїв;
cpuacct - генерує звіти про використання ресурсів процесора;
cpu - забезпечує доступ процесів в рамках контрольної групи до CPU;
cpuset - розподіляє завдання в рамках контрольної групи між
процесорними ядрами;
devices - дозволяє або блокує доступ до пристроїв;
freezer - призупиняє і відновлює виконання завдань в рамках контрольної
групи
hugetlb - активує підтримку великих сторінок пам'яті для контрольних
груп;
memory - управляє виділенням пам'яті для груп процесів;
net_cls - позначає мережеві пакети спеціальним тегом, що дозволяє
ідентифікувати пакети, породжувані певної завданням в рамках
контрольної групи;
netprio - використовується для динамічної установки пріоритетів по
трафіку;
pids - використовується для обмеження кількості процесів в рамках
контрольної групи.
Недоліки:
14
екземпляри LXC використовують один екземпляр ядра операційної системи.
Дана система подібна до OpenVZ і Linux-VServer [en] для Linux, а також
FreeBSD jail і Solaris Containers. LXC заснована на технології cgroups, що
входить в ядро Linux, починаючи з версії 2.6.29. [9]
Другі були додані в LXC 1.0 (лютий 2014 року) і вимагають щодо свіже
ядро (3.13 і вище). Позитивна сторона в тому, що ми вважаємо такі контейнери
безпечними для root так що поки ви відстежуєте всі проблеми безпеки ядра,
такі контейнери безпечні. [11]
16
РОЗДІЛ ІІ. ТЕХНОЛОГІЯ КОНТЕЙНЕРИЗАЦІЇ DOCKER
17
Сервер, який представляє собою тип довго поточну програму, званої
процесом-демоном (dockerdкоманда).
REST API, який визначає інтерфейси, які програми можуть
використовувати для спілкування з демоном і вказівки йому, що робити.
Клієнт інтерфейсу командного рядка (CLI) (dockerкоманда).
Рис.2.1
18
поширенню ваших контейнерів Docker. Docker-клієнт і демон можуть
працювати в одній системі або ви можете підключити Docker-клієнт до
віддаленого Docker-демона. Клієнт Docker і демон взаємодіють за допомогою
REST API, через сокети UNIX або мережевий інтерфейс. [14]
Рис.2.2
Docker-демон
Docker daemon (dockerd) прослуховує запити Docker API і управляє
об'єктами Docker, такими як зображення, контейнери, мережі та томи. Демон
також може взаємодіяти з іншими демонами для управління сервісами Docker.
Docker клієнт
Docker client (docker) - це основний спосіб взаємодії багатьох
користувачів Docker з Docker. Коли ви використовуєте такі команди, як docker
runкліент відправляє ці команди, щоб dockerdвиполніть їх. Команда
dockerіспользует Docker API. Клієнт Docker може взаємодіяти з декількома
демонами.
Реєстри докерів
У реєстрі Docker зберігаються зображення Docker. Docker Hub - це
загальнодоступний реєстр, який може використовувати кожен, і Docker за
замовчуванням налаштований на пошук зображень в Docker Hub. Ви навіть
19
можете запустити свій власний особистий реєстр. Якщо ви використовуєте
Docker Datacenter (DDC), він включає в себе Docker Trusted Registry (DTR).
При використанні команд docker pullілі docker runтребуемие образи
витягуються з налаштованого реєстру. Коли ви використовуєте docker
pushкоманду, ваш образ поміщається в ваш налаштований реєстр.
Docker об'єкти
Коли ви використовуєте Docker, ви створюєте і використовуєте
зображення, контейнери, мережі, тому, плагіни і інші об'єкти. Цей розділ
представляє собою короткий огляд деяких з цих об'єктів.
Зображення є тільки для читання шаблон з інструкціями по створенню
контейнера Докер. Найчастіше зображення засноване на іншому зображенні з
деякими додатковими настройками. Наприклад, ви можете створити образ,
який заснований на цьому ubuntu образі, але встановлює веб-сервер Apache і
ваше додаток, а також відомості про конфігурацію, необхідні для запуску
вашого застосування. [14]
Ви можете створювати свої власні зображення або використовувати
тільки ті, які створені іншими і опубліковані в реєстрі. Щоб створити свій
власний образ, ви створюєте Dockerfile з простим синтаксисом для визначення
кроків, необхідних для створення образу і його запуску.
Кожна інструкція в Dockerfile створює шар на зображенні. Коли ви
змінюєте Dockerfile і перебудовуєте зображення, перебудовуються тільки ті
верстви, які були змінені. Це є частиною того, що робить зображення такими
легкими, невеликими і швидкими в порівнянні з іншими технологіями
віртуалізації.
Контейнери
Контейнер - це працюючий екземпляр зображення. Ви можете
створювати, запускати, зупиняти, переміщати або видаляти контейнер за
допомогою Docker API або CLI. Ви можете підключити контейнер до однієї або
декількох мереж, прикріпити до нього сховище або навіть створити нове
зображення на основі його поточного стану.
20
За замовчуванням контейнер відносно добре ізольований від інших
контейнерів і свого хост-комп'ютера. Ви можете контролювати, наскільки
мережу контейнера, сховище або інші базові підсистеми ізольовані від інших
контейнерів або від хост-машини.
Контейнер визначається його чином, а також будь-якими параметрами
конфігурації, які ви надаєте йому при створенні або запуску. При видаленні
контейнера будь-які зміни його стану, які не зберігаються в постійному
сховище, зникають.
Приклад docker run команди
Наступна команда запускає ubuntuконтейнер, інтерактивно
підключається до локального сеансу командного рядка і запускається / bin /
bash. [13]
21
Оскільки контейнер працює в інтерактивному режимі і підключений до
терміналу (за рахунок -iі -t прапорів), ви можете забезпечити введення за
допомогою клавіатури, а вихід реєструється в терміналі. Коли ви вводите
команду exitдля завершення / bin / bashкоманди, контейнер зупиняється, але не
видаляється. Ви можете запустити його знову або видалити. [12]
Сервіси
Послуги, щоб змінити масштаб контейнери з кількох демонам докера,
які всі працюють разом, як зграя з декількома менеджерами і робітниками.
Кожен учасник рою є демоном Docker, і все демони спілкуються за допомогою
API Docker. Служба дозволяє вам визначити бажаний стан, наприклад кількість
реплік служби, які повинні бути доступні в будь-який момент часу. За
замовчуванням сервіс збалансований по всіх робочих вузлів. Для споживача
послуга Docker представляється одним додатком. Docker Engine підтримує
режим рою в Docker 1.12 і вище. [13]
Відомо, що:
можливо створювати образи, в яких знаходяться додатки;
можливо створювати контейнери з образів, для запуску додатків;
можливо поширювати образи через Docker Hub або інший реєстр образів.
22
Ваші розробники пишуть код локально і діляться своєю роботою зі
своїми колегами, використовуючи контейнери Docker.
Вони використовують Docker, щоб впровадити свої додатки в тестову
середу і виконати автоматичні і ручні тести.
Коли розробники знаходять помилки, вони можуть виправити їх в
середовищі розробки і повторно розгорнути їх у тестовому середовищі для
тестування і перевірки.
Коли тестування завершено, отримати виправлення для клієнта так само
просто, як відправити оновлений образ в виробничу середу.
Основна технологія
23
Docker написаний на Go і використовує кілька функцій ядра Linux для
забезпечення його функціональності.
Простори імен
Контрольні групи
Docker Engine в Linux також використовує іншу технологію, звану
контрольними групами (cgroups). Cgroup обмежує додаток певним набором
ресурсів. Групи управління дозволяють Docker Engine обмінюватися
доступними апаратними ресурсами з контейнерами і додатково встановлювати
обмеження і обмеження. Наприклад, ви можете обмежити доступну пам'ять для
конкретного контейнера.
Союз файлових систем
24
Файлові системи Union, або UnionFS, - це файлові системи, які
працюють шляхом створення шарів, що робить їх дуже легкими і швидкими.
Docker Engine використовує UnionFS для надання будівельних блоків для
контейнерів. Docker Engine може використовувати кілька варіантів UnionFS,
включаючи AUFS, btrfs, vfs і DeviceMapper.
Формат контейнера
Docker Engine об'єднує простору імен, групи управління і UnionFS в
оболонку, звану форматом контейнера. Формат контейнера за замовчуванням
libcontainer. В майбутньому Docker може підтримувати інші формати
контейнерів шляхом інтеграції з такими технологіями, як BSD Jails або Solaris
Zones. [14]
25
РОЗДІЛ ІІІ. ПРАКТИЧНЕ ВИКОНАННЯ ЗАВДАННЯ РЕАЛІЗАЦІЇ DOCKER
Постановка завдання :
1. Встановлення Docker.
2. Робота з образами Docker
3. Запуск контейнера Docker
4. Використання команди Docker
26
Рис.3.1
Рис.3.2
27
Рис.3.3
Переконаємося, що ми збираємося встановити Docker зі сховищ Docker,
а не зі сховищ за замовчуванням Ubuntu 16.04:
Рис.3.4
28
Далі встановимо Docker:
apt-get install -y docker-engine
Рис.3.5
Рис.3.6
29
Використання команди Docker
Утиліта дозволяє використовувати різні опції, команди і аргументи.
Загальний вигляд синтаксису виглядає наступним чином:
Рис.3.7
Рис.3.8
31
Контейнер hello-world, який ми запускали раніше, є прикладом
контейнера, який запускається і завершує роботу після виведення тестового
повідомлення. Контейнери можуть виконувати і більш корисні дії, а також вони
можуть бути інтерактивними. Зрештою, вони дуже схожі на віртуальні машини,
тільки менш вимогливі до ресурсів.
Як приклад запустимо контейнер, який використовує останню версію
образу Ubuntu. Комбінація ключів -i і -t дозволяє здійснювати інтерактивний
доступ до контейнера:
Рис.3.9
32
Рис.3.10
33
exit
Далі зробимо Комміт змін в новий образ Docker з використанням
наступної команди. Ключ -m дозволяє задати повідомлення коммітов для того,
щоб полегшити вам та іншим користувачам способу розуміння того, які зміни
були внесені. Ключ -a дає змогу вказати автора коммітов. Ідентифікатор
контейнера - цей той самий ідентифікатор, який ми бачили трохи раніше, коли
починали інтерактивну сесію в контейнері. [16]
Якщо ви не створювали додаткових репозиторіїв в Docker Hub, ім'я
сховища зазвичай є вашим ім'ям користувача в Docker Hub:
Рис.3.11
Рис.3.12
34
Наступного разу, коли вам буде потрібно запустити контейнер з Ubuntu з
передвстановленим NodeJS, ви можете використовувати цей новий образ.
Образи можуть будуватися і за допомогою так званого файлу Docker
(Dockerfile). Але це більш складний процес і ми не будемо описувати його в цій
статті. [14]
35
Рис.3.13
Docker run --name web --hostname web -m 2g -p 80:80 -P -i -t ubuntu / bin / bash
36
-Name дати контейнеру описову назву
-P без цього перемикача веб-сайт докера буде доступний тільки з хоста докера,
а не з зовнішніх комп'ютерів
Рис.3.14
37
Рис.3.15
Оновити контейнер:
apt-get update –y
Рис.3.16
38
Підключаємося і перевіряємо:
Рис.3.17
Рис.3.18
39
ВИСНОВОК
40
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
1. https://dzone.com/articles/container-technologies-overview
2. https://www.cloud4y.ru/about/news/obzor-tekhnologii-konteynerizatsii/
3. https://habr.com/company/selectel/blog/279281/
4. https://lwn.net/Articles/531114/
5. http://man7.org/linux/man-pages/man7/namespaces.7.html
6. http://www.haifux.org/lectures/299/netLec7.pdf
7. https://habr.com/company/selectel/blog/303190/
8. https://www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt —
документація першої версії cgroups;
9. https://ru.wikipedia.org/wiki/LXC
10.https://linuxcontainers.org/lxc/downloads/
11.https://linuxcontainers.org/ru/lxc/security/
12.https://habr.com/post/253877/
13.https://vps.ua/blog/how-to-install-software-with-docker/
14.https://docs.docker.com/get-started/#docker-concepts
15.https://linuxcontainers.org/
16.https://docs.docker.com/g
41