Linux Professional Institute Learning Logo.
Перехід до основного вмісту
  • Головна
    • Усі ресурси
    • LPI Навчальні матеріали
    • Стати дописувачем
    • Видавничі партнери
    • Cтати видавничим партнером
    • Про нас
    • FAQ
    • Дописувачі
    • Переклади
    • Контакти
  • LPI.org
5.3 Урок 1
Тема 1: Спільнота Linux та кар'єра у світі вільного програмного забезпечення
1.1 Розвиток Linux і популярні операційні системи
  • 1.1 Урок 1
1.2 Основні застосунки з відкритим кодом
  • 1.2 Урок 1
1.3 Відкрите програмне забезпечення та ліцензування
  • 1.3 Урок 1
1.4 ІКТ навички та робота в Linux
  • 1.4 Урок 1
Тема 2: Як знайти свій шлях у системі Linux
2.1 Основи командного рядку
  • 2.1 Урок 1
  • 2.1 Урок 2
2.2 Використання командного рядку для отримання допомоги
  • 2.2 Урок 1
2.3 Використання папок та перегляд списку файлів
  • 2.3 Урок 1
  • 2.3 Урок 2
2.4 Створення, переміщення та видалення файлів
  • 2.4 Урок 1
Тема 3: Потужність командного рядка
3.1 Архівація файлів через командний рядок
  • 3.1 Урок 1
3.2 Пошук та отримання даних з файлів
  • 3.2 Урок 1
  • 3.2 Урок 2
3.3 Перетворення команд у скрипт
  • 3.3 Урок 1
  • 3.3 Урок 2
Тема 4: Операційна система Linux
4.1 Вибір операційної системи
  • 4.1 Урок 1
4.2 Розуміння апаратного забезпечення комп'ютера
  • 4.2 Урок 1
4.3 Де зберігаються дані
  • 4.3 Урок 1
  • 4.3 Урок 2
4.4 Ваш комп'ютер у мережі
  • 4.4 Урок 1
Тема 5: Безпека та права доступу до файлів
5.1 Основи безпеки та визначення типів користувачів
  • 5.1 Урок 1
5.2 Створення користувачів та груп
  • 5.2 Урок 1
5.3 Керування дозволами та правами власності на файл
  • 5.3 Урок 1
5.4 Спеціальні папки та файли
  • 5.4 Урок 1
How to get certified
  1. Тема 5: Безпека та права доступу до файлів
  2. 5.3 Керування дозволами та правами власності на файл
  3. 5.3 Урок 1

5.3 Урок 1

Сертифікат:

Linux Essentials

Версія:

1.6

Розділ:

5 Безпека та дозволи на файли

Тема:

5.3 Керування правами та правом власності на файли

Урок:

1 з 1

Вступ

Будучи багатокористувацькою системою, Linux потребує способу відстежувати, кому належить кожен файл і чи дозволяється користувачеві виконувати дії з цим файлом. Це робиться для забезпечення конфіденційності користувачів, які можуть захотіти зберегти конфіденційність вмісту своїх файлів, а також для забезпечення співпраці, роблячи певні файли доступними кільком користувачам.

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

Запит інформації про файли та каталоги

Команда ls використовується для отримання переліку вмісту будь-якого каталогу. У цій базовій формі ви отримуєте лише імена файлів:

$ ls
Another_Directory  picture.jpg  text.txt
Але для кожного файлу доступно набагато більше інформації, включаючи тип, розмір, право власності тощо. Щоб побачити цю інформацію, ви повинні вказати `ls` вивести список у "`довгому форматі`" , використовуючи параметр `-l`:
$ ls -l
total 536
drwxrwxr-x 2 carol carol   4096 Dec 10 15:57 Another_Directory
-rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg
-rw-rw-r-- 1 carol carol   1881 Dec 10 15:57 text.txt

Кожен стовпець у виведенні вище має значення:

  • Перша колонка у списку показує тип файлу та дозволи.

    Наприклад, drwxrwxr-x:

    • Перший символ, d, вказує на тип файлу.

    • Наступні три символи, rwx, вказують на права власника файлу, який позначається як користувач (user) або u.

    • Наступні три символи, rwx, вказують на права групи (group), що володіє файлом, і позначається як g.

    • Останні три символи, r-x, вказують на дозволи для будь-кого іншого, також відомі як інші (others) або o.

  • У другій колонці вказується кількість жорстких посилань, що вказують на цей файл. Для каталогу це означає кількість підкаталогів, а також посилання на себе (.) і батьківський каталог (..).

  • Третя та четверта колонки відображають відомості про право власності: відповідно користувача та групи, які володіють файлом.

  • П’ята колонка показує розмір файлу в байтах.

  • У шостій колонці вказано timestamp - точну дату та час, коли файл було востаннє змінено.

  • Сьома і остання колонки показують назву файлу.

Якщо ви бажаєте побачити розміри файлів у форматі “зручному для людини” додайте параметр -h до ls. Файли розміром менше одного кілобайта матимуть розмір, показаний у байтах. Файли розміру більше ніж один кілобайт і менше одного мегабайта будуть мати K після розміру, що вказує на розмір у кілобайтах. Те ж саме стосується розмірів файлів у мегабайтах (M) і гігабайтах (G):

