Модуль I · IT Skills (Cloud Services & Cyber Security) · 120 хвилин
Сьогодні ти отримуєш власний акаунт на справжньому сервері. Логін і пароль видає вчитель. До кінця уроку ти зайдеш на цю машину зі свого комп’ютера й попрацюєш на ній руками.
ssh і на якій машині виконуються команди після неї?/home/ivan/notes відрізняється від C:\Users\Ivan\notes?91.219.61.4 зі свого Windows;www, upload,
data, notes;Слова «сервер», «SSH», «термінал», «uid» поки нічого не означають. Розберемо їх по черзі, кожне у своєму кроці.
Один перед тобою, другий за тисячу кілометрів
Перед тобою стоїть ноутбук. У ньому є процесор, оперативна пам’ять, диск і мережева карта. Він уміє запускати програми, зберігати файли й ходити в інтернет.
За тисячу кілометрів у дата-центрі стоїть інша машина. У ній теж є процесор, оперативна пам’ять, диск і мережева карта. Вона теж запускає програми, зберігає файли й ходить в інтернет. Відмінність в іншому: у неї може не бути ні монітора, ні клавіатури, і це нормально.
Монітор і клавіатура потрібні людині, а не комп’ютеру. Якщо машиною керують по мережі, екран на ній нікому не потрібен: усе одно ніхто на нього не дивиться. Такий комп’ютер називають сервером.
Браузер нічого не вигадує сам — він усе просить
Ти відкриваєш сторінку в браузері. Щоб її показати, браузеру потрібен код HTML, файл зі стилями CSS, файл зі скриптами JS і картинки. Сам він цього не має. Він мусить у когось попросити — і просить у сервера.
Так виглядає кожне відкриття сторінки. Браузер надсилає запит, сервер надсилає відповідь. Одна сторінка — це десятки таких пар, і всі вони проходять за частки секунди.
Спільне в усіх п’яти випадках одне: є багато пристроїв, яким потрібні одні й ті самі дані. Тримати ці дані в одному місці, доступному з мережі, простіше, ніж копіювати їх усім.
Ти скинув однокласнику посилання на свою сторінку. Він відкрив її на своєму телефоні й бачить ті самі картинки та стилі, що й ти. Звідки вони взялися в його телефоні?
Питання правильне, і відповідь на нього не про потужність
Технічно ноутбук може віддавати сторінки в мережу. Програми для цього безкоштовні, процесора вистачить. Проблеми починаються далі.
Звідси й беруться вимоги до сервера. Він працює цілодобово, стоїть у дата-центрі з резервним живленням і надійним каналом, має постійну адресу і керується через мережу, а не з-за столу.
Однокласник каже: «Навіщо нам сервер? Мій ноутбук потужніший за нього». Що відповісти?
Шість відмінностей, і жодна з них не про швидкість
| Ознака | Персональний комп’ютер | Сервер |
|---|---|---|
| Час роботи | вмикається, коли треба, і вимикається ввечері | працює цілодобово, вимкнення планують заздалегідь |
| Монітор і клавіатура | є, без них працювати неможливо | найчастіше немає взагалі |
| Адреса в мережі | тимчасова, змінюється сама | постійна публічна адреса |
| Хто на ньому працює | одна людина, зрідка кілька | десятки людей і програм одночасно |
| Як ним керують | мишею й вікнами, сидячи перед ним | командами через мережу, з іншого міста |
| Кого зачіпає збій | тільки тебе | усіх, хто цією машиною користується |
Подивись на таблицю ще раз. Жоден рядок не каже «сервер швидший». Усередині сервера може стояти таке саме залізо, як у твоєму ноутбуці, а іноді й слабше.
Дві операційні системи, які вміють те саме
Операційна система — це програма, яка керує комп’ютером: вирішує, яка програма зараз працює, скільки їй дати пам’яті, куди на диск покласти файл і як відправити дані в мережу. Windows і Linux — дві такі системи.
Обидві вміють однакове:
На серверах частіше стоїть Linux. Причини прості: він безкоштовний і встановлюється на скільки завгодно машин, він добре працює без графічного інтерфейсу, і ним зручно керувати текстовими командами по мережі. Саме тому сьогодні ти працюватимеш у терміналі — у вікні, куди набирають команди й читають відповідь.
Найпомітніша відмінність — те, як записують шлях до файла
Той самий файл hello.txt у теці «Документи» користувача Івана
записується так:
| Система | Шлях до файла |
|---|---|
| Windows | C:\Users\Ivan\Documents\hello.txt |
| Linux | /home/ivan/Documents/hello.txt |
Відмінностей тут три. По-перше, у Windows шлях починається з літери диска:
C:, D:, E:. У Linux літер дисків немає
взагалі. Усе дерево росте з одного кореня, який позначають однією скісною
рискою /. Другий диск, флешка чи мережевий диск теж з’являються
десь усередині цього дерева, а не поруч із ним.
По-друге, роздільник у Windows — зворотна скісна риска \,
а в Linux — пряма /. По-третє, тека з файлами користувачів
називається Users у Windows і home у Linux.
Тека, у якій живуть твої файли, називається домашньою. У Linux вона лежить
усередині /home і має назву твого логіна. Для неї є коротке
позначення — символ ~, який називають «тильда». Він завжди
означає «моя домашня тека».
| Коротко | Повністю |
|---|---|
~ | /home/ivan |
~/notes | /home/ivan/notes |
~/www/index.html | /home/ivan/www/index.html |
У кожного користувача ~ означає свою теку. Коли ти пишеш
~/notes, система підставляє твій логін, а коли те саме пише
однокласник — його логін.
Ти й однокласник виконали на сервері однакову команду
ls ~/notes і побачили різні файли. Чому одна й та сама
команда показала різне?
Найчастіша помилка тих, хто прийшов із Windows
У Linux великі й малі літери в іменах файлів — різні символи. Три імені нижче належать трьом різним файлам, які спокійно лежать в одній теці:
У Windows так не буває: там Photo.png і photo.png —
одне й те саме ім’я, і другий файл із таким іменем створити не вийде.
Ти зробив сторінку на своєму комп’ютері. У коді написано:
Файл у тебе називається logo.png, з малої літери. На Windows
сторінка відкривається ідеально: система не бачить різниці між іменами.
Ти заливаєш усе на сервер — і картинка зникає. Браузер попросив
Logo.png, сервер такого файла не знайшов і відповів 404.
www усі імена файлів пишемо малими латинськими літерами,
без пробілів і без кирилиці. Замість пробілу ставимо дефіс. Тоді розбіжність
між твоєю машиною і сервером просто не виникає.На ноутбуці сайт виглядає правильно. Після заливання на сервер сторінка
відкривається, але без стилів і без картинок. У консолі браузера видно
404 на Style.css і Logo.PNG. Що сталося?
Secure Shell — захищена оболонка
У сервера немає ні монітора, ні клавіатури. Щоб ним керувати, потрібен спосіб набирати команди на своєму комп’ютері, а виконувати їх на чужому. Такий спосіб називають SSH, від англійського Secure Shell.
SSH відкриває командний рядок віддаленої машини у вікні на твоєму комп’ютері. Слово «secure» означає, що все, що йде каналом, шифрується: ані команди, ані пароль по дорозі прочитати не вийде.
Одне вікно, а машини за ним дві
Поки з’єднання не встановлене, термінал працює з твоїм комп’ютером.
У PowerShell команда dir показує твої власні теки. Знак
$ на початку рядка — це запрошення до введення: набирати його
не треба, набирають те, що після нього.
Тепер ти виконуєш ssh і потрапляєш на сервер. Те саме вікно,
та сама клавіатура — але команда ls показує вже вміст
іншої машини:
Тек Desktop і Downloads тут немає, бо це не твій
комп’ютер. Це твоя тека на сервері, і в ній лежить рівно те, що ти туди
поклав.
Ти підключився по SSH, виконав ls і не побачив теки
Downloads, хоча на ноутбуці вона точно є. Що сталося?
Адреса, логін, одна команда
Наш сервер має адресу 91.219.61.4. Логін виглядає як
прізвище.і.клас, наприклад koval.d.10b. Свій логін
і стартовий пароль ти отримуєш від учителя.
Відкрий Windows Terminal або PowerShell. Обидві програми вже є в Windows, установлювати нічого не треба. Набери команду, підставивши свій логін:
Коли ти підключаєшся до сервера вперше, програма показує довгий рядок, який називають відбитком хоста, і питає, чи ти впевнений:
Цей рядок — підпис саме нашої машини. Учитель показує його на дошці.
Звір символи з тим, що бачиш у себе, і лише тоді відповідай yes.
Так ти переконуєшся, що підключився до нашого сервера, а не до чужої машини,
яка видає себе за нього. Питання ставиться один раз: далі програма звіряє
відбиток сама.
Перший рядок, який ти побачиш, і перша команда, яку виконаєш
Після правильного пароля з’являється запрошення до введення команд. Виглядає воно так:
Читається воно зліва направо: koval.d.10b — логін, від імені
якого ти працюєш; studyua — ім’я машини; ~ — тека,
у якій ти зараз перебуваєш; $ — те саме запрошення до введення,
що й на твоїй машині. Далі на цій сторінці ми пишемо тільки $,
щоб рядки прикладів були коротшими.
Перша команда, яку варто виконати на будь-якій незнайомій машині:
whoami перекладається як «хто я». Питання тут не про людину:
система не знає ні твого прізвища, ні класу. Вона відповідає, від імені
якого користувача системи виконуються твої команди. Це і є твій логін.
Тому що на цій машині працюєш не тільки ти
На 91.219.61.4 заведено акаунти трьох груп: 10A, 10B і 10C.
Разом 63 учні та вчитель. У кожного своя тека всередині /home,
і називається вона так само, як логін.
Тепер порахуй, що ці 64 людини ділять між собою. Процесор один. Оперативна пам’ять одна. Диск один. Мережа одна. Операційна система одна.
Спільним лишається все, крім файлів. Файли мають лишатися розділеними: твоя робота — твоя, чужа — чужа. Щоб система могла це забезпечити, вона має на кожну команду знати, хто саме її виконує. Саме тому вхід починається з логіна й пароля, а не відкривається всім підряд.
Ти і сусід за партою одночасно набрали ls у своїх вікнах,
і кожен побачив власні файли, а не чужі. Як машина їх розрізнила?
Одне порівняння, яке пояснює всю решту уроку
Сервер влаштований як багатоквартирний будинок. У будинку спільні стіни, дах, під’їзд, ліфт і труби. Так само на сервері спільні процесор, пам’ять, диск і мережа.
Домашня тека — це квартира. У своїй квартирі ти робиш що хочеш: переставляєш меблі, запрошуєш гостей, лишаєш речі на видноті. У чужу квартиру без дозволу господаря не заходиш, хоч і живеш із ним в одному будинку.
Те, що будинок спільний, не дає права заходити в усі квартири. Те, що сервер спільний, не дає права читати чужі файли. Двері квартир зачинені не тому, що сусіди погані, а тому, що інакше будинок не працює як житло.
Далі на цьому уроці ми подивимося, як саме система тримає ці двері зачиненими.
Створи файл — і побачиш у списку своє ім’я
Команда touch створює порожній файл. Створи його у себе:
Тепер подивись на нього докладно. Літера l у команді
ls -l означає «довгий список»: замість самих імен виводиться
повний рядок про кожен файл.
У цьому рядку багато всього, і сьогодні нас цікавить одне: третє поле,
koval.d.10b. Це ім’я власника файла. Ти створив файл — отже,
власник ти.
-rw-r--r-- на початку рядка теж мають зміст, і ми розберемо
їх на наступному уроці. Сьогодні достатньо знаходити в рядку ім’я власника
й розуміти, що воно там не випадкове.Про кожен файл система зберігає кілька фактів одразу: хто власник, до якої групи файл належить, кому дозволено його читати, кому — змінювати, кому — запускати. Ці факти зберігаються не в самому файлі, а поруч із ним, і система звіряється з ними щоразу, коли хтось до файла звертається.
Спробуй — і побачиш відповідь системи
Команда cat показує вміст файла на екрані. Спробуй показати
чужий файл:
Permission denied перекладається як «доступ заборонено».
Ось що сталося всередині машини. Система прийняла команду, подивилася,
від імені якого користувача вона прийшла, знайшла власника файла, порівняла
одне з одним і відмовила.
Permission denied не означає, що щось зламалося, що файл
пошкоджений або що сервер підвис. Це нормальна робота системи: вона зробила
саме те, для чого призначена. Такий самий напис отримає будь-хто, хто спробує
прочитати твої файли.Ти виконав cat на файл однокласника й отримав
Permission denied. Що це означає?
Уяви той самий сервер, але без них
Прибери розділення користувачів — і на нашій машині стане можливим ось таке:
У школі це неприємно. У реальному світі на сервері живуть не тільки сайти учнів. Там лежить база даних із чужими персональними даними, там зберігаються бекапи, там працює система моніторингу, яка стежить за станом машини.
Кожній із цих частин потрібен свій рівень доступу. Програмі, яка малює сторінки, треба читати теку сайту — і більше нічого. Системі бекапів треба читати все, але нічого не змінювати. Розробнику треба міняти код, але не чіпати чужі дані. Розділення користувачів — це саме той механізм, яким усе це задається.
Людині зручне ім’я, системі — число
Команда whoami показує ім’я:
Команда id показує те саме, але з числами:
UID — це User ID, числовий ідентифікатор користувача. У тебе він
1042. GID — це Group ID, числовий ідентифікатор групи.
У тебе він 1002, і група називається 10b. Група —
це просто список користувачів, яким щось дозволяють разом. Ти належиш до двох
груп одразу: 10b — твій клас, students — усі учні
модуля.
Ім’я koval.d.10b існує для людей: цифри незручно запам’ятовувати
й читати. Сама система працює з числами. Коли вона перевіряє, чи можна тобі
відкрити файл, вона порівнює числа, а не рядки з іменами.
Тому імена в системі унікальні й тому UID видається один раз. Два різні логіни з однаковим UID були б для системи однією людиною, хоч на екрані й виглядали б по-різному.
ls -l стоять значки rwx, а міняє
їх команда chmod. Що означає кожен значок, як читати такі рядки
цілком і як самому виставляти доступ — розберемо на наступному уроці.Учитель видалив старий акаунт, а новому користувачеві з іншим логіном
випадково видав той самий uid=1042. Що буде зі старими
файлами, які лишилися на диску?
Три дії, три категорії, десять символів у кожному рядку ls -l
Права видно прямо в списку файлів. Сьогодні вчишся їх читати:
chmod буде на уроці 2.
Три теки закриті, четверта відкрита на читання всім. Подивимося, що лежить у відкритій.
ls -l ~ — команда показує права й власника. Маєш
побачити чотири рядки. Порожньо — теки ще не створені, зроби крок 8.www і data:
r-x проти ---. Саме вона вирішує, чи побачить
сторінку світ.ls -l ~/www: у index.html права
-rw-r--r--, а перший символ - означає файл.Цифри складаються: rwx = 4+2+1 = 7, r-x = 5,
rw- = 6. Звідси 755 і 644.
| Біт | Для файлу | Для теки |
|---|---|---|
| r | прочитати вміст (cat, nano) | побачити список імен (ls) |
| w | змінити або стерти вміст | створювати й видаляти файли всередині |
| x | запустити як програму | зайти всередину (cd) і відкрити файл за іменем |
w не на файлі, а на теці, де він лежить.r, w, x у пісочниці
нижче: внизу міняються вісімкове число і рядок ls -l.644, а теці 755 — підказка внизу
має позеленіти.| Хто звертається | r | w | x |
|---|
Дві команди й два ключі, з яких починається будь-яка робота в терміналі
У терміналі немає вікна з деревом тек, тому першою справою з’ясовують,
де ти зараз. Це робить pwd — скорочення від print working
directory, «покажи робочу теку»:
Це і є твоя домашня тека, та сама, яку коротко пишуть як ~.
Тепер подивись, що в ній лежить. Команда ls виводить самі імена:
З ключем -l кожен запис виводиться окремим рядком і з подробицями:
Ключ -a додає приховані файли — у Linux прихованими вважаються
всі імена, що починаються з крапки. Ключі можна писати разом:
Два перші рядки є завжди: одна крапка — це тека, у якій ти стоїш, дві крапки — тека на рівень вище. Решта прихованих файлів тут — налаштування твоєї оболонки. Їх не чіпаємо.
Чотири теки, з якими ми працюватимемо весь рік
Команда mkdir створює теку. Ключ -p дозволяє
перелічити кілька тек одразу й не лається, якщо якась із них уже існує:
Перевір результат. Знак ~ у кінці команди означає «покажи мою
домашню теку», навіть якщо зараз ти стоїш деінде:
Літера d на початку рядка означає directory, тобто теку.
У колонці власника скрізь стоїть твій логін: ці теки створив ти.
| Тека | Для чого вона |
|---|---|
www | усе, що має бачити інтернет: сторінки, стилі, скрипти, картинки сайту |
upload | місце, куди файли приїжджають із твого комп’ютера; звідси ти розкладаєш їх далі |
data | таблиці, вивантаження, робочі дані — те, що потрібне тобі, але не стороннім |
notes | твої нотатки, конспекти й відповіді на завдання |
Порядок саме такий на весь модуль. Автоперевірка шукатиме ці чотири імені, тому пиши їх точно так, малими літерами.
Ти створив теки командою mkdir -p ~/WWW ~/Upload ~/data ~/notes.
У ls усі чотири видно, але автоперевірка каже, що тек
www і upload немає. Що не так?
Обидва файли на сервері, а видно з інтернету лише один
Уяви два файли. Перший — ~/notes/password.txt, твій особистий
запис. Другий — ~/www/index.html, головна сторінка твого сайту.
Обидва лежать на тому самому сервері, в тій самій домашній теці, на тому
самому диску.
Але побачити з інтернету можна тільки другий. Причина проста: програма,
яка віддає сторінки в мережу, дивиться лише в теку www.
Решту тек їй просто не показали. Вона не знає, що вони існують.
| Файл | Хто його бачить |
|---|---|
~/www/index.html | будь-хто в інтернеті, кому ти даси адресу |
~/notes/password.txt | тільки ти, коли зайдеш по SSH |
~/data/table.csv | тільки ти, коли зайдеш по SSH |
~/upload/photo.jpg | тільки ти, коли зайдеш по SSH |
Твоя сторінка після заливання буде доступна за адресою
https://studyua.91.219.61.4.nip.io/s/koval.d.10b/, де замість
koval.d.10b стоятиме твій логін.
www, стає публічним тієї ж секунди. Ніяких
«ще не готове» для інтернету не існує. Чернетки, особисті записи, чужі фото,
скріншоти з іменами — у www їм не місце.Адреса одна, входів два, і призначення в них різне
У сервера одна адреса — 91.219.61.4. Але програм, які на ньому
чекають на запити, кілька. Щоб вони не заважали одна одній, кожна слухає свій
порт — номер входу за спільною адресою.
Порт 22 — це SSH, двері для керування. Через них заходиш тільки ти,
за логіном і паролем, і бачиш усю свою теку цілком. Порт 443 — це
HTTPS, двері для відвідувачів сайту. Через них заходить будь-хто без пароля,
але отримує лише вміст теки www.
Номери портів не випадкові: їх веде міжнародний реєстр, тому будь-яка
програма у світі знає, що SSH — це 22, а HTTPS — це 443. Саме тому в команді
ssh номер порту не пишуть: він і так відомий.
Твій сайт відкривається в браузері без жодного пароля. Означає це, що й у термінал сервера може зайти будь-хто?
Той самий SSH, тільки замість команд — файли
Сторінки ти пишеш у себе на комп’ютері, у звичайному редакторі. Потім їх треба перенести на сервер. Для цього є SFTP — спосіб возити файли, який працює всередині того самого з’єднання SSH.
Це зручно з двох причин. Логін і пароль ті самі, що для термінала, нічого окремо заводити не треба. Трафік шифрується так само, як у SSH: файли й пароль по дорозі не прочитають.
Програму бери будь-яку з двох: WinSCP або FileZilla. Обидві безкоштовні й показують два вікна поруч: ліворуч твій комп’ютер, праворуч сервер. Файли перетягуються мишею.
| Поле в програмі | Що вписати |
|---|---|
| Протокол | SFTP |
| Хост | 91.219.61.4 |
| Порт | 22 |
| Ім’я користувача | твій логін, наприклад koval.d.10b |
| Пароль | той самий, що для SSH |
| Віддалена тека | /home/<твій логін>/upload |
Пароль у програмі не зберігай, якщо працюєш на шкільній машині: за нею сідає наступний клас. Коли клієнт пропонує запам’ятати пароль — відмовляйся.
.html .css .js .json .csv .md .txt .svg і невеликі зображення.
Так сервер лишається швидким для всіх 63 учнів одразу.Ти налаштував WinSCP на шкільному комп’ютері, і програма пропонує запам’ятати пароль, щоб не вводити його щоразу. Що обрати?
Виконуй по черзі. Галочки зберігаються — сторінку можна закрити.
whoami), чи точно збігається ім’я теки
з тим, що написано в завданні. Якщо це не допомогло — клич учителя, а не
набирай команду вдесяте.Шість питань. Обери один варіант — і побачиш правильну відповідь.
1. Що таке сервер?
2. Що робить команда ssh?
3. Скільки різних файлів у теці Linux, де лежать photo.png,
Photo.png і PHOTO.png?
4. Що показує команда whoami на сервері?
5. Ти виконав cat на чужий файл і отримав
Permission denied. Що це означає?
6. Яка з чотирьох тек віддається в інтернет?
Варіантів тут немає. Відповідай реченнями, а не одним словом.
ssh. На якій машині
вона виконується і де лежать файли, про які в ній ідеться?Permission denied — це не поломка.www. Чому це помилка
і як її виправити?answers.txt, напиши в ньому
п’ять абзаців і залий по SFTP у теку notes. Автоперевірка
дивиться саме на ~/notes/answers.txt.Вісім речень, з яких складається весь урок
/,
а ~ означає твою домашню теку.Logo.png
і logo.png — різні файли.Весь урок на одному малюнку
Ліворуч твій комп’ютер із двома програмами: браузером і терміналом. Праворуч сервер із двома програмами, які на них відповідають. Посередині інтернет і два номери портів.
Унизу праворуч — /home з домашніми теками всіх 63 учнів
і вчителя. Твоя тека там одна з багатьох, і в ній публічна лише
www: саме її і тільки її вебсервер віддає в інтернет.
Система зайде у твій акаунт від твого імені й подивиться, що ти справді зробив. Спроби не обмежені.
Демонстраційний режим: результат згенеровано для показу. На сервері
ця кнопка викликає POST /api/check, який запускає
/opt/lessons/1/check.sh від імені учня.
ls -l і називаєш у ньому власника файла;Це те, що бачить учитель, коли виставляє оцінку.
| Складник | Вага | Результат |
|---|
answers.txt і залий його по SFTP у теку
notes.www.ls -l — значки
rwx. Побачимо, як система записує окремо доступ для власника,
для групи й для всіх інших, і навчимося міняти цей доступ командою
chmod.Усе, що можна перевірити, — з відкритих стандартів і документації. Перевіряти дозволено й корисно.
whoami, id, who — сторінки довідника man.
whoami(1),
id(1),
who(1)pwd, ls, mkdir, touch — довідка GNU coreutils.
gnu.org · coreutils manual/home — Filesystem Hierarchy Standard 3.0.
refspecs.linuxfoundation.org · FHS 3.0192.0.2.0/24 і 203.0.113.0/24.
RFC 5737Приклади виводу команд на цій сторінці складені як типові для навчального сервера: логіни, числа й дати на твоєму акаунті будуть свої. Саме тому команди варто виконати, а не переписати з екрана.