До списку уроків
10 клас · Урок 2 з 16

AI-книга і права доступу: публікація на власному сабдомені

виконано0%
Крок 1

Що робимо сьогодні

Після уроку ти вмієш

Хід уроку

ЕтапХвЩо робимо
Вхід5Сабдомен з уроку 1
Статичний сайт10DNS → nginx → ~/www/
Промпт10П’ять частин промпту
Практика: генерація20Три розділи через POST /api/llm
Практика: верстка25Чотири HTML, book.json, FTP
Права: u/g/o × rwx15Сітка 3×3, вісімковий запис
Атака сусіда10Учитель пише у теку 777
Практика: аудит прав15find, chmod, ~/.ssh
Автоперевірка5Чотири 🔒-критерії
Підсумок5755 на теки, 644 на файли
Разом120
Що ти здаєш Тека ~/www/book/: index.html, розділи ch1.htmlch3.html по ≥250 слів, book.json, NOTES.md, img-credits.md з описами ≥3 ілюстрацій та alt-текстами. Картинки лишаються на твоєму комп’ютері. Права: теки 755, файли 644, ~/.ssh 700.
Блокуючі критерії no_ww, dir_perms, file_perms, ssh_perms. Поки хоч один червоний, роботу не приймуть.
Крок 2

Як твоя сторінка доїжджає до чужого браузера

Однокласник набирає 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.

браузер DNS nginx на VPS файл 91.219.61.4/s/koval.d.10b → 203.0.113.10 index.html користувач www-data Шлях, який nginx проходить пішки — сегмент за сегментом / home koval.d.10b www/book index.html тека тека тека теки звичайний файл потрібен x потрібен x потрібен x потрібен x потрібен r …і саме для «інших», бо nginx — не ти й не твоя група Бракує x хоч на одній теці ланцюга або r на файлі → 403 Forbidden. Файлу немає або він названий інакше → 404 Not Found.
403 і 404 — це діагноз 404 — файл не там (у ~/ замість ~/www/) або назва в іншому регістрі: Ch1.html і ch1.html — різні файли. 403 — права.
Питання

Ти залив по FTP index.html, права 644, назва правильна. Але /book/ дає 404: файл лежить за шляхом /home/koval.d.10b/book/index.html. Що сталося?

Крок 3

Книга: промпт як технічне завдання

Модель — не автор. Автор — ти; модель пише чернетку за твоїм ТЗ

Текст генерує локальна модель на сервері вчителя: запит POST /api/llm, відповідь — JSON із текстом.

П’ять частин промпту

1. Напиши промпт із п’яти частин — це технічне завдання для моделі.

ЧастинаНа що впливаєПриклад
Рольлексика, глибина, тон«Ти — науковий журналіст, який пише про астрономію»
Аудиторіяскладність, довжина речень«для десятикласників без фізики поглибленого рівня»
Структураформа відповіді«розділ із 4 абзаців: гачок, суть, приклад, висновок»
Обмеженнящо заборонено«без вигаданих цитат і дат; якщо не впевнений — пиши „невідомо“»
Форматщо прийме твій код«чистий текст без Markdown, 260—320 слів»

Як звернутися до моделі

2. Збережи промпт у файл prompt-ch1.json — потім скопіюєш його в book.json дослівно.

3. Надішли файл моделі й запиши відповідь у ch1.json.

термінал · Git Bash, macOS, Linux
$ curl -s -X POST https://91.219.61.4/api/llm -H "Content-Type: application/json" --data @prompt-ch1.json > ch1.json $ head -c 200 ch1.json {"model":"local-8b","text":"Уяви, що ти кидаєш камінець у колодязь і ніколи…

Друга команда покаже початок розділу. Файл порожній — перевір адресу.

4. У Windows набирай curl.exe: псевдонім curl не розуміє --data, а просте > запише UTF-16.

той самий запит · PowerShell 5.1
$ curl.exe -s -X POST https://91.219.61.4/api/llm -H "Content-Type: application/json" --data "@prompt-ch1.json" | Out-File -Encoding utf8 ch1.json

5. Повтори кроки 2—4 для ch2 і ch3.

Структура книги і маніфест

6. Зверстай у теці ~/www/book/ зміст index.html і три розділи по ≥250 слів. Посилання пиши відносні (ch1.html): повний шлях дасть 404.