$ ls -lh
total 1,2G
drwxrwxr-x 2 carol carol 4,0K Dec 10 17:59 Another_Directory
----r--r-- 1 carol carol    0 Dec 11 10:55 foo.bar
-rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip
-rw------- 1 carol carol 528K Dec 10 10:43 picture.jpg
---xr-xr-x 1 carol carol   33 Dec 11 10:36 test.sh
-rwxr--r-- 1 carol carol 1,9K Dec 20 18:13 text.txt
-rw-rw-r-- 1 carol carol 2,6M Dec 11 22:14 Zipped.zip

Щоб відображати інформацію лише про певний набір файлів, додайте імена цих файлів до ls:

$ ls -lh HugeFile.zip test.sh
total 1,2G
-rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip
---xr-xr-x 1 carol carol   33 Dec 11 10:36 test.sh

А як щодо каталогів?

Якщо ви спробуєте отримати інформацію про каталог за допомогою ls -l, замість цього вам буде показано перелік вмісту каталогу:

$ ls -l Another_Directory/
total 0
-rw-r--r-- 1 carol carol 0 Dec 10 17:59 another_file.txt

Щоб уникнути цього та отримати інформацію про сам каталог, додайте параметр -d до ls:

$ ls -l -d Another_Directory/
drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory/

Перегляд прихованих файлів

Вміст каталогу, який ми отримали раніше за допомогою ls -l, не відображає всі файли:

$ ls -l
total 544
drwxrwxr-x 2 carol carol   4096 Dec 10 17:59 Another_Directory
-rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg
-rw-rw-r-- 1 carol carol   1881 Dec 10 15:57 text.txt

У цьому каталозі є ще три файли, але вони приховані. У Linux файли, назва яких починається з крапки (.), автоматично приховуються. Щоб побачити їх, нам потрібно додати параметр -a до ls:

$ ls -l -a
total 544
drwxrwxr-x 3 carol carol   4096 Dec 10 16:01 .
drwxrwxr-x 4 carol carol   4096 Dec 10 15:56 ..
drwxrwxr-x 2 carol carol   4096 Dec 10 17:59 Another_Directory
-rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg
-rw-rw-r-- 1 carol carol   1881 Dec 10 15:57 text.txt
-rw-r--r-- 1 carol carol      0 Dec 10 16:01 .thisIsHidden

Файл .thisIsHidden просто прихований, оскільки його назва починається з ..

Однак каталоги . та .. є особливими. . є вказівником на поточний каталог, тоді як .. є вказівником на батьківський каталог (каталог, який містить поточний каталог). У Linux кожен каталог містить щонайменше ці два спеціальні каталоги.

Tip

Ви можете комбінувати декілька параметрів для ls (і багатьох інших команд Linux). ls -l -a можна, наприклад, записати як ls -la.

Розуміння типів файлів

Ми вже згадували, що перша літера кожного рядка результату виводу ls -l описує тип файлу. Три найпоширеніші типи файлів:

- (звичайний файл)

Файл може містити дані будь-якого роду. Файли можна змінювати, переміщувати, копіювати та видаляти.

d (каталог)

Каталог містить інші файли або каталоги і допомагає організувати файлову систему. Технічно каталоги є особливим типом файлів.

l (м’яке посилання, soft link)

Цей “файл” є вказівником на інший файл або каталог в іншому місці файлової системи.

На додаток до них є три інші типи файлів, про які ви повинні принаймні знати, але вони виходять за рамки цього уроку:

b (блочний пристрій)

Цей файл означає віртуальний або фізичний пристрій, як правило, диски або інші типи пристроїв зберігання даних. Наприклад, перший жорсткий диск у системі може бути представлений /dev/sda.

c (символьний пристрій)

Цей файл означає віртуальний або фізичний пристрій. Термінали (наприклад, головний термінал на /dev/ttyS0) і послідовні порти є типовими прикладами символьних пристроїв.

s (сокет)

Сокети слугують “провідниками”, що передають інформацію між двома програмами.

Warning

Не змінюйте жодних дозволів для блокових пристроїв, символьних пристроїв чи сокетів, якщо ви не знаєте, що робите. Це може зашкодити роботі вашої системи!

Розуміння дозволів

В рядку виведення ls -l права доступу до файлу відображаються відразу після типу файлу у вигляді трьох груп по три символи в кожній, у порядку r, w та x. Ось що вони означають. Майте на увазі, що тире - означає відсутність певного дозволу.

Дозволи на файли

r

Означає read і має вісімкове значення 4 (не хвилюйтеся, ми обговоримо вісімкові числа незабаром). Це означає дозвіл на відкриття файлу та читання його вмісту.

w

Означає write і має вісімкове значення 2. Це означає дозвіл редагувати або видаляти файл.

x

Означає execute і має вісімкове значення 1. Це означає, що файл можна запустити як виконуваний файл або сценарій.

Так, наприклад, файл з правами rw- можна читати та записувати, але не може виконувати.

Дозволи на каталоги

r

Означає read і має вісімкове значення 4. Це означає дозвіл читати вміст каталогу, наприклад імена файлів. Але це не означає дозвіл читати вміст самих файлів.

w

