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 -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
|
Будьте обережні та двічі подумайте, перш ніж використовувати параметр |
Числовий режим
У числовому режимі дозволи вказуються по-іншому: як тризначне числове значення у вісімковій системі числення, системі з основою 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
|
|
Спеціальні дозволи
Окрім дозволів на читання, запис і виконання для користувача, групи та інших, кожен файл може мати три інші спеціальні дозволи, які можуть змінити спосіб роботи каталогу або виконання програми. Вони можуть бути вказані в символьному або числовому режимі, а саме:
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
|
Якщо ваш термінал підтримує колір, а сьогодні більшість із них підтримує, ви можете швидко побачити, чи встановлені ці спеціальні дозволи, поглянувши на результат |
Вправи до посібника
-
Створіть каталог з іменем
emptydir
за допомогою командиmkdir emptydir
. Тепер, використовуючиls
, виведіть дозволи для каталогуemptydir
. -
Створіть порожній файл з назвою
emptyfile
за допомогою командиtouch emptyfile
. Тепер, використовуючиchmod
в символьному режимі, додайте дозволи на виконання для власника файлуemptyfile
та видаліть дозволи на запис і виконання для всіх інших. Зробіть це, використовуючи лише одну командуchmod
. -
Які будуть дозволи для файлу під назвою
text.txt
після використання командиchmod 754 text.txt
? -
Припустимо, що файл під назвою
test.sh
є сценарієм оболонки з такими дозволами та правом власності:-rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
-
Які дозволи має власник файлу?
-
Якщо користувач
john
запустить цей сценарій, під якими правами користувача він буде запущений? -
Використовуючи числовий режим, яким має бути синтаксис chmod, щоб “зняти” спеціальний дозвіл, наданий цьому файлу?
-
-
Розглянемо цей файл:
$ ls -l /dev/sdb1 brw-rw---- 1 root disk 8, 17 Dec 21 18:51 /dev/sdb1
Який тип файлу
sdb1
? Хто може записувати в нього? -
Розглянемо наступні 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
-
Дослідницькі вправи
-
Спробуйте це у терміналі: створіть порожній файл під назвою
emptyfile
за допомогою командиtouch emptyfile
. Тепер “обнуліть” дозволи для файлу зchmod 000 emptyfile
. Що станеться, якщо змінити дозволи дляemptyfile
, передавши лише одне значення дляchmod
у числовому режимі, наприклад,chmod 4 emptyfile
? Що буде, якщо ми використаємо два числа, наприкладchmod 44 emptyfile
? Що ми можемо дізнатися про те, як chmod зчитує числове значення? -
Чи можете ви виконати файл, для якого у вас є права на виконання, але не на читання (
--x
)? Поясніть. -
Розглянемо дозволи для тимчасового каталогу в системі Linux,
/tmp
:$ ls -l /tmp drwxrwxrwt 19 root root 16K Dec 21 18:58 tmp
Користувач, група та інші мають повні права. Але чи може звичайний користувач видалити будь-які файли всередині цього каталогу? Чому це так?
-
Файл під назвою
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
? -
Як би ви створили каталог під назвою
Box
, де всі файли автоматично належать групіusers
і можуть бути видалені лише користувачем, який їх створив?
Підсумки
Як багатокористувацька система, Linux потребує спробу відстежувати, кому належить кожен файл і хто має до нього доступ. Це забезпечується за допомогою трирівневої системи дозволів, і в цьому уроці ми дізналися все про те, як ця система працює.
У цьому уроці ви дізналися, як використовувати ls
для отримання інформації про права доступу до файлів, як керувати правами або змінювати, хто може створювати, видаляти або змінювати файл за допомогою chmod
, як у числовій, так і в символьній нотації, а також як змінити право власності на файл файли за допомогою chown
та chgrp
.
На цьому уроці розглядались наступні команди:
ls
-
Виводить список файлів, опціонально включаючи такі деталі, як дозволи.
chmod
-
Змінює права доступу до файлу або каталогу.
chown
-
Змінює користувача та/або групу файлу чи каталогу.
chgrp
-
Змінює групу власників файлу або каталогу.
Відповіді до вправ посібника
-
Створіть каталог з іменем
emptydir
за допомогою командиmkdir emptydir
. Тепер, використовуючиls
, виведіть дозволи для каталогуemptydir
.Додайте параметр
-d
доls
, щоб побачити файлові атрибути каталогу, замість того, щоб виводити його вміст. Тому відповідь така:ls -l -d emptydir
Бонусні бали, якщо ви об’єднали два параметри в один, наприклад,
ls -ld emptydir
. -
Створіть порожній файл з назвою
emptyfile
за допомогою командиtouch emptyfile
. Тепер, використовуючиchmod
в символьному режимі, додайте дозволи на виконання для власника файлуemptyfile
та видаліть дозволи на запис і виконання для всіх інших. Зробіть це, використовуючи лише одну командуchmod
.Подумайте про це так:
-
“Для користувача, який є власником файлу (
u
), додайте (+
) дозволи на виконання (x
)”, томуu+x
. -
“Для групи (
g
) та інших користувачів (o
), видаліть (-
), дозволи на запис (w
) та виконання (x
)”, томуgo-wx
.Щоб об’єднати ці два набори дозволів, ми додаємо між ними кому. Отже, кінцевий результат наступний:
chmod u+x,go-wx emptyfile
-
-
Які будуть дозволи для файлу під назвою
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--
-
Припустимо, що файл під назвою
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
.
-
-
Розглянемо цей файл:
$ ls -l /dev/sdb1 brw-rw---- 1 root disk 8, 17 Dec 21 18:51 /dev/sdb1
Який тип файлу
sdb1
? Хто може записувати до нього?Перший символ виводу команди
ls -l
показує тип файлу.b
– це блоковий пристрій, зазвичай диск (внутрішній або зовнішній), підключений до комп’ютера. Власник (root
) і будь-які користувачі групиdisk
можуть писати на нього. -
Розглянемо наступні 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
) для групи та інших.
Відповіді до дослідницьких вправ
-
Спробуйте це у терміналі: створіть порожній файл під назвою
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
читає значення “назад”, від найменшої значущої цифри (інші) до найбільш значущої (користувач). Якщо ви передаєте одну цифру, ви змінюєте дозволи для інших. Двома цифрами ви змінюєте групу та інших, а трьома ви змінюєте користувача, групу та інші, а чотирма цифрами ви змінюєте користувача, групу, інших та спеціальні дозволи. -
Чи можете ви виконати файл, для якого у вас є права на виконання, але не на читання (
--x
)? Поясніть.Спочатку відповідь здається очевидною: якщо у вас є дозвіл на виконання, файл повинен запуститися. Однак без дозволу на читання система не може відкрити файл і прочитати його вміст для виконання. Тому без дозволу на читання ви не можете виконати файл, навіть якщо у вас є дозвіл на виконання.
-
Розглянемо дозволи для тимчасового каталогу в системі Linux,
/tmp
:$ ls -l /tmp drwxrwxrwt 19 root root 16K Dec 21 18:58 tmp
Користувач, група та інші мають повні права. Але чи може звичайний користувач видалити будь-які файли всередині цього каталогу? Чому це так?
/tmp
– це те, що ми називаємо каталогом world writeable, тобто будь-який користувач може писати в нього. Але ми не хочемо, щоб один користувач змінював файли, створені іншими, тому встановлюється sticky-біт_ (як зазначеноt
у дозволах для інших). Це означає, що користувач може видаляти файли в/tmp
, але лише якщо він створив цей файл. -
Файл під назвою
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
означає, що біт встановлений і що інші не мають дозволів на виконання. -
Як би ви створили каталог під назвою
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/
Бонусні бали, якщо ви так і зробили.