~/www/book/ — те, що їде на сервер index.html ch1.html ch2.html ch3.html book.json NOTES.md img-credits.md зміст із посиланнями розділ 1 · ≥250 слів розділ 2 · ≥250 слів розділ 3 · ≥250 слів маніфест промптів журнал правок описи ілюстрацій book.json — що всередині "title" "author" "ai_model" "chapters" "prompts" "human_edits" "images" назва книги твоє ім’я, не модель яка модель писала масив із 3 файлів повний текст кожного скільки абзаців переписано кількість ілюстрацій локальна тека на твоєму ноутбуці img/ch1.png · ch2.png · ch3.png залишаються тут назавжди учитель дивиться їх очно на сервер не їдуть — замість них опис в img-credits.md Права, які має мати ця тека book/ → 755 усі 7 файлів → 644 інакше блокуючі критерії червоні
Маніфест — це не бюрократія. Через рік ти не згадаєш, який саме промпт дав найкращий третій розділ; book.json згадає за тебе.

7. Заповни book.json за зразком і збережи в кодуванні UTF-8 without BOM: інакше jq впаде на першому символі.

book.json · мінімальний робочий вигляд
{ "title": "Горизонт подій: короткий путівник", "author": "Олег Кравченко, 10-Б", "ai_model": "local-8b (сервер школи, /api/llm)", "chapters": [ { "file": "ch1.html", "title": "Що таке горизонт подій", "words": 284 }, { "file": "ch2.html", "title": "Як їх знаходять", "words": 301 }, { "file": "ch3.html", "title": "Чого ми досі не знаємо", "words": 268 } ], "prompts": [ { "for": "ch1.html", "text": "Ти — науковий журналіст. Аудиторія — десятикласники…" } ], "human_edits": 11, "images": 3 }

NOTES.md: що зробила людина, що зробила модель

8. Запиши по рядку на кожну правку: що було, що стало, чому.

Питання

Модель видала розділ, у якому є точна дата, прізвище дослідника і назва журналу. Текст читається бездоганно, у пошуку такої статті немає. Що правильно зробити перед публікацією?

img-credits.md: ілюстрації, яких на сервері немає

9. Опиши кожну ілюстрацію окремим записом: alt замінює картинку словами.

img-credits.md · один запис
## ch1 — ілюстрація 1 - файл (локально): img/ch1-horizon.png - інструмент: локальна модель зображень, промпт нижче - промпт: "схематичний розріз чорної діри, підписи українською, стиль підручника" - alt: "Схема чорної діри в розрізі: у центрі сингулярність, навколо неї коло — горизонт подій, зовні — світлові промені, що загинаються всередину" - підпис під ілюстрацією: "Горизонт подій — не поверхня, а межа неповернення"
Питання

Ти написав у img-credits.md: alt: "ілюстрація до розділу 1". Формально поле заповнене, критерій alt_desc просить непорожній текст. Чому це все одно погана відповідь?

Крок 4

Три категорії, три дії, дев’ять відповідей

Уся система прав Linux — це таблиця 3×3. Більше там нічого немає

У кожного файлу записані власник і група. Ядро перевіряє три категорії зверху вниз і зупиняється на першому збігу: ти власник — діють тільки права власника.

КатегоріяКого позначаєХто це на нашому сервері
u — власник
user, owner
той, чий логін записаний у файлі ти сам: файл створив твій акаунт
g — група
group
усі, хто входить у групу файлу твій клас: група 10b, у ній 22 людини
o — інші
others
усі решта акаунтів системи 41 учень з 10A і 10C, учитель і сам nginx (www-data)

Анатомія рядка ls -l

1. Подивись права файлів у теці книги, а потім права самої теки.

термінал на сервері
$ ls -l ~/www/book total 28 -rw-r--r-- 1 koval.d.10b 10b 1842 вер 2 10:14 book.json -rw-r--r-- 1 koval.d.10b 10b 5310 вер 2 10:12 ch1.html -rw-r--r-- 1 koval.d.10b 10b 5644 вер 2 10:12 ch2.html -rw-r--r-- 1 koval.d.10b 10b 4980 вер 2 10:13 ch3.html -rw-r--r-- 1 koval.d.10b 10b 976 вер 2 10:15 img-credits.md -rw-r--r-- 1 koval.d.10b 10b 2103 вер 2 10:11 index.html -rw-r--r-- 1 koval.d.10b 10b 814 вер 2 10:16 NOTES.md $ ls -ld ~/www/book drwxr-xr-x 2 koval.d.10b 10b 4096 вер 2 10:16 /home/koval.d.10b/www/book