Означає write і має вісімкове значення 2. Це означає дозвіл створювати або видаляти файли в каталозі або змінювати їх імена, дозволи та власників. Якщо користувач має дозвіл на запис у каталозі, він може змінити дозволи будь-якого файлу в каталозі, навіть якщо користувач не має дозволів на файл або якщо файл належить іншому користувачеві.

x

Означає execute і має вісімкове значення 1. Це означає дозвіл на вхід до каталогу, але не на виведення переліку його файлів (для цього потрібен дозвіл r).

Остання частина про каталоги може здатися дещо заплутаною. Уявімо, наприклад, що у вас є каталог під назвою Another_Directory з такими дозволами:

$ ls -ld Another_Directory/
d--xr-xr-x 2 carol carol 4,0K Dec 20 18:46 Another_Directory

Також уявіть, що всередині цього каталогу у вас є сценарій оболонки під назвою hello.sh з такими дозволами:

-rwxr-xr-x 1 carol carol 33 Dec 20 18:46 hello.sh

Якщо ви є користувачем carol і намагаєтеся вивести вміст Another_Directory, ви отримаєте повідомлення про помилку, оскільки у вашого користувача немає дозволу на читання для цього каталогу:

$ ls -l Another_Directory/
ls: cannot open directory 'Another_Directory/': Permission denied

Однак користувач carol має права на виконання. Це означає, що він може увійти до каталогу. Таким чином, користувач carol може отримати доступ до файлів всередині каталогу, якщо він має правильні дозволи для відповідного файлу. У цьому прикладі користувач має повні права доступу до сценарію hello.sh, тому він може запустити сценарій, навіть якщо не може прочитати вміст каталогу, який його містить. Все, що потрібно, це повне ім’я файлу.

$ sh Another_Directory/hello.sh
Hello LPI World!

Як ми вже говорили раніше, дозволи вказуються послідовно: спочатку для власника файлу, потім для групи власників, а потім для інших користувачів. Щоразу, коли хтось намагається виконати дію з файлом, дозволи перевіряються таким же чином. Спочатку система перевіряє, чи є поточний користувач власником файлу, і якщо це так, вона застосовує лише перший набір дозволів. В іншому випадку вона перевіряє, чи належить поточний користувач до групи, яка володіє файлом. У цьому випадку застосовується лише другий набір дозволів. У будь-якому іншому випадку система застосує третій набір дозволів. Це означає, що якщо поточний користувач є власником файлу, діють лише дозволи власника, навіть якщо дозволи групи чи інші дозволи є більшими, ніж дозволи власника.

Змінення дозволів на файл

Команда chmod використовується для зміни дозволів для файлу і приймає принаймні два параметри: перший описує, які дозволи потрібно змінити, а другий вказує на файл або каталог, для якого мають відбутися зміни. Однак дозволи на зміну можна описати двома різними способами, або “режимами”.

Перший, який називається символьний режим, пропонує детальний контроль, що дозволяє додавати або відкликати один дозвіл, не змінюючи інші у наборі прав. Інший режим, званий числовим режимом, легше запам’ятати та швидше використовувати, якщо ви хочете встановити всі значення дозволів одночасно.

Обидва режими призведуть до однакового кінцевого результату. Так, наприклад, команди:

$ chmod ug+rw-x,o-rwx text.txt

та

$ chmod 660 text.txt

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

-rw-rw---- 1 carol carol  765 Dec 20 21:25 text.txt

Тепер давайте розберемося, як працює кожен режим.

Символьний режим

Коли ви описуєте, які дозволи змінити в символьному режимі, перший символ(и) вказує(ють) чиї дозволи ви змінюватимете: дозволи для користувача (u), для групи (g), для інших (o) та/або для всіх трьох разом (a).

Потім вам потрібно вказати команді, що робити: ви можете надати дозвіл (+), скасувати дозвіл (-) або встановити для нього певне значення (=).

Нарешті, ви вказуєте, на який дозвіл ви хочете вплинути: читання (r), запис (w) або виконання (x).

Наприклад, уявіть, що у нас є файл під назвою text.txt з таким набором дозволів:

$ ls -l text.txt
-rw-r--r-- 1 carol carol 765 Dec 20 21:25 text.txt

Якщо ви хочете надати дозволи на запис членам групи, яка володіє файлом, ви повинні використовувати параметр g+w. Це сприймається легше, якщо ви думаєте про це так: “Для групи (g), надайте (+) права на запис (w)”. Отже, команда буде:

$ chmod g+w text.txt

Давайте перевіримо результат за допомогою ls:

$ ls -l text.txt
-rw-rw-r-- 1 carol carol 765 Dec 20 21:25 text.txt

Якщо ви хочете видалити дозволи на читання для власника того самого файлу, подумайте про це так: “Для користувача (u) відкликати (-), дозволи на читання (r)”. Таким чином, параметром є u-r, наприклад:

$ chmod u-r text.txt
$ ls -l text.txt
--w-rw-r-- 1 carol carol 765 Dec 20 21:25 text.txt

Якщо ми хочемо встановити дозволи як rw- для всіх? Тоді подумайте про це так: “Для всіх (a), встановити (=), прочитати (r), записати (w) і не виконувати (-)”. Так:

$ chmod a=rw- text.txt
$ ls -l text.txt
-rw-rw-rw- 1 carol carol 765 Dec 20 21:25 text.txt

Звичайно, можна змінити кілька дозволів одночасно. У цьому випадку відокремлюйте їх комою (,):

$ chmod u+rwx,g-x text.txt
$ ls -lh text.txt
-rwxrw-rw- 1 carol carol 765 Dec 20 21:25 text.txt

Наведений вище приклад можна прочитати так: “Для користувача (u), надайте (+) дозволи на читання, запис і виконання (rwx), для групи (g) відкликайте (- ), дозвіл на виконання (x)”.

Під час запуску для каталогу chmod змінює лише дозволи каталогу. chmod має рекурсивний режим, корисний, коли ви хочете змінити дозволи для “всіх файлів у каталозі та його підкаталогах”. Щоб використовувати це, додайте параметр -R після назви команди та перед дозволами для зміни, наприклад:

$ chmod -R u+rwx Another_Directory/

Цю команду можна прочитати так: “Рекурсивно (-R), для користувача (u), надайте (+) дозволи на читання, запис і виконання (rwx)”.

Warning

Будьте обережні та двічі подумайте, перш ніж використовувати параметр -R, оскільки легко змінити права доступу до файлів і каталогів, які ви насправді не хочете змінювати, особливо для каталогів з великою кількістю файлів і підкаталогів.

Числовий режим

У числовому режимі дозволи вказуються по-іншому: як тризначне числове значення у вісімковій системі числення, системі з основою 8.

Кожен дозвіл має відповідне значення, і вони вказуються в такому порядку: спочатку йде читання (r), що дорівнює 4, потім запис (w), що є 2 і останнім йде (x), представлений 1. Якщо дозволу немає, використовуйте значення нуль (0). Отже, дозвіл rwx буде 7 (4+2+1), а r-x буде 5 (4+0+1).

Перша з трьох цифр у наборі дозволів представляє права для користувача (u), друга для групи (g), а третя для інших (o). Якби ми хотіли встановити дозволи для файлу на rw-rw----, вісімкове значення було б 660:

$ chmod 660 text.txt
$ ls -l text.txt
-rw-rw---- 1 carol carol 765 Dec 20 21:25 text.txt

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

Tip

Якщо значення дозволу непарне, файл, безсумнівно, є виконуваним!

Який синтаксис використовувати? Числовий режим рекомендується, якщо ви хочете змінити дозволи на конкретне значення, наприклад 640 (rw- r-- ---).

Символічний режим є більш корисним, якщо ви хочете змінити лише конкретне значення, незалежно від поточних дозволів для файлу. Наприклад, я можу додати дозволи на виконання для користувача, використовуючи лише chmod u+x script.sh, не враховуючи або навіть торкаючись поточних дозволів для групи та інших.

Зміна права власності на файл

Команда chown використовується для зміни права власності на файл або каталог. Синтаксис досить простий:

chown username:groupname filename

Наприклад, давайте перевіримо файл під назвою text.txt:

$ ls -l text.txt
-rw-rw---- 1 carol carol 1881 Dec 10 15:57 text.txt

Користувач, якому належить файл, — carol, і група також carol. Тепер давайте змінимо групу, яка володіє файлом, на якусь іншу групу, наприклад, students:

$ chown carol:students text.txt
$ ls -l text.txt
-rw-rw---- 1 carol students 1881 Dec 10 15:57 text.txt

Майте на увазі, що користувач, який володіє файлом, не повинен належати до групи, якій належить файл. У наведеному вище прикладі користувач carol не повинен бути членом групи students. Однак він має бути членом групи, щоб передати групове право власності на файл цій групі.

Користувача або групу можна пропустити, якщо ви не бажаєте їх змінювати. Отже, щоб змінити лише групу, яка володіє файлом, ви повинні використовувати chown :students text.txt. Щоб змінити лише користувача, командою буде chown carol text.txt. Крім того, ви можете використати команду chgrp student text.txt, щоб змінити лише групу.

Якщо ви не є системним адміністратором (root), ви не можете змінити право власності на файл, що належить іншому користувачу або групі, до якої ви не належите. Якщо ви спробуєте це зробити, ви отримаєте повідомлення про помилку Operation not permitted (Операція не дозволена).

Запити щодо груп

Перш ніж змінити право власності на файл, може бути корисно знати, які групи існують у системі, які користувачі є членами групи та до яких груп належить користувач. Ці завдання можна виконати за допомогою двох команд, groups і groupmems.

Щоб побачити, які групи існують у вашій системі, просто введіть groups:

$ groups
carol students cdrom sudo dip plugdev lpadmin sambashare

Якщо ви хочете знати, до яких груп належить користувач, додайте ім’я користувача як параметр:

$ groups carol
carol : carol students cdrom sudo dip plugdev lpadmin sambashare

Щоб зробити навпаки, відобразити користувачів, які належать до групи, використовуйте groupmems. Параметр -g визначає групу, а -l перелічить усіх її членів:

$ sudo groupmems -g cdrom -l
carol
Tip

groupmems можна запускати лише від імені root, системного адміністратора. Якщо ви зараз не ввійшли в систему як root, додайте sudo перед командою.

Спеціальні дозволи

