Модуль 0.2: Оточення та Дозволи (Хто ви та де ви)
Щоденне використання | Складність:
[QUICK]| Час: 45 хв
Передумови
Розділ «Передумови»Перед початком цього модуля:
- Обов’язково: Модуль 0.1: Досвідчений користувач CLI
- Середовище: Будь-яка система Linux (VM, WSL або нативна)
Що ви зможете робити після цього модуля
Розділ «Що ви зможете робити після цього модуля»Після завершення цього модуля ви зможете:
- Налаштувати змінні оточення (PATH, HOME, PS1) та пояснити, як вони успадковуються
- Дебажити помилки “command not found”, відстежуючи змінну PATH
- Використовувати sudo безпечно та пояснити, чому працювати від root небезпечно
- Керувати правами власності та дозволами файлів для різних користувачів і груп
Чому цей модуль важливий
Розділ «Чому цей модуль важливий»Уявіть ситуацію. Ви завантажуєте скрипт з інструкції. Вводите ./deploy.sh. Термінал відповідає:
bash: ./deploy.sh: Permission deniedВи пробуєте ще раз, просто deploy.sh (без ./). Тепер отримуєте:
bash: deploy.sh: command not foundВи дивитеся на екран. Файл ось він, прямо тут. Ви бачите його через ls. Чому Linux вдає, що його не існує? І чому, коли ви вказуєте прямо на нього, Linux відмовляється його запускати?
Ці дві помилки — «Permission denied» (Відмовлено у доступі) та «command not found» (команду не знайдено) — мабуть, найбільше дратують початківців у Linux. Вони здаються випадковими й несправедливими. Але вони зовсім не випадкові. Вони походять від двох систем, які працюють саме так, як було задумано:
- Оточення (Environment) — набір налаштувань, які кажуть вашій оболонці (shell), де шукати програми, хто ви такий і як поводитися.
- Дозволи (Permissions) — система безпеки, яка контролює, хто може читати, записувати та виконувати кожен файл у системі.
Щойно ви зрозумієте ці дві системи, ці загадкові помилки перетворяться з глухих стін на корисні вказівники. Ви будете знати точно, що не так і точно, як це виправити. Що ще важливіше, коли ви почнете працювати з Kubernetes, ви зрозумієте, чому контейнери працюють не від root, навіщо потрібні ServiceAccounts і чому важливий RBAC — бо всі вони побудовані на цих самих концепціях дозволів.
Чи знали ви?
Розділ «Чи знали ви?»-
Змінна
$PATHз’явилася в Unix Version 7 у 1979 році. До цього доводилося вводити повний шлях до кожної команди — уявіть, що ви пишете/usr/bin/lsщоразу, коли хочете переглянути список файлів. -
Числова система дозволів (наприклад,
chmod 755) базується на вісімковій (base-8) системі числення. Кожна цифра представляє три бінарні біти — для читання, запису та виконання. Це буквально двійкова математика, яку можна рахувати в умі. -
Команда
sudoзаписує кожен виклик у файл/var/log/auth.log. Ваш системний адміністратор бачить точно, що ви запускали й коли. Зsudoнемає жодних таємниць. -
У більшості дистрибутивів Linux домашня директорія користувача root — це
/root, а не/home/root. Root настільки особливий, що навіть не живе в одному “районі” зі звичайними користувачами.
1. Змінні оточення: Панель налаштувань вашого термінала
Розділ «1. Змінні оточення: Панель налаштувань вашого термінала»Думайте про змінні оточення (environment variables) як про додаток «Налаштування» у вашому телефоні. Ваш телефон зберігає обрану мову, браузер за замовчуванням, шпалери — щоб кожен додаток знав, як поводитися, не запитуючи вас щоразу. Змінні оточення роблять те саме для вашого термінала та кожної програми, що в ньому працює.
Змінна оточення — це просто пара назва=значення, що зберігається в пам’яті. За домовленістю назви пишуться ВЕЛИКИМИ_ЛІТЕРАМИ з підкресленнями:
# Подивитися ВСІ ваші змінні оточення (їх багато!)env
# Або використайте printenv для того ж самогоprintenv
# Подивитися значення конкретної змінної — знак $ каже "дай мені значення"echo $USERecho $HOMEОсновні змінні, які варто знати
Розділ «Основні змінні, які варто знати»| Змінна | Що зберігає | Приклад значення |
|---|---|---|
$USER | Ваше поточне ім’я користувача | alice |
$HOME | Шлях до вашої домашньої директорії | /home/alice |
$SHELL | Ваша оболонка за замовчуванням | /bin/bash |
$PWD | Ваша поточна робоча директорія | /home/alice/projects |
$EDITOR | Ваш улюблений текстовий редактор | vim або nano |
$LANG | Ваша мова та кодування | uk_UA.UTF-8 |
$HOSTNAME | Назва цієї машини | web-server-01 |
$TERM | Тип вашого термінала | xterm-256color |
$PATH | Де шукати команди | (див. наступний розділ) |
Спробуйте їх зараз:
echo "Привіт, $USER! Ви на машині $HOSTNAME."echo "Ваш дім — $HOME, а оболонка — $SHELL."echo "Зараз ви знаходитесь у $PWD."2. $PATH — найважливіша змінна у вашому житті
Розділ «2. $PATH — найважливіша змінна у вашому житті»Коли ви вводите ls і натискаєте Enter, звідки оболонка знає, де лежить програма ls? Вона не шукає по всьому жорсткому диску — це тривало б вічність. Замість цього вона перевіряє конкретний список директорій, по порядку, і запускає перший знайдений збіг. Цей список і є вашим $PATH.
echo $PATHВи побачите щось таке (директорії, розділені двокрапками):
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/home/alice/binОсь як оболонка використовує це, коли ви вводите команду:
Ви вводите: kubectl
Оболонка шукає в директоріях $PATH зліва направо:
/usr/local/bin/kubectl → існує? НІ → шукаємо далі /usr/bin/kubectl → існує? НІ → шукаємо далі /bin/kubectl → існує? НІ → шукаємо далі /usr/sbin/kubectl → існує? НІ → шукаємо далі /sbin/kubectl → існує? НІ → шукаємо далі /home/alice/bin/kubectl → існує? ТАК → ЗАПУСКАЄМО!
Якщо нічого не знайдено в жодній директорії: → "bash: kubectl: command not found"Ось чому ./deploy.sh працює, а deploy.sh — ні. Поточна директорія (.) за замовчуванням не входить у ваш $PATH. Коли ви пишете deploy.sh, оболонка перевіряє всі папки з $PATH, не знаходить його і здається. Коли ви пишете ./deploy.sh, ви вказуєте явний шлях — ви кажете «запусти файл прямо тут» — тому оболонці $PATH взагалі не потрібен.
Як знайти, де лежать команди
Розділ «Як знайти, де лежать команди»# which — показує повний шлях до командиwhich lswhich python3# Вивід: /usr/bin/python3
# type — показує, чим оболонка вважає командуtype ls# Вивід: ls is aliased to 'ls --color=auto' (якщо є аліас)# Вивід: ls is /usr/bin/ls (якщо немає)
type cd# Вивід: cd is a shell builtin (вбудовано в сам bash)Як додати директорію до $PATH
Розділ «Як додати директорію до $PATH»Припустімо, ви тримаєте власні скрипти у ~/bin. Вам потрібно додати цю папку до $PATH:
# Тимчасово — діє, поки ви не закриєте терміналexport PATH="$HOME/bin:$PATH"
# Перевірте, чи спрацювалоecho $PATH# Тепер /home/alice/bin з'явився на початкуДодавання директорії на початок означає, що ваші скрипти будуть знайдені першими, навіть якщо є системна команда з такою ж назвою. Додавання в кінець надає пріоритет системним командам.
Щоб зробити це назавжди, додайте рядок export PATH=... у конфігураційний файл вашої оболонки (розглянемо в розділі 4).
3. Встановлення змінних: export проти простого присвоєння
Розділ «3. Встановлення змінних: export проти простого присвоєння»Ця різниця збиває з пантелику майже всіх. Дивіться уважно:
# Встановлення змінної БЕЗ exportGREETING="Привіт від батька"echo $GREETING # Працює! Виводить: Привіт від батькаbash # Запускаємо дочірню оболонку (новий процес)echo $GREETING # Нічого! Пусто! Дочірній процес про неї не знаєexit # Повертаємося в батьківську оболонку
# Встановлення змінної З exportexport GREETING="Привіт від батька"echo $GREETING # Працює!bash # Запускаємо дочірню оболонкуecho $GREETING # Працює! Дочірня оболонка успадкувала зміннуexit # Повертаємося назадЧому це важливо? Тому що кожна команда, яку ви запускаєте, є дочірнім процесом вашої оболонки. Коли ви запускаєте Python-скрипт, команду Docker або kubectl, вони є дочірніми процесами. Якщо ви встановили змінну без export, ці програми її не побачать.
Правило просте:
- Без
export: Змінна існує тільки в поточній сесії термінала. Використовуйте для швидких тимчасових значень. - З
export: Змінна успадковується всіма дочірніми процесами. Використовуйте для налаштувань, які мають бачити програми (як-от$KUBECONFIG,$EDITOR,$JAVA_HOME).
# Популярні експорти, які ви побачите в роботі з Kubernetesexport KUBECONFIG=~/.kube/configexport EDITOR=vimexport JAVA_HOME=/usr/lib/jvm/java-17
# Тимчасове значення — export не потрібенBACKUP_DATE=$(date +%Y-%m-%d)echo "Робимо бекап за $BACKUP_DATE"Видалення змінних
Розділ «Видалення змінних»# Повністю видалити зміннуunset GREETINGecho $GREETING # Нічого — її більше немає4. Конфігураційні файли оболонки: Робимо зміни постійними
Розділ «4. Конфігураційні файли оболонки: Робимо зміни постійними»Будь-яка зміна в терміналі — тимчасова, вона зникає при закритті вікна. Щоб змінні оточення, аліаси та зміни $PATH стали постійними, їх треба додати в конфігураційний файл, який запускається автоматично при старті нової оболонки.
Але в який саме? Тут починається плутанина, бо їх декілька і вони працюють у різний час.
Коли запускається кожен файл
Розділ «Коли запускається кожен файл»┌──────────────────────────────────────────────────────────┐│ LOGIN SHELL (Оболонка входу) ││ (SSH сесія, перший вхід у консоль Linux) ││ ││ Запускає: /etc/profile ││ → потім ПЕРШИЙ знайдений із: ││ ~/.bash_profile ││ ~/.bash_login ││ ~/.profile ││ ││ Думайте: "Вітаємо! Дайте мені налаштувати всю сесію." │└──────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────┐│ INTERACTIVE NON-LOGIN SHELL ││ (нова вкладка/вікно термінала на робочому столі) ││ ││ Запускає: ~/.bashrc ││ ││ Думайте: "Просто ще одна оболонка, ось ваші скорочення."│└──────────────────────────────────────────────────────────┘На практиці більшість людей хоче мати однакові налаштування в усіх оболонках. Стандартний трюк такий:
- Пишете всі налаштування в
~/.bashrc - Налаштовуєте
~/.bash_profile, щоб він підвантажував (source) його:
# Вміст ~/.bash_profileif [ -f ~/.bashrc ]; then source ~/.bashrcfiТаким чином, login-оболонки також завантажать .bashrc, і ви підтримуватимете лише один файл.
Для користувачів Zsh (стандарт у macOS): Аналогом є ~/.zshrc. Zsh читає його для кожної інтерактивної оболонки, незалежно від типу входу — це набагато простіше.
Перезавантаження після змін
Розділ «Перезавантаження після змін»Після редагування файлу конфігурації НЕ потрібно закривати й відкривати термінал:
# Перезавантажити .bashrc негайноsource ~/.bashrc
# Скорочений варіант (робить те саме). ~/.bashrc5. Аліаси (Aliases): Ваші власні скорочення
Розділ «5. Аліаси (Aliases): Ваші власні скорочення»Аліас — це власне скорочення, яке розгортається в довшу команду. Вони економлять вам тисячі натискань на клавіші щодня.
# Створити аліасalias ll='ls -la'alias ..='cd ..'alias ...='cd ../..'alias cls='clear'alias ports='ss -tulnp'alias myip='curl -s ifconfig.me'Корисні аліаси для DevOps та Kubernetes
Розділ «Корисні аліаси для DevOps та Kubernetes»# Kubernetes — аліас k використовується в усьому KubeDojoalias k='kubectl'alias kgp='kubectl get pods'alias kgs='kubectl get svc'alias kgn='kubectl get nodes'alias kaf='kubectl apply -f'alias kdel='kubectl delete -f'alias klog='kubectl logs -f'
# Dockeralias dps='docker ps'alias dimg='docker images'alias dex='docker exec -it'
# Запобіжники — запитувати підтвердження перед дієюalias cp='cp -i'alias mv='mv -i'alias rm='rm -i'
# Швидка інфо про системуalias meminfo='free -h'alias diskinfo='df -h'alias cpuinfo='lscpu'Щоб зробити аліаси постійними, додайте їх у свій ~/.bashrc:
# Відкрийте .bashrc і додайте аліаси в кінецьnano ~/.bashrc
# Після додавання перезавантажте конфігsource ~/.bashrcПеревірка та видалення аліасів
Розділ «Перевірка та видалення аліасів»# Подивитися всі поточні аліасиalias
# Подивитися, у що розгортається конкретний аліасalias ll# Вивід: alias ll='ls -la'
# Тимчасово ігнорувати аліас (використати оригінальну команду)\ls # Зворотний слеш ігнорує аліасcommand ls # Ще один спосіб
# Видалити аліас для поточної сесіїunalias ll6. Дозволи на файли: Система rwx
Розділ «6. Дозволи на файли: Система rwx»Linux — це багатокористувацька операційна система. Навіть якщо ви єдина людина, що користується машиною, у системі є десятки системних користувачів (як www-data для вебсервера або postgres для бази даних). Дозволи гарантують, що ваш вебсервер не зможе прочитати ваші SSH-ключі, а база даних не зможе змінити код вашого додатка.
Запустіть ls -l у будь-якій директорії:
ls -l /etc/passwd /bin/ls /home
# Вивід виглядає так:# -rwxr-xr-x 1 root root 142144 Sep 5 2023 /bin/ls# -rw-r--r-- 1 root root 2775 Mar 10 14:22 /etc/passwd# drwxr-xr-x 3 root root 4096 Mar 10 14:22 /homeДавайте розкодуємо першу колонку символ за символом:
- r w x r - x r - x │ │ │ │ │ │ │ │ │ │ │ └──┴──┘ └──┴──┘ └──┴──┘ │ │ │ │ │ ВЛАСНИК ГРУПА ІНШІ │ (user) │ └── Тип файлу - = звичайний файл d = директорія l = символічне посиланняЩо насправді означають r, w, x
Розділ «Що насправді означають r, w, x»| Дозвіл | Для файлу | Для директорії |
|---|---|---|
r (read) | Читати вміст (cat, less) | Переглядати список файлів (ls) |
w (write) | Змінювати або видаляти файл | Створювати, перейменовувати чи видаляти файли всередині |
x (execute) | Запускати файл як програму | Заходити в директорію (cd) |
- (none) | Дія заборонена | Дія заборонена |
Дозволи для директорій часто дивують. Директорія без x — це як кімната із замкненими дверима: ви не можете зайти, навіть якщо знаєте, що всередині. Директорія без r, але з x — це як темна кімната: ви можете зайти й намацати файли, якщо знаєте їхні назви, але не можете ввімкнути світло, щоб побачити весь список.
Читання рядків дозволів — Практика
Розділ «Читання рядків дозволів — Практика»| Рядок | Власник | Група | Інші | Значення |
|---|---|---|---|---|
-rwxr-xr-x | rwx | r-x | r-x | Типова програма: всі можуть запускати, тільки власник — редагувати |
-rw-r--r-- | rw- | r— | r— | Типовий конфіг: всі можуть читати, тільки власник — редагувати |
-rw------- | rw- | --- | --- | Приватний файл: тільки власник може читати й писати |
-rwx------ | rwx | --- | --- | Приватний скрипт: тільки власник може запускати |
drwxr-xr-x | rwx | r-x | r-x | Типова папка: всі можуть заходити й бачити список, тільки власник — змінювати |
drwx------ | rwx | --- | --- | Приватна папка: тільки власник може зайти |
7. Зміна дозволів за допомогою chmod
Розділ «7. Зміна дозволів за допомогою chmod»chmod (change mode) змінює дозволи. Його можна використовувати двома способами.
Символьний режим — Зрозумілий для людини
Розділ «Символьний режим — Зрозумілий для людини»Формат: chmod [хто][оператор][дозвіл] файл
- Хто:
u(user/власник),g(group),o(others/інші),a(all/всі троє) - Оператор:
+(додати),-(забрати),=(встановити точно) - Дозвіл:
r,w,x
# Зробити скрипт виконуваним для власникаchmod u+x deploy.sh
# Забрати дозвіл на запис у групи та іншихchmod go-w config.yaml
# Дати всім дозвіл на читанняchmod a+r README.md
# Встановити точно: власнику — все, іншим — нічогоchmod u=rwx,go= secret-script.sh
# Додати виконання для всіхchmod +x run-tests.sh # Без вказання "кого", + діє на всіх
# Забрати всі дозволи у іншихchmod o= private-notes.txt # = без нічого означає "встановити в порожнечу"Числовий режим — Швидкий і точний
Розділ «Числовий режим — Швидкий і точний»Кожен дозвіл має число: читання = 4, запис = 2, виконання = 1. Додайте їх для кожної позиції.
Дозвіл Двійковий Десятковий--------- --------- ---------- --- 000 0 (немає прав) --x 001 1 (тільки виконання) -w- 010 2 (тільки запис) -wx 011 3 (запис + виконання) r-- 100 4 (тільки читання) r-x 101 5 (читання + виконання) rw- 110 6 (читання + запис) rwx 111 7 (все разом)Ви вказуєте три цифри: власник, група, інші.
# 755 — власник: rwx (7), група: r-x (5), інші: r-x (5)# Стандарт для скриптів та програмchmod 755 deploy.sh
# 644 — власник: rw- (6), група: r-- (4), інші: r-- (4)# Стандарт для звичайних файлівchmod 644 config.yaml
# 600 — власник: rw- (6), група: --- (0), інші: --- (0)# Приватні файли (SSH ключі, паролі)chmod 600 ~/.ssh/id_rsa
# 700 — власник: rwx (7), група: --- (0), інші: --- (0)# Приватні папкиchmod 700 ~/.ssh
# 444 — тільки читання для всіхchmod 444 important-record.txtНайпоширеніші патерни дозволів
Розділ «Найпоширеніші патерни дозволів»| Патерн | Число | Випадок використання |
|---|---|---|
rwxr-xr-x | 755 | Програми, скрипти, директорії |
rw-r--r-- | 644 | Звичайні файли, конфіги |
rw------- | 600 | Приватні ключі SSH, секрети |
rwx------ | 700 | Директорія .ssh, приватні скрипти |
rwxrwxr-x | 775 | Спільні папки проєктів |
rw-rw-r-- | 664 | Спільні файли проєктів |
8. Власність: chown та chgrp
Розділ «8. Власність: chown та chgrp»Кожен файл має двох власників: користувача (user) та групу (group).
# Перевірка власностіls -l myfile.txt# -rw-r--r-- 1 alice developers 1024 Mar 10 14:22 myfile.txt# ^^^^^ ^^^^^^^^^^# власник групаЗміна власника
Розділ «Зміна власника»# Змінити власника (потребує sudo, бо ви "віддаєте" файл)sudo chown bob myfile.txt
# Змінити тільки групуsudo chgrp developers myfile.txt
# Змінити обох одразу — користувач:групаsudo chown bob:developers myfile.txt
# Змінити власника папки ТА всього всередині (-R = рекурсивно)sudo chown -R alice:webteam /var/www/mysite
# Змінити тільки групу (якщо ви самі в ній є)chgrp devops deployment.yaml # sudo не потрібен, якщо ви в групі "devops"Чому власність важлива для Kubernetes
Розділ «Чому власність важлива для Kubernetes»Коли контейнер запускається, він працює від імені конкретного користувача (часто root за замовчуванням, що є ризиком). У Kubernetes securityContext ви можете встановити runAsUser та runAsGroup — це та сама концепція власності, яку ви вчите зараз, просто застосована всередині контейнера.
9. Користувач Root та sudo
Розділ «9. Користувач Root та sudo»Root: Всемогутній суперкористувач
Розділ «Root: Всемогутній суперкористувач»У Linux є один особливий користувач — root (UID 0). Root може:
- Читати, писати й запускати БУДЬ-ЯКИЙ файл незалежно від дозволів.
- “Вбивати” будь-який процес.
- Змінювати будь-які системні налаштування.
- Займати системні порти (нижче 1024).
- Форматувати диски, монтувати системи, робити абсолютно все.
Ось чому працювати під root — небезпечно. Друкарська помилка типу rm -rf / (замість rm -rf ./) миттєво знищить усю систему. Тут немає запитань «Ви впевнені?», немає кошика і немає кнопки «скасувати».
sudo: Безпечне запозичення сили Root
Розділ «sudo: Безпечне запозичення сили Root»sudo розшифровується як “superuser do” (виконати від імені суперкористувача). Це дозволяє звичайному користувачу виконати одну команду з правами root:
# Встановити пакет (потребує root)sudo apt updatesudo apt install nginx
# Редагувати системний файлsudo nano /etc/hosts
# Перезапустити сервісsudo systemctl restart nginx
# Подивитися, ким ви стаєте через sudosudo whoami# Вивід: rootКоли ви запускаєте sudo, воно запитує ваш пароль (не пароль root). Це підтвердження того, що людина за клавіатурою — це справді ви, а не хтось, хто підійшов до вашого розблокованого ноутбука.
Файл sudoers
Розділ «Файл sudoers»Не кожен може використовувати sudo. Файл /etc/sudoers визначає, кому це дозволено. Ви ніколи не повинні редагувати його напряму — завжди використовуйте спеціальну команду visudo, яка перевіряє синтаксис перед збереженням (зламаний файл sudoers може назавжди заблокувати вам доступ до root).
На більшості систем доступ до sudo надається через членство в групі:
- Ubuntu/Debian: група
sudo - RHEL/CentOS/Fedora: група
wheel
# Перевірити, у яких групах ви єgroups# Вивід: alice sudo docker# Якщо у списку є "sudo" або "wheel", ви можете використовувати sudoТипові помилки
Розділ «Типові помилки»| Помилка | Чому це стається | Як виправити |
|---|---|---|
| ”command not found” для скрипту в поточній папці | Поточна папка . не входить у $PATH. Оболонка шукає тільки в $PATH. | Запускайте як ./script.sh (явний шлях) або додайте папку до $PATH. |
| ”Permission denied” при запуску скрипту | У файлу немає дозволу на виконання (x). Linux вимагає його явно. | Виконайте chmod u+x script.sh і спробуйте знову. |
| Аліас зникає після закриття термінала | Ви створили його в сесії, але не в ~/.bashrc. Налаштування не зберігаються самі. | Додайте рядок alias у ~/.bashrc і виконайте source ~/.bashrc. |
Використання sudo vim для своїх файлів | Файл стає власністю root. Тепер ви не можете його правити як звичайний юзер. | Використовуйте vim без sudo. Якщо вже запізно, зробіть sudo chown $USER файл. |
Постійна робота під root (sudo su -) | Зручно, але небезпечно. Один хибний rm — і системі кінець. | Використовуйте sudo для окремих команд. Виходьте з root-оболонки відразу. |
chmod 777 на все підряд | Дає повний доступ усім — величезна діра в безпеці. | Визначте, якого саме дозволу бракує. Зазвичай 755 або 644 достатньо. |
Тест
Розділ «Тест»-
Для чого потрібна змінна $PATH?
Відповідь
Це список директорій, розділених двокрапкою. Коли ви вводите назву команди, оболонка шукає програму в цих папках зліва направо. Якщо програми немає в жодній папці зі списку, ви отримуєте помилку "command not found". -
Яка різниця між встановленням змінної з
exportта без нього?Відповідь
Без `export` змінна існує тільки в поточній оболонці. З `export` вона передається всім дочірнім процесам (командам або скриптам, які ви запускаєте). Використовуйте `export` для налаштувань, які мають бачити програми (як-от `$KUBECONFIG`). -
Ви бачите
-rwxr--r--на файлі. Хто може його запускати?Відповідь
Тільки **власник** (user). У групи є тільки `r--` (читання), у інших — так само. Жоден з них не має біта `x` (виконання). -
Який числовий еквівалент для rwxr-xr-x?
Відповідь
**755**. Власник: r(4)+w(2)+x(1)=7. Група: r(4)+x(1)=5. Інші: r(4)+x(1)=5. -
Чому НЕ ВАРТО використовувати
chmod 777для виправлення помилок доступу?Відповідь
Це дає право на читання, запис та виконання кожному користувачу в системі. Це критичний ризик безпеки. Краще розібратися, якого саме права не вистачає. Для скриптів це зазвичай `755`, для звичайних файлів — `644`, для приватних — `600`.
Практична вправа: Оточення та Дозволи
Розділ «Практична вправа: Оточення та Дозволи»Сценарій: Ви налаштовуєте робоче середовище на новому сервері. Потрібно налаштувати аліаси, створити структуру проєкту з правильними доступами та підготувати скрипти.
Частина 1: Змінні оточення
Розділ «Частина 1: Змінні оточення»# 1. Виведіть своє ім'я користувача, домашню папку та оболонкуecho "User: $USER"echo "Home: $HOME"echo "Shell: $SHELL"
# 2. Подивіться свій $PATH, по одній папці на рядок (так зручніше)echo $PATH | tr ':' '\n'
# 3. Встановіть змінну БЕЗ export — перевірте, чи бачить її дочірній процесPROJECT_NAME="kubedojo-lab"echo $PROJECT_NAME # Виведе: kubedojo-labbash -c 'echo $PROJECT_NAME' # Нічого не виведе (пусто)
# 4. Тепер зробіть export і перевірте зновуexport PROJECT_NAME="kubedojo-lab"bash -c 'echo $PROJECT_NAME' # Тепер виведе: kubedojo-labЧастина 2: Конфігурація оболонки
Розділ «Частина 2: Конфігурація оболонки»# 5. Додайте корисні аліаси у свій .bashrccat >> ~/.bashrc << 'EOF'
# --- Аліаси для KubeDojo ---alias ll='ls -la'alias cls='clear'alias ..='cd ..'alias k='kubectl'EOF
# 6. Перезавантажте конфіг і протестуйтеsource ~/.bashrcll # Має показати детальний список, включаючи приховані файлиЧастина 3: Дозволи
Розділ «Частина 3: Дозволи»# 7. Створіть структуру папок проєктуmkdir -p ~/lab-project/{scripts,config,secrets}
# 8. Створіть скрипт деплоюcat > ~/lab-project/scripts/deploy.sh << 'EOF'#!/bin/bashecho "Деплоїмо проєкт $PROJECT_NAME..."echo "Завершено о $(date)"EOF
# 9. Спробуйте запустити його — побачите помилку~/lab-project/scripts/deploy.sh# Очікувано: Permission denied
# 10. Дайте право на виконання тільки власникуchmod u+x ~/lab-project/scripts/deploy.sh
# 11. Запустіть успішно~/lab-project/scripts/deploy.shЧастина 4: Захист файлів
Розділ «Частина 4: Захист файлів»# 12. Створіть "секретний" файлecho "DB_PASSWORD=supersecret123" > ~/lab-project/secrets/db.env
# 13. Заблокуйте його — тільки ви можете читати й писатиchmod 600 ~/lab-project/secrets/db.env
# 14. Перевіртеls -l ~/lab-project/secrets/db.env# Очікувано: -rw-------
# 15. Закрийте вхід у папку secrets для всіх іншихchmod 700 ~/lab-project/secrets/Критерії успіху
Розділ «Критерії успіху»Ви успішно виконали вправу, якщо:
- Ви можете пояснити, що робить
$PATHі чому./script.shпрацює, аscript.sh— ні. - Ваші аліаси збережені в
~/.bashrcі працюють у нових вікнах термінала. - Скрипт
deploy.shмає право на виконання для власника. - Файл
db.envта папкаsecrets/закриті для всіх, крім вас. - Ви не використовували
sudoдля файлів, якими володієте.
Далі: Модуль 0.3: Путівник по процесах і ресурсах — Дізнайтеся, як знаходити запущені програми, моніторити ресурси системи та зупиняти процеси, що “збунтувалися”.