У першому стовпчику десять символів: тип об’єкта і три трійки прав. Побачив No such file or directory — теки ще немає, створи її.

2. Не забувай ключ -d: без нього прав самої теки не видно, а саме там ховається причина 403.

drwxr-xr-x — десять символів, які вирішують усе тип власник (u) група (g) інші (o) d r w x r - x r - x d — тека 4 2 1 4 0 1 4 0 1 (- звичайний файл) 4+2+1 = 7 4+0+1 = 5 4+0+1 = 5 755 власник робить усе, решта — читає й заходить, але не пише читається зліва направо
r = 4, w = 2, x = 1; трійка — сума ваг увімкнених бітів.
Питання

Команда ls -ld ~/www показала drwxr-x--- 5 koval.d.10b 10b. Файли всередині мають 644 і лежать правильно, у браузері — 403 Forbidden. Чому сайт не працює?

Крок 5

Вісімковий запис: чому саме 755 і 644

Три біти дають вісім комбінацій — рівно стільки, скільки цифр від 0 до 7

1. Згортай трійку в цифру: склади ваги увімкнених бітів r = 4, w = 2, x = 1. Тоді rwx = 7, r-x = 5, rw- = 6.

цифра біти r w x літерами для файлу для теки 012 345 67 0 0 00 0 10 1 0 0 1 11 0 01 0 1 1 1 01 1 1 - - -- - x- w - - w xr - -r - x r w -r w x нічого запустити як програму тільки перезаписати писати й запускати тільки читати читати й запускати читати й змінювати читати, змінювати, запускати нічого зайти, знаючи ім’я безглуздо: не зайти зайти, створити, видалити імена видно, зайти не можна зайти й побачити список безглуздо: не зайти зайти, дивитися, змінювати вміст 5 і 7 — робочі цифри цього уроку
Стовпчик «для теки»: без x право на запис нічого не дає.

Дві цифри, які ти писатимеш увесь модуль

2. Вивчи ці чотири режими: інших сьогодні не знадобиться.

РежимЛітерамиКому що дозволеноДе застосовується
755rwxr-xr-x власник — усе; група й інші — зайти й переглянути усі теки в ~/www
644rw-r--r-- власник — читати й змінювати; решта — тільки читати усі файли сайту: HTML, JSON, MD
700rwx------ власник — усе; решта — нічого, навіть імен не бачить ~/.ssh, приватні теки поза сайтом
600rw------- власник — читати й змінювати; решта — нічого приватний ключ, ~/.env (тема 2)

3. Перевір себе в калькуляторі: клацни букви або впиши число. Внизу з’явиться готова команда.

Калькулятор chmod · у два боки

Обидва записи означають одне й те саме.

Власник (u)

це ти, логін koval.d.10b

Група (g)

твій клас — група 10b

Інші (o)

решта сервера і nginx www-data
rwxr-xr-x
готова команда
Питання

Ти хотів «закрити зайве» і виконав chmod 644 ~/www/book. Сайт перестав відкриватися, хоча всі сім файлів на місці й у них правильні 644. Що саме зламалося?

Крок 6

Біт x на теці — це двері, а не запуск

Найчастіше непорозуміння всього уроку. Розберемо його окремо

На файлі x означає «виконати». На теці ті самі три букви означають інше — звіряй за таблицею.

БітНа файліНа теці
r прочитати вміст файлу побачити список імен усередині (ls) — і більше нічого
w змінити вміст файлу створювати, перейменовувати й видаляти записи в теці — незалежно від прав самих файлів
x виконати як програму увійти всередину: зробити cd, і взагалі використати цю теку як частину будь-якого шляху
r-- (4) --x (1) r-x (5) rwx (7) двері замкнені двері відчинені двері відчинені двері відчинені список імен імен не видно список імен список імен + можна зносити й ставити бачиш імена, але не відкриєш жоден зайдеш, тільки якщо точно знаєш ім’я файлу нормальна тека: 755 для сайту якщо це третя трійка — так виглядає 777 Читання теки і вхід у теку — це різні дозволи. Їх дають окремо.
r читає таблицю «ім’я → номер файлу», x веде по ній до самого файлу.

