ls -l: чий файл і кому що можна;rwxr-xr-x у 755 і перевіряти права командою find.| Етап | Хв | Що робимо |
|---|---|---|
| Вхід | 5 | Сабдомен з уроку 1 |
| Статичний сайт | 10 | DNS → nginx → ~/www/ |
| Промпт | 10 | П’ять частин промпту |
| Практика: генерація | 20 | Три розділи через POST /api/llm |
| Практика: верстка | 25 | Чотири HTML, book.json, FTP |
| Права: u/g/o × rwx | 15 | Сітка 3×3, вісімковий запис |
| Атака сусіда | 10 | Учитель пише у теку 777 |
| Практика: аудит прав | 15 | find, chmod, ~/.ssh |
| Автоперевірка | 5 | Чотири 🔒-критерії |
| Підсумок | 5 | 755 на теки, 644 на файли |
| Разом | 120 |
~/www/book/: index.html, розділи ch1.html—ch3.html
по ≥250 слів, book.json, NOTES.md, img-credits.md
з описами ≥3 ілюстрацій та alt-текстами. Картинки лишаються на твоєму комп’ютері. Права: теки 755, файли 644,
~/.ssh 700.no_ww, dir_perms, file_perms, ssh_perms.
Поки хоч один червоний, роботу не приймуть.Однокласник набирає http://91.219.61.4/s/koval.d.10b/book/. DNS дає IP-адресу
вашого VPS, на порті 443 відповідає nginx. Корінь твого сабдомена —
/home/koval.d.10b/www, тому nginx шукає файл
/home/koval.d.10b/www/book/index.html.
Головне. nginx працює від користувача www-data: не власник твоїх
файлів і не в твоїй групі. Для твоєї теки він — «інші», остання трійка в рядку
ls -l.
404 — файл не там (у ~/ замість ~/www/) або назва
в іншому регістрі: Ch1.html і ch1.html — різні файли.
403 — права.Ти залив по FTP index.html, права 644, назва правильна.
Але /book/ дає 404: файл лежить за шляхом
/home/koval.d.10b/book/index.html. Що сталося?
Модель — не автор. Автор — ти; модель пише чернетку за твоїм ТЗ
Текст генерує локальна модель на сервері вчителя: запит
POST /api/llm, відповідь — JSON із текстом.
1. Напиши промпт із п’яти частин — це технічне завдання для моделі.
| Частина | На що впливає | Приклад |
|---|---|---|
| Роль | лексика, глибина, тон | «Ти — науковий журналіст, який пише про астрономію» |
| Аудиторія | складність, довжина речень | «для десятикласників без фізики поглибленого рівня» |
| Структура | форма відповіді | «розділ із 4 абзаців: гачок, суть, приклад, висновок» |
| Обмеження | що заборонено | «без вигаданих цитат і дат; якщо не впевнений — пиши „невідомо“» |
| Формат | що прийме твій код | «чистий текст без Markdown, 260—320 слів» |
2. Збережи промпт у файл prompt-ch1.json — потім
скопіюєш його в book.json дослівно.
3. Надішли файл моделі й запиши відповідь у ch1.json.
Друга команда покаже початок розділу. Файл порожній — перевір адресу.
4. У Windows набирай curl.exe: псевдонім
curl не розуміє --data, а просте >
запише UTF-16.
5. Повтори кроки 2—4 для ch2 і ch3.
6. Зверстай у теці ~/www/book/ зміст
index.html і три розділи по ≥250 слів. Посилання пиши відносні
(ch1.html): повний шлях дасть 404.
book.json згадає за тебе.7. Заповни book.json за зразком і збережи в кодуванні
UTF-8 without BOM: інакше jq впаде на першому символі.
NOTES.md: що зробила людина, що зробила модель8. Запиши по рядку на кожну правку: що було, що стало, чому.
book.json.Модель видала розділ, у якому є точна дата, прізвище дослідника і назва журналу. Текст читається бездоганно, у пошуку такої статті немає. Що правильно зробити перед публікацією?
img-credits.md: ілюстрації, яких на сервері немає9. Опиши кожну ілюстрацію окремим записом: alt
замінює картинку словами.
Ти написав у img-credits.md: alt: "ілюстрація до розділу 1".
Формально поле заповнене, критерій alt_desc просить непорожній
текст. Чому це все одно погана відповідь?
Уся система прав Linux — це таблиця 3×3. Більше там нічого немає
У кожного файлу записані власник і група. Ядро перевіряє три категорії зверху вниз і зупиняється на першому збігу: ти власник — діють тільки права власника.
| Категорія | Кого позначає | Хто це на нашому сервері |
|---|---|---|
| u — власник user, owner |
той, чий логін записаний у файлі | ти сам: файл створив твій акаунт |
| g — група group |
усі, хто входить у групу файлу | твій клас: група 10b, у ній 22 людини |
| o — інші others |
усі решта акаунтів системи | 41 учень з 10A і 10C, учитель і сам nginx (www-data) |
ls -l1. Подивись права файлів у теці книги, а потім права самої теки.
У першому стовпчику десять символів: тип об’єкта і три трійки прав.
Побачив No such file or directory — теки ще немає, створи її.
2. Не забувай ключ -d: без нього прав самої теки
не видно, а саме там ховається причина 403.
r = 4, w = 2, x = 1;
трійка — сума ваг увімкнених бітів.Команда ls -ld ~/www показала drwxr-x--- 5 koval.d.10b 10b.
Файли всередині мають 644 і лежать правильно, у браузері —
403 Forbidden. Чому сайт не працює?
Три біти дають вісім комбінацій — рівно стільки, скільки цифр від 0 до 7
1. Згортай трійку в цифру: склади ваги увімкнених бітів
r = 4, w = 2, x = 1. Тоді
rwx = 7, r-x = 5, rw- = 6.
x право на запис
нічого не дає.2. Вивчи ці чотири режими: інших сьогодні не знадобиться.
| Режим | Літерами | Кому що дозволено | Де застосовується |
|---|---|---|---|
| 755 | rwxr-xr-x | власник — усе; група й інші — зайти й переглянути | усі теки в ~/www |
| 644 | rw-r--r-- | власник — читати й змінювати; решта — тільки читати | усі файли сайту: HTML, JSON, MD |
| 700 | rwx------ | власник — усе; решта — нічого, навіть імен не бачить | ~/.ssh, приватні теки поза сайтом |
| 600 | rw------- | власник — читати й змінювати; решта — нічого | приватний ключ, ~/.env (тема 2) |
3. Перевір себе в калькуляторі: клацни букви або впиши число. Внизу з’явиться готова команда.
Обидва записи означають одне й те саме.
koval.d.10b
10b
www-data
Ти хотів «закрити зайве» і виконав chmod 644 ~/www/book.
Сайт перестав відкриватися, хоча всі сім файлів на місці й у них
правильні 644. Що саме зламалося?
x на теці — це двері, а не запускНайчастіше непорозуміння всього уроку. Розберемо його окремо
На файлі x означає «виконати». На теці ті самі три букви
означають інше — звіряй за таблицею.
| Біт | На файлі | На теці |
|---|---|---|
| r | прочитати вміст файлу | побачити список імен усередині (ls) — і більше нічого |
| w | змінити вміст файлу | створювати, перейменовувати й видаляти записи в теці — незалежно від прав самих файлів |
| x | виконати як програму | увійти всередину: зробити cd, і взагалі використати
цю теку як частину будь-якого шляху |
r читає таблицю «ім’я → номер файлу»,
x веде по ній до самого файлу.1. Постав своїй теці 644 і подивись, що станеться.
Остання команда блоку повертає 755 назад.
2. Порівняй виводи: ls дасть імена, а ls -l
— питальні знаки й Permission denied, бо без x
система не бачить ні розміру, ні дати. cd теж не спрацює.
3. Побачив питальні знаки замість прав — перевіряй права теки, а не файлу.
/tmp має 1777
Режим drwxrwxrwt: буква t дозволяє видалити файл
лише власнику, хоч писати в теку можуть усі. У твоїх теках t
не потрібен.Тека однокласниці /home/marta/notes має права drwx--x--x. Ти знаєш точну назву
файлу всередині — secret.txt, і сам файл має 644.
Що станеться при cat /home/marta/notes/secret.txt?
chmod, chown, chgrp, umaskЧотири інструменти, з яких тобі щодня знадобляться два
chmod числом: коротко й безжально1. Постав права числом і перевір результат: число задає всі дев’ять бітів одразу.
Має вийти 755 і 644. Інші числа — ти вказав
не той об’єкт.
chmod буквами: точково й безпечно2. Щоб змінити один біт, пиши буквами: кому (u g o a),
що зробити (+ - =), що саме (r w x). Решта прав
не зміниться.
| Команда | Що робить | Числовий аналог |
|---|---|---|
| chmod o-w file | забирає запис в «інших», решту не чіпає | залежить від поточних |
| chmod go-w -R ~/www | знімає запис у групи й інших з усього дерева — рятує після 777 | — |
| chmod a+r file | дозволяє читати всім трьом категоріям | — |
| chmod u=rw,go=r file | ставить рівно rw-r--r-- | 644 |
| chmod u=rwx,go=rx dir | ставить рівно rwxr-xr-x | 755 |
| chmod o= dir | «іншим — нічого»: третя трійка обнуляється | 750 з 755 |
3. Лагодь дерево двома командами find: теки й файли
окремо. Одне число на все (chmod -R 644 ~/www) зніме з тек
x, і сайт ляже.
Обидва wc -l дадуть 0. Інше число — прибери
| wc -l і побачиш винні файли.
4. Той самий результат однією командою: велика X дає
x тільки текам.
chown і chgrp: чому вони тобі не знадобляться5. Не витрачай час на chown: власника міняє тільки root.
Відповідь — Operation not permitted. Інакше сусідові можна
було б підкинути файл і з’їсти його квоту.
6. chgrp не чіпай: нові файли й так виходять із групою
10b.
umask: звідки беруться права нового файлу7. Перевір маску: вона пояснює, звідки беруться 644
і 755.
Має вийти 0022: із заготовки 666 і 777
маска прибирає w у групи й інших. Файл, залитий по FTP, маску
не питає — права виставляй після заливання.
Учень виконав chmod -R 644 ~/www, щоб «закрити все зайве».
Тепер навіть він сам не може зайти в ~/www, а сайт віддає
403. Яка команда виправить це найшвидше й без ризику?
Ти хочеш, щоб однокласниця Марта могла дописати розділ у твою книгу,
і виконуєш chown marta ~/www/book/ch3.html. Система відповідає
Operation not permitted. Чому так задумано?
Що інший акаунт зробить з твоїми файлами? Відповідь дають дев’ять бітів. Крути права і дивись правий стовпчик.
~/www/book~/www/book/ch1.htmlindex.html
своїм текстом — під твоїм іменем.У ch1.html права 644, на теці book —
777. Файл зник, замість нього чужий із рекламою. Як, якщо у файл
не можна писати?
Учень зробив chmod -R 777 ~/www, сайт запрацював. Чому
автоперевірка не пропустить роботу?
~/.ssh: коли SSH відмовляється працюватиЄдине місце в системі, де програма сама перевіряє твої права — і сама тобі відмовляє
Пару ключів ти створюєш у себе. Приватний id_ed25519
залишається на ноутбуці, на сервер їде тільки публічний — рядком
у ~/.ssh/authorized_keys. Налаштування буде на уроці 11,
сьогодні — лише права.
ssh, праворуч —
перевірка sshd на сервері.1. Створи теку ~/.ssh і приведи права до
700: це блокуючий критерій ssh_perms.
Має вийти 700 і 600. Другого рядка немає —
файлу ще не існує, до уроку 11 це нормально.
2. Приватний ключ на сервер не копіюй: хто його прочитав, зайде під твоїм логіном без пароля.
Клієнт ssh не бере ключ, доступний комусь іще, і пише
Permissions 0644 … are too open.
Сервер у режимі StrictModes перевіряє інше: чи не може хтось
дописати тобі рядок в authorized_keys. Тека відкрита на запис
групі або іншим — sshd мовчки ігнорує ключі, і сервер знову
питає пароль.
755 не порушує StrictModes: на запис чужим тека
не відкрита. Але тоді всі 64 акаунти читають список її файлів. Стандарт
один — 700.Учень скопіював приватний ключ на сервер «щоб заходити звідти далі»
і поставив йому 644. При спробі підключитися ssh пише
Permissions 0644 for 'id_ed25519' are too open. This private key
will be ignored. Що тут головна помилка?
Вхід по ключу працював, а після chmod -R 775 ~ перестав.
Сервер знову питає пароль. Файл authorized_keys на місці,
рядок ключа в ньому правильний. Що сталося?
Кроки 1—8 — у себе на комп’ютері, кроки 9—15 — на сервері. Галочки зберігаються, сторінку можна закрити.
book, а не lesson-02
Робота живе в ~/www/book/ — так її шукає чекер і так на неї
посилається адреса /book/.1. Склади промпт із п’яти частин. Роль, аудиторія, структура,
обмеження, формат. Тему бери таку, у якій зможеш перевірити факти.
Збережи промпт у файл prompt-ch1.json — звідти той самий текст
піде в book.json, у масив prompts.
2. Згенеруй план книги і три розділи. Окремий запит на кожен розділ: одним промптом на всю книгу розділи виходять однакові.
Друга команда покаже початок тексту розділу. Повтори для
ch2.json і ch3.json. У PowerShell набирай
curl.exe замість curl і
| Out-File -Encoding utf8 замість > file.
3. Вичитай згенероване і виправ щонайменше три місця. Шукай
повтори, «воду», вигадані дати й прізвища. Кожну дату, цитату й прізвище
перевір у пошуку, а не знайшов — прибери речення. Кожна правка — рядок
у NOTES.md. Розділ без жодної правки на здачу не приймається.
4. Звірстай чотири HTML-сторінки. index.html — зміст
із відносними посиланнями ch1.html…ch3.html.
У кожному розділі ≥250 слів тексту, а не розмітки. Посилання пиши саме
відносні, інакше в браузері буде 404.
5. Заповни book.json. Поля title,
author, ai_model, chapters[],
prompts[]. Зберігай у кодуванні UTF-8 without BOM,
інакше jq на сервері не прочитає файл і критерій
manifest буде червоний.
6. Згенеруй три ілюстрації локально. По одній на розділ. Вони
лишаються в теці img/ на твоєму комп’ютері — на сервер вони
не заливаються взагалі. Учитель дивиться їх очно.
7. Опиши ілюстрації в img-credits.md. Для кожної:
локальний файл, інструмент, промпт, alt-текст і підпис.
Alt має замінювати зображення словами, а не називати його номер.
8. Заповни NOTES.md. Мінімум три записи у форматі
«було → стало → чому». Окремо познач, що зробила модель, а що ти.
«Покращив текст» записом не вважається.
9. Залий сім файлів по FTP і перенеси їх у ~/www/book/.
Це index.html, ch1.html, ch2.html,
ch3.html, book.json, NOTES.md
і img-credits.md. Картинки не заливай. FTP-клієнт кладе файли
в ~/upload/, тому теку створи заздалегідь і перенеси файли
вже на сервері.
Останній рядок має дати сім файлів. Менше — заливання обірвалося, повтори його тим самим клієнтом і тими самими даними, що на уроці 1.
10. Перевір код відповіді своєї сторінки. Логін в адресі — твій.
Очікуєш 200. Отримав 403 — це права,
їх виставляєш наступними двома кроками. 404 — файл лежить
не там або назва в іншому регістрі: Ch1.html і
ch1.html для Linux різні файли.
11. Виставь права: теки 755. Обов’язково після
заливання, а не до нього.
Другий рядок має дати 0. Інше число — прибери
| wc -l і побачиш, яка тека не піддалася.
12. Виставь права: файли 644. Ця команда чіпає тільки
звичайні файли й не знімає з тек біт x.
Знову 0. Тепер повтори крок 10: код відповіді має стати
200.
13. Приведи ~/.ssh до 700.
Має вийти 700. Якщо всередині є
authorized_keys — йому 600. Приватного ключа
на сервері бути не повинно взагалі. Будь-яке інше число — критерій
ssh_perms червоний і роботу не приймуть.
14. Зроби аудит: жодного world-writable об’єкта.
Порожній вивід — критерій no_ww зелений. Щось вивелося —
виконай chmod go-w на кожен знайдений об’єкт і повтори
команду.
15. Додай посилання на /book/ з головної сторінки.
Один рядок із посиланням у ~/www/index.html з уроку 1 — щоб
роботу можна було знайти без списку адрес. Цей файл ти заливаєш
наново, тому після нього повтори кроки 11 і 12.
Усі п’ятнадцять галочок стоять — переходь на вкладку «Перевірка» й тисни кнопку. Спроби не обмежені.
Шість критеріїв про книгу і чотири про права. Чотири останні — блокуючі: поки хоч один із них червоний, роботу не приймуть. Спроби не обмежені.
Демонстраційний режим: результат згенеровано для показу — навмисно
з одним червоним 🔒-пунктом, щоб було видно, як це виглядає.
На сервері ця кнопка викликає POST /api/check, який запускає
/opt/lessons/02/check.sh від імені твого акаунта.
Перша команда шукає все, у чого стоїть біт запису для «інших».
Саме це й робить 777. Умова ! -type l відкидає
символьні посилання. Вони завжди виглядають як lrwxrwxrwx,
і це нормально: права беруться з того файлу, на який посилання вказує.
Порожній вивід — критерій зелений.
img-credits.md;ls -l ~/www/book і читаєш будь-який рядок уголос:
тип, власник, група, три трійки, вісімкове число;NOTES.md є щонайменше три конкретні правки, а не
«покращив текст».Це те, що бачить учитель, коли виставляє оцінку.
| Складник | Вага | Результат |
|---|
755, файли — 644: це не забобон,
а мінімум, при якому сайт працює, а сусід нічого не змінить;x на теці — це «увійти», і без нього не працює навіть
читання файлів усередині;777 на теці страшніший за 666 на файлі;~/.ssh
завжди 700.chmod -R 777 ~/www «щоб точно запрацювало» — блокуючий
критерій no_ww червоний, і роботу поки не приймуть;chmod -R 644 ~/www разом із теками — сайт лягає повністю,
бо в теки не можна увійти;/home/koval.d.10b/www/book/ch1.html)
замість відносних ch1.html — у браузері 404;book.json збережено з BOM — jq не читає маніфест,
критерій manifest червоний при формально правильному JSON;Дописати четвертий розділ. Додати до кожного розділу коротку анотацію
в index.html. І написати в NOTES.md абзац-відповідь
на питання: що конкретно зміг би зробити однокласник, якби твоя
~/www мала 777. Не «зламати сайт», а поіменно:
які команди він виконав би і що побачили б читачі.
Права доступу — тема, де все перевіряється однією командою в терміналі. Перевіряти дозволено й корисно.
chmod — числовий і буквений запис, ключ -R,
велика X.
GNU Coreutils — chmodchown, chgrp і чому звичайний користувач
не може віддати файл.
GNU Coreutils — chown,
man7.org — chown(2)r, w, x і чому
видалення залежить від теки.
man7.org — inode(7),
man7.org — unlink(2)/tmp має режим 1777.
man7.org — inode(7), S_ISVTXumask: маска нових файлів і тек.
man7.org — umask(2)find — -perm -o+w, -type,
-exec … +.
GNU Findutils — findStrictModes, вимоги до ~/.ssh
і authorized_keys.
man.openbsd.org — sshd_config(5),
man.openbsd.org — sshd(8), розділ AUTHORIZED_KEYSroot, пошук індексного файлу, коди 403 і 404.
nginx.org — ngx_http_core_module203.0.113.0/24).
RFC 5737jq не читає файл із BOM.
unicode.org — UTF & BOM FAQ,
jqlang.github.io — jq manualalt-текст: що писати замість зображення.
W3C WAI — Images TutorialПовний список із поясненнями, що саме звідки взято, —
у файлі urok-02-джерела.md поруч із цією сторінкою.