Окрім дозволів на читання, запис і виконання для користувача, групи та інших, кожен файл може мати три інші спеціальні дозволи, які можуть змінити спосіб роботи каталогу або виконання програми. Вони можуть бути вказані в символьному або числовому режимі, а саме:

Sticky-біт

Sticky-біт, також званий прапор обмеженого видалення, має вісімкове значення 1 і в символічному режимі представлений t у межах дозволів для інших. Це стосується лише каталогів, а в Linux це забороняє користувачам видаляти чи перейменовувати файл у каталозі, якщо вони не володіють цим файлом чи каталогом.

Каталоги з встановленим sticky-бітом мають t, що замінює x у дозволах для others у виводі ls -l:

$ ls -ld Sample_Directory/
drwxr-xr-t 2 carol carol 4096 Dec 20 18:46 Sample_Directory/

У числовому режимі спеціальні дозволи вказуються за допомогою “4-значної нотації”, причому перша цифра представляє спеціальний дозвіл для дії. Наприклад, щоб встановити stiky-біт (значення 1) для каталогу Another_Directory у числовому режимі з дозволами 755, команда буде виглядати так:

$ chmod 1755 Another_Directory
$ ls -ld Another_Directory
drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory

Set GID

Set GID, також відомий як SGID або Set Group ID-біт, має вісімкове значення 2 і в символьному режимі представлений символом s у дозволах групи. Його можна застосувати до виконуваних файлів або каталогів. Для виконуваних файлів він надає доступ до процесу, який є результатом виконання файлу, доступ до привілеїв групи, якій належить файл. При застосуванні до каталогів кожен файл або каталог, створений в ньому, успадкує групу з батьківського каталогу.

Файли та каталоги з бітом SGID показують s, що замінює x у дозволах для групи у виведенні ls -l:

$ ls -l test.sh
-rwxr-sr-x 1 carol carol 33 Dec 11 10:36 test.sh

Щоб додати дозволи SGID до файлу в символьному режимі, команда буде виглядати так:

$ chmod g+s test.sh
$ ls -l test.sh
-rwxr-sr-x 1 carol root     33 Dec 11 10:36 test.sh

Наступний приклад допоможе вам краще зрозуміти вплив SGID на каталог. Припустимо, що у нас є каталог під назвою Sample_Directory, що належить користувачу carol і групі users, з такою структурою дозволів:

$ ls -ldh Sample_Directory/
drwxr-xr-x 2 carol users 4,0K Jan 18 17:06 Sample_Directory/

Тепер давайте перейдемо до цього каталогу і за допомогою команди touch створимо всередині нього порожній файл. Результат буде наступним:

$ cd Sample_Directory/
$ touch newfile
$ ls -lh newfile
-rw-r--r-- 1 carol carol 0 Jan 18 17:11 newfile

Як бачимо, файл належить користувачеві carol та групі carol. Але, якби для каталогу було встановлено дозвіл SGID, результат був би іншим. Спочатку додамо біт SGID до Sample_Directory і перевіримо результати:

$ sudo chmod g+s Sample_Directory/
$ ls -ldh Sample_Directory/
drwxr-sr-x 2 carol users 4,0K Jan 18 17:17 Sample_Directory/

s на дозволах групи вказує на те, що біт SGID встановлено. Тепер давайте перейдемо до цього каталогу і знову створимо порожній файл за допомогою команди touch:

$ cd Sample_Directory/
$ touch emptyfile
$ ls -lh emptyfile
 -rw-r--r-- 1 carol users 0 Jan 18 17:20 emptyfile

Як бачимо, група, яка володіє файлом, — це users. Це пояснюється тим, що біт SGID змусив файл успадкувати власника групи його батьківського каталогу, а це users.

Set UID

SUID, також відомий як Set User ID, має вісімкове значення 4 і представлений символом s у дозволах користувача у символьному режимі. Це стосується лише файлів і його поведінка подібна до біту SGID, але процес виконуватиметься з привілеями користувача, якому належить файл. Файли з бітом SUID показують s, що замінює x у дозволах для користувача у виведенні ls -l:

$ ls -ld test.sh
-rwsr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh

Ви можете об’єднати кілька спеціальних дозволів в одному параметрі, додавши їх разом. Отже, щоб встановити SGID (значення 2) і SUID (значення 4) у числовому режимі для сценарію test.sh з дозволами 755, ви повинні ввести:

$ chmod 6755 test.sh

Результатом буде:

$ ls -lh test.sh
-rwsr-sr-x 1 carol carol 66 Jan 18 17:29 test.sh
Tip

Якщо ваш термінал підтримує колір, а сьогодні більшість із них підтримує, ви можете швидко побачити, чи встановлені ці спеціальні дозволи, поглянувши на результат ls -l. Для sticky-біта ім’я каталогу може бути показано чорним шрифтом із синім фоном. Те ж саме стосується файлів із бітами SGID (жовтий фон) і SUID (червоний фон). Кольори можуть відрізнятися залежно від того, який дистрибутив Linux і налаштування терміналу ви використовуєте.