1. Постав своїй теці 644 і подивись, що станеться. Остання команда блоку повертає 755 назад.

тека 644: імена є, доступу немає
$ chmod 644 ~/www/book $ ls ~/www/book book.json ch1.html ch2.html ch3.html img-credits.md index.html NOTES.md $ ls -l ~/www/book ls: cannot access '/home/koval.d.10b/www/book/ch1.html': Permission denied -????????? ? ? ? ? ? ch1.html $ cd ~/www/book bash: cd: /home/koval.d.10b/www/book: Permission denied $ chmod 755 ~/www/book

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?

Крок 7

Команди: chmod, chown, chgrp, umask

Чотири інструменти, з яких тобі щодня знадобляться два

chmod числом: коротко й безжально

1. Постав права числом і перевір результат: число задає всі дев’ять бітів одразу.

числовий запис
$ chmod 755 ~/www/book $ chmod 644 ~/www/book/ch1.html $ stat -c '%a %n' ~/www/book ~/www/book/ch1.html 755 /home/koval.d.10b/www/book 644 /home/koval.d.10b/www/book/ch1.html

Має вийти 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-x755
chmod o= dir«іншим — нічого»: третя трійка обнуляється750 з 755

Правильний рекурсивний ремонт

3. Лагодь дерево двома командами find: теки й файли окремо. Одне число на все (chmod -R 644 ~/www) зніме з тек x, і сайт ляже.

ремонт прав у два рядки
$ find ~/www -type d -exec chmod 755 {} + $ find ~/www -type f -exec chmod 644 {} + $ find ~/www -type d ! -perm 755 | wc -l 0 $ find ~/www -type f ! -perm 644 | wc -l 0

Обидва wc -l дадуть 0. Інше число — прибери | wc -l і побачиш винні файли.

4. Той самий результат однією командою: велика X дає x тільки текам.

той самий результат однією командою
$ chmod -R u=rwX,go=rX ~/www

chown і chgrp: чому вони тобі не знадобляться

5. Не витрачай час на chown: власника міняє тільки root.

спроба подарувати файл
$ chown marta ch1.html chown: changing ownership of 'ch1.html': Operation not permitted $ id uid=1042(koval.d.10b) gid=1002(10b) groups=1002(10b),1100(students)

Відповідь — Operation not permitted. Інакше сусідові можна було б підкинути файл і з’їсти його квоту.

6. chgrp не чіпай: нові файли й так виходять із групою 10b.

umask: звідки беруться права нового файлу

7. Перевір маску: вона пояснює, звідки беруться 644 і 755.

перевір свою маску
$ umask 0022 $ umask -S u=rwx,g=rx,o=rx

Має вийти 0022: із заготовки 666 і 777 маска прибирає w у групи й інших. Файл, залитий по FTP, маску не питає — права виставляй після заливання.

Питання

Учень виконав chmod -R 644 ~/www, щоб «закрити все зайве». Тепер навіть він сам не може зайти в ~/www, а сайт віддає 403. Яка команда виправить це найшвидше й без ризику?

Питання

Ти хочеш, щоб однокласниця Марта могла дописати розділ у твою книгу, і виконуєш chown marta ~/www/book/ch3.html. Система відповідає Operation not permitted. Чому так задумано?

Крок 8

Атака сусіда: що зможе зробити однокласник

Що інший акаунт зробить з твоїми файлами? Відповідь дають дев’ять бітів. Крути права і дивись правий стовпчик.

Що може зробити Марта — акаунт із категорії «інші» тека 700файли 644 тека 755файли 644 тека 755файли 666 тека 777файли 644 зайти в теку (cd) побачити список файлів (ls) прочитати ch1.html дописати рядок у ch1.html видалити ch1.html підкласти власний hack.html підмінити сторінку цілком нініні нініні ні нініні ні ніні ні* тактактак тактактак тактактак тактак тактактак * у файл 644 вона не запише — але видалить його разом із теки й покладе свій. Результат для читача той самий.
Тренажер «Атака сусіда»

Тека ~/www/book

Власник (u)

Група (g)

Інші (o)

Файл ~/www/book/ch1.html

Власник (u)

Група (g)

Інші (o)

777 на твоїй теці Будь-хто з 64 акаунтів видалить твій файл або підмінить index.html своїм текстом — під твоїм іменем.
Питання

У ch1.html права 644, на теці book777. Файл зник, замість нього чужий із рекламою. Як, якщо у файл не можна писати?

Питання

Учень зробив chmod -R 777 ~/www, сайт запрацював. Чому автоперевірка не пропустить роботу?

Крок 9

Права на ~/.ssh: коли SSH відмовляється працювати

Єдине місце в системі, де програма сама перевіряє твої права — і сама тобі відмовляє

Пару ключів ти створюєш у себе. Приватний id_ed25519 залишається на ноутбуці, на сервер їде тільки публічний — рядком у ~/.ssh/authorized_keys. Налаштування буде на уроці 11, сьогодні — лише права.

Твій ноутбук · ~/.ssh id_ed25519 id_ed25519.pub known_hosts сама тека .ssh 600 — приватний 644 — публічний 644 700 Сервер · /home/koval.d.10b/.ssh authorized_keys (приватного ключа тут не буває ніколи) сама тека .ssh 600 700 · критерій ssh_perms .pub Клієнт ssh відмовляє сам приватний ключ доступний іншим (644) → WARNING: UNPROTECTED PRIVATE KEY FILE! → Permissions 0644 … are too open Сервер sshd відмовляє в режимі StrictModes .ssh або authorized_keys відкриті на запис групі чи іншим (775, 777, 730…) → Authentication refused: bad ownership or modes
Ліворуч перевірка твого клієнта ssh, праворуч — перевірка sshd на сервері.

1. Створи теку ~/.ssh і приведи права до 700: це блокуючий критерій ssh_perms.

привести ~/.ssh до ладу на сервері
$ mkdir -p ~/.ssh $ chmod 700 ~/.ssh $ chmod 600 ~/.ssh/authorized_keys 2>/dev/null $ stat -c '%a %n' ~/.ssh ~/.ssh/* 700 /home/koval.d.10b/.ssh 600 /home/koval.d.10b/.ssh/authorized_keys

Має вийти 700 і 600. Другого рядка немає — файлу ще не існує, до уроку 11 це нормально.

2. Приватний ключ на сервер не копіюй: хто його прочитав, зайде під твоїм логіном без пароля.

Чому це не примха

Клієнт ssh не бере ключ, доступний комусь іще, і пише Permissions 0644 … are too open.

Сервер у режимі StrictModes перевіряє інше: чи не може хтось дописати тобі рядок в authorized_keys. Тека відкрита на запис групі або іншим — sshd мовчки ігнорує ключі, і сервер знову питає пароль.

Чесна деталь про 755 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 на місці, рядок ключа в ньому правильний. Що сталося?

Крок 10

Практика: від промпту до правильних прав

Кроки 1—8 — у себе на комп’ютері, кроки 9—15 — на сервері. Галочки зберігаються, сторінку можна закрити.

Тека зветься book, а не lesson-02 Робота живе в ~/www/book/ — так її шукає чекер і так на неї посилається адреса /book/.

Чекліст роботи

1. Склади промпт із п’яти частин. Роль, аудиторія, структура, обмеження, формат. Тему бери таку, у якій зможеш перевірити факти. Збережи промпт у файл prompt-ch1.json — звідти той самий текст піде в book.json, у масив prompts.

2. Згенеруй план книги і три розділи. Окремий запит на кожен розділ: одним промптом на всю книгу розділи виходять однакові.

термінал · Git Bash, macOS, Linux
$ curl -s -X POST https://91.219.61.4/api/llm -H "Content-Type: application/json" --data @prompt-ch1.json > ch1.json $ head -c 200 ch1.json

Друга команда покаже початок тексту розділу. Повтори для ch2.json і ch3.json. У PowerShell набирай curl.exe замість curl і | Out-File -Encoding utf8 замість > file.

3. Вичитай згенероване і виправ щонайменше три місця. Шукай повтори, «воду», вигадані дати й прізвища. Кожну дату, цитату й прізвище перевір у пошуку, а не знайшов — прибери речення. Кожна правка — рядок у NOTES.md. Розділ без жодної правки на здачу не приймається.

4. Звірстай чотири HTML-сторінки. index.html — зміст із відносними посиланнями ch1.htmlch3.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/, тому теку створи заздалегідь і перенеси файли вже на сервері.

термінал на сервері
$ mkdir -p ~/www/book $ mv ~/upload/* ~/www/book/ $ ls -l ~/www/book

Останній рядок має дати сім файлів. Менше — заливання обірвалося, повтори його тим самим клієнтом і тими самими даними, що на уроці 1.

10. Перевір код відповіді своєї сторінки. Логін в адресі — твій.

термінал на сервері
$ curl -s -o /dev/null -w "%{http_code}\n" http://91.219.61.4/s/ТВІЙ-ЛОГІН/book/

Очікуєш 200. Отримав 403 — це права, їх виставляєш наступними двома кроками. 404 — файл лежить не там або назва в іншому регістрі: Ch1.html і ch1.html для Linux різні файли.

Порядок дій, який економить пів уроку Спочатку залий усі файли, і лише потім виставляй права. Кожне нове заливання повертає файлу режим FTP-клієнта.

11. Виставь права: теки 755. Обов’язково після заливання, а не до нього.

термінал на сервері
$ find ~/www -type d -exec chmod 755 {} + $ find ~/www -type d ! -perm 755 | wc -l

Другий рядок має дати 0. Інше число — прибери | wc -l і побачиш, яка тека не піддалася.

12. Виставь права: файли 644. Ця команда чіпає тільки звичайні файли й не знімає з тек біт x.

термінал на сервері
$ find ~/www -type f -exec chmod 644 {} + $ find ~/www -type f ! -perm 644 | wc -l

Знову 0. Тепер повтори крок 10: код відповіді має стати 200.

13. Приведи ~/.ssh до 700.

термінал на сервері
$ mkdir -p ~/.ssh $ chmod 700 ~/.ssh $ stat -c %a ~/.ssh

Має вийти 700. Якщо всередині є authorized_keys — йому 600. Приватного ключа на сервері бути не повинно взагалі. Будь-яке інше число — критерій ssh_perms червоний і роботу не приймуть.

14. Зроби аудит: жодного world-writable об’єкта.

термінал на сервері
$ find ~ -perm -o+w ! -type l

Порожній вивід — критерій no_ww зелений. Щось вивелося — виконай chmod go-w на кожен знайдений об’єкт і повтори команду.

15. Додай посилання на /book/ з головної сторінки. Один рядок із посиланням у ~/www/index.html з уроку 1 — щоб роботу можна було знайти без списку адрес. Цей файл ти заливаєш наново, тому після нього повтори кроки 11 і 12.

Усі п’ятнадцять галочок стоять — переходь на вкладку «Перевірка» й тисни кнопку. Спроби не обмежені.

Крок 11

Автоперевірка

Шість критеріїв про книгу і чотири про права. Чотири останні — блокуючі: поки хоч один із них червоний, роботу не приймуть. Спроби не обмежені.

Демонстраційний режим: результат згенеровано для показу — навмисно з одним червоним 🔒-пунктом, щоб було видно, як це виглядає. На сервері ця кнопка викликає POST /api/check, який запускає /opt/lessons/02/check.sh від імені твого акаунта.

Чим саме перевіряються права

ці ж команди можеш запустити сам
$ find ~ -perm -o+w ! -type l $ find ~/www -type d ! -perm 755 | wc -l $ find ~/www -type f ! -perm 644 | wc -l $ stat -c %a ~/.ssh

Перша команда шукає все, у чого стоїть біт запису для «інших». Саме це й робить 777. Умова ! -type l відкидає символьні посилання. Вони завжди виглядають як lrwxrwxrwx, і це нормально: права беруться з того файлу, на який посилання вказує. Порожній вивід — критерій зелений.

Що вчитель дивиться на твоєму екрані

Крок 12

Шкала виконання

Це те, що бачить учитель, коли виставляє оцінку.

СкладникВагаРезультат
Виконано
0%
Рекомендований бал за 12-бальною

Чотири речення, які варто запам’ятати

Де найчастіше помиляються

Домашнє завдання

Дописати четвертий розділ. Додати до кожного розділу коротку анотацію в index.html. І написати в NOTES.md абзац-відповідь на питання: що конкретно зміг би зробити однокласник, якби твоя ~/www мала 777. Не «зламати сайт», а поіменно: які команди він виконав би і що побачили б читачі.

Джерела

Звідки взяті факти й формулювання

Права доступу — тема, де все перевіряється однією командою в терміналі. Перевіряти дозволено й корисно.

Повний список із поясненнями, що саме звідки взято, — у файлі urok-02-джерела.md поруч із цією сторінкою.