Вправи до посібника

  1. Створіть каталог з іменем emptydir за допомогою команди mkdir emptydir. Тепер, використовуючи ls, виведіть дозволи для каталогу emptydir.

  2. Створіть порожній файл з назвою emptyfile за допомогою команди touch emptyfile. Тепер, використовуючи chmod в символьному режимі, додайте дозволи на виконання для власника файлу emptyfile та видаліть дозволи на запис і виконання для всіх інших. Зробіть це, використовуючи лише одну команду chmod.

  3. Які будуть дозволи для файлу під назвою text.txt після використання команди chmod 754 text.txt?

  4. Припустимо, що файл під назвою test.sh є сценарієм оболонки з такими дозволами та правом власності:

    -rwxr-sr-x 1 carol root     33 Dec 11 10:36 test.sh
    • Які дозволи має власник файлу?

    • Якщо користувач john запустить цей сценарій, під якими правами користувача він буде запущений?

    • Використовуючи числовий режим, яким має бути синтаксис chmod, щоб “зняти” спеціальний дозвіл, наданий цьому файлу?

  5. Розглянемо цей файл:

    $ ls -l /dev/sdb1
    brw-rw---- 1 root disk 8, 17 Dec 21 18:51 /dev/sdb1

    Який тип файлу sdb1? Хто може записувати в нього?

  6. Розглянемо наступні 4 файли:

    drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory
    ----r--r-- 1 carol carol    0 Dec 11 10:55 foo.bar
    -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip
    drwxr-sr-x 2 carol users 4,0K Jan 18 17:26 Sample_Directory

    Запишіть відповідні дозволи для кожного файлу та каталогу, використовуючи числові 4-значні позначення.

    Another_Directory
    foo.bar
    HugeFile.zip
    Sample_Directory

Дослідницькі вправи

  1. Спробуйте це у терміналі: створіть порожній файл під назвою emptyfile за допомогою команди touch emptyfile. Тепер “обнуліть” дозволи для файлу з chmod 000 emptyfile. Що станеться, якщо змінити дозволи для emptyfile, передавши лише одне значення для chmod у числовому режимі, наприклад, chmod 4 emptyfile? Що буде, якщо ми використаємо два числа, наприклад chmod 44 emptyfile? Що ми можемо дізнатися про те, як chmod зчитує числове значення?

  2. Чи можете ви виконати файл, для якого у вас є права на виконання, але не на читання (--x)? Поясніть.

  3. Розглянемо дозволи для тимчасового каталогу в системі Linux, /tmp:

    $ ls -l /tmp
    drwxrwxrwt  19 root root  16K Dec 21 18:58 tmp

    Користувач, група та інші мають повні права. Але чи може звичайний користувач видалити будь-які файли всередині цього каталогу? Чому це так?

  4. Файл під назвою test.sh має такі дозволи: -rwsr-xr-x, тобто встановлено біт SUID. Тепер виконайте такі команди:

    $ chmod u-x test.sh
    $ ls -l test.sh
    -rwSr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh

    Що ми зробили? Що означає велика літера S?

  5. Як би ви створили каталог під назвою Box, де всі файли автоматично належать групі users і можуть бути видалені лише користувачем, який їх створив?

Підсумки

Як багатокористувацька система, Linux потребує спробу відстежувати, кому належить кожен файл і хто має до нього доступ. Це забезпечується за допомогою трирівневої системи дозволів, і в цьому уроці ми дізналися все про те, як ця система працює.

У цьому уроці ви дізналися, як використовувати ls для отримання інформації про права доступу до файлів, як керувати правами або змінювати, хто може створювати, видаляти або змінювати файл за допомогою chmod, як у числовій, так і в символьній нотації, а також як змінити право власності на файл файли за допомогою chown та chgrp.

На цьому уроці розглядались наступні команди:

ls

Виводить список файлів, опціонально включаючи такі деталі, як дозволи.

chmod

Змінює права доступу до файлу або каталогу.

chown

Змінює користувача та/або групу файлу чи каталогу.

chgrp

Змінює групу власників файлу або каталогу.

Відповіді до вправ посібника

  1. Створіть каталог з іменем emptydir за допомогою команди mkdir emptydir. Тепер, використовуючи ls, виведіть дозволи для каталогу emptydir.

    Додайте параметр -d до ls, щоб побачити файлові атрибути каталогу, замість того, щоб виводити його вміст. Тому відповідь така:

    ls -l -d emptydir

    Бонусні бали, якщо ви об’єднали два параметри в один, наприклад, ls -ld emptydir.

  2. Створіть порожній файл з назвою emptyfile за допомогою команди touch emptyfile. Тепер, використовуючи chmod в символьному режимі, додайте дозволи на виконання для власника файлу emptyfile та видаліть дозволи на запис і виконання для всіх інших. Зробіть це, використовуючи лише одну команду chmod.

    Подумайте про це так:

    • “Для користувача, який є власником файлу (u), додайте (+) дозволи на виконання (x)”, тому u+x.

    • “Для групи (g) та інших користувачів (o), видаліть (-), дозволи на запис (w) та виконання (x)”, тому go-wx.

      Щоб об’єднати ці два набори дозволів, ми додаємо між ними кому. Отже, кінцевий результат наступний:

      chmod u+x,go-wx emptyfile
  3. Які будуть дозволи для файлу під назвою text.txt після використання команди chmod 754 text.txt?

    Пам’ятайте, що в числовому позначенні кожна цифра представляє набір із трьох дозволів, кожен із яких має відповідне значення: read — це 4, write — 2, execute — 1, а відсутність дозволів — 0. Ми отримуємо значення цифри, додаючи відповідні значення для кожного дозволу. 7 - це 4+2+1 або rwx, 5 - це 4+0+1, тому r-x і 4 - це дозвіл тільки на читання, або r--. Дозволи для text.txt будуть

    rwxr-xr--
  4. Припустимо, що файл під назвою test.sh є сценарієм оболонки з такими дозволами та правом власності:

    -rwxr-sr-x 1 carol root     33 Dec 11 10:36 test.sh
    • Які дозволи має власник файлу?

      Дозволи для власника (від 2-го до 4-го символів у виведенні ls -l) є rwx, тому відповідь: “читати, записувати та виконувати файл”.

    • Якщо користувач john запустить цей сценарій, під якими правами користувача він буде запущений?

      Зверніть увагу на дозволи для групи. Це r-s, що означає, що біт SGID встановлений. Група, якій належить цей файл, є root, тому сценарій, навіть якщо його запустив звичайний користувач, буде запускатися з привілеями користувача.

    • Використовуючи числове позначення, яким має бути синтаксис chmod, щоб “зняти” спеціальний дозвіл, наданий цьому файлу?

      Ми можемо використати команду “unset”, щоб зняти спеціальні дозволи, передавши 4-ю цифру, 0, до chmod. Поточними дозволами є 755, тому команда має бути chmod 0755.

  5. Розглянемо цей файл:

    $ ls -l /dev/sdb1
    brw-rw---- 1 root disk 8, 17 Dec 21 18:51 /dev/sdb1

    Який тип файлу sdb1? Хто може записувати до нього?

    Перший символ виводу команди ls -l показує тип файлу. b – це блоковий пристрій, зазвичай диск (внутрішній або зовнішній), підключений до комп’ютера. Власник (root) і будь-які користувачі групи disk можуть писати на нього.

  6. Розглянемо наступні 4 файли:

    drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory
    ----r--r-- 1 carol carol    0 Dec 11 10:55 foo.bar
    -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip
    drwxr-sr-x 2 carol users 4,0K Jan 18 17:26 Sample_Directory

    Запишіть відповідні дозволи для кожного файлу та каталогу, використовуючи числові 4-значні позначення.

    Відповідні дозволи в числовому позначенні такі:

    Another_Directory

    Відповідь: 1755

    1 для sticky-біту, 755 для звичайних дозволів (rwx для користувача, r-x для групи та інших).

    foo.bar

    Відповідь: 0044

    Відсутні спеціальні дозволи (тому перша цифра 0), немає дозволів для користувача (---) і є дозволи тільки на читання (r—​r--) для групи та інших.

    HugeFile.zip

    Відповідь: 0664

    Відсутні спеціальні дозволи, тому перша цифра 0. 6 (rw-) для користувача та групи, 4 (r--) для інших.

    Sample_Directory

    Відповідь: 2755

    2 для біта SGID, 7 (rwx) для користувача, 5 (r-x) для групи та інших.

Відповіді до дослідницьких вправ

  1. Спробуйте це у терміналі: створіть порожній файл під назвою emptyfile за допомогою команди touch emptyfile. Тепер “обнуліть” дозволи для файлу з chmod 000 emptyfile. Що станеться, якщо змінити дозволи для emptyfile, передавши лише одне значення для chmod у числовому режимі, наприклад, chmod 4 emptyfile? Що буде, якщо ми використаємо два числа, наприклад chmod 44 emptyfile? Що ми можемо дізнатися про те, як chmod зчитує числове значення?

    Пам’ятайте, що ми “обнулили” дозволи для emptyfile. Отже, його початковий стан буде таким:

    ---------- 1 carol carol    0 Dec 11 10:55 emptyfile

    Тепер давайте спробуємо першу команду, chmod 4 emptyfile:

    $ chmod 4 emptyfile
    $ ls -l emptyfile
    -------r-- 1 carol carol 0 Dec 11 10:55 emptyfile

    Дозволи для інших змінено. А що, якщо ми спробуємо ввести дві цифри, наприклад chmod 44 emptyfile?

    $ chmod 44 emptyfile
    $ ls -l emptyfile
    ----r--r-- 1 carol carol 0 Dec 11 10:55 emptyfile

    Тепер це вплинуло на дозволи для групи та інших. З цього можна зробити висновок, що в числовому позначенні chmod читає значення “назад”, від найменшої значущої цифри (інші) до найбільш значущої (користувач). Якщо ви передаєте одну цифру, ви змінюєте дозволи для інших. Двома цифрами ви змінюєте групу та інших, а трьома ви змінюєте користувача, групу та інші, а чотирма цифрами ви змінюєте користувача, групу, інших та спеціальні дозволи.

  2. Чи можете ви виконати файл, для якого у вас є права на виконання, але не на читання (--x)? Поясніть.

    Спочатку відповідь здається очевидною: якщо у вас є дозвіл на виконання, файл повинен запуститися. Однак без дозволу на читання система не може відкрити файл і прочитати його вміст для виконання. Тому без дозволу на читання ви не можете виконати файл, навіть якщо у вас є дозвіл на виконання.

  3. Розглянемо дозволи для тимчасового каталогу в системі Linux, /tmp:

    $ ls -l /tmp
    drwxrwxrwt  19 root root  16K Dec 21 18:58 tmp

    Користувач, група та інші мають повні права. Але чи може звичайний користувач видалити будь-які файли всередині цього каталогу? Чому це так?

    /tmp – це те, що ми називаємо каталогом world writeable, тобто будь-який користувач може писати в нього. Але ми не хочемо, щоб один користувач змінював файли, створені іншими, тому встановлюється sticky-біт_ (як зазначено t у дозволах для інших). Це означає, що користувач може видаляти файли в /tmp, але лише якщо він створив цей файл.

  4. Файл під назвою test.sh має такі дозволи: -rwsr-xr-x, тобто встановлено біт SUID. Тепер виконайте такі команди:

    $ chmod u-x test.sh
    $ ls -l test.sh
    -rwSr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh

    Що ми зробили? Що означає велика літера S?

    Ми видалили дозволи на виконання для користувача, якому належить файл. s (або t) займає місце x при виведенні ls -l, тому системі потрібен спосіб показати, чи має користувач права на виконання чи ні. Це робиться шляхом зміни регістру спеціального символу.

    Літера нижнього регістру s у першій групі дозволів означає, що користувач, якому належить файл, має дозволи на виконання і що встановлено SUID-біт. S у верхньому регістрі означає, що користувач, який володіє файлом, не має (-) дозволів на виконання і що встановлено SUID-біт.

    Те ж саме можна сказати і про SGID. Літера нижнього регістру s у другій групі дозволів означає, що група, якій належить файл, має дозволи на виконання і що встановлено SGID-біт. S у верхньому регістрі означає, що групі, яка володіє файлом, не вистачає (-) дозволів на виконання і що встановлено біт SGID-біт.

    Це також вірно для sticky-біту, представленого t у третій групі дозволів. Нижній регістр t означає, що біт встановлений і що інші мають дозволи на виконання. Верхній регістр T означає, що біт встановлений і що інші не мають дозволів на виконання.

  5. Як би ви створили каталог під назвою Box, де всі файли автоматично належать групі users і можуть бути видалені лише користувачем, який їх створив?

    Це багатоетапний процес. Першим кроком є створення каталогу:

    $ mkdir Box

    Ми хочемо, щоб кожен файл, створений у цьому каталозі, автоматично призначався групі users. Ми можемо зробити це, встановивши цю групу як власника каталогу, а потім встановивши для неї SGID-біт. Нам також потрібно переконатися, що будь-який член групи може записувати до цього каталогу.

    Оскільки нас не хвилює, які інші дозволи, і ми хочемо “змінити” лише спеціальні біти, має сенс використовувати символьний режим:

    $ chown :users Box/
    $ chmod g+wxs Box/

    Зауважте, якщо ваш поточний користувач не належить до групи users, вам доведеться використовувати команду sudo перед командами вище, щоб внести зміни як root.

    Тепер щодо останньої задачі, переконайтеся, що лише користувач, який створив файл, може його видалити. Для цього в каталозі встановлюють sticky-біт (відображається t). Пам’ятайте, що він встановлюється у дозволах для інших (o).

    $ chmod o+t Box/

    Дозволи до каталогу Box мають виглядати так:

    drwxrwsr-t 2 carol users  4,0K Jan 18 19:09 Box

    Звичайно, ви можете вказати SGID і sticky-біт, використовуючи лише одну команду chmod:

    $ chmod g+wxs,o+t Box/

    Бонусні бали, якщо ви так і зробили.

Linux Professional Institute Inc. Всі права захищені. Відвідайте веб-сайт навчальних матеріалів: https://learning.lpi.org
Ця робота ліцензована відповідно до міжнародної ліцензії Creative Commons Attribution-некомерційна-NoDerivatives 4.0.

Наступний Урок

5.4 Спеціальні папки та файли (5.4 Урок 1)

Прочитайте наступний урок

Linux Professional Institute Inc. Всі права захищені. Відвідайте веб-сайт навчальних матеріалів: https://learning.lpi.org
Ця робота ліцензована відповідно до міжнародної ліцензії Creative Commons Attribution-некомерційна-NoDerivatives 4.0.

LPI є некомерційною організацією.

© 2025 Linux Professional Institute (LPI) - це глобальний стандарт сертифікації та організація підтримки кар'єри для професіоналів з відкритим вихідним кодом. Маючи понад 250 000 власників сертифікатів, це перший і найбільший в світі незалежний від постачальників орган з сертифікації Linux і з відкритим вихідним кодом. LPI має сертифікованих фахівців в більш ніж 180 країнах, здає іспити на декількох мовах і має сотні партнерів по навчанню.

Наша мета-надати економічні та творчі можливості для всіх, зробивши сертифікацію знань і навичок з відкритим вихідним кодом загальнодоступною.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Зв'яжіться з нами
  • Політика конфіденційності та Cookie-файлів

Помітили помилку або хочете допомогти поліпшити цю сторінку? Просимо дайте нам знати.

© 1999–2025 Linux Professional Institute Inc. Всі права захищені.