104.5 Урок 1
Сертифікат: |
LPIC-1 |
---|---|
Версія: |
5.0 |
Розділ: |
104 Пристрої, файлові системи Linux, стандарт ієрархії файлової системи |
Тема: |
104.5 Керування дозволами та правом власності на файли |
Урок: |
1 з 1 |
Вступ
Будучи багатокористувацькою системою, Linux потребує певного способу відстежувати, кому належить кожен файл і чи дозволяється користувачеві виконувати дії з файлом. Це робиться для забезпечення конфіденційності користувачів, які можуть захотіти зберегти конфіденційність вмісту своїх файлів, а також для забезпечення співпраці, роблячи певні файли доступними для кількох користувачів.
Це здійснюється за допомогою трирівневої системи дозволів. Кожен файл на диску належить користувачу та групі користувачів і має три набори дозволів: один для його власника, один для групи, якій належить файл, і один для всіх інших. У цьому уроці ви дізнаєтеся, як дізнатися дозволи для файлу, значення цих дозволів і як ними керувати.
Запит інформації про файли та каталоги
Команда ls
використовується для отримання переліку вмісту будь-якого каталогу. У цій базовій формі ви отримаєте лише імена файлів:
$ ls Another_Directory picture.jpg text.txt
Але для кожного файлу доступно набагато більше інформації, включаючи його тип, розмір, право власності тощо. Щоб побачити цю інформацію, ви повинні, використовуючи параметр -l
, отримати дані у «довгому форматі» за допомогою команди ls
:
$ 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
.
-
Tip
|
Також часто можна почути, що набір дозволів інші називаються дозволами world, або «Усі інші у світі мають ці дозволи». |
-
третій та четвертий стовпці показують інформацію про право власності: відповідно користувача та групи, які володіють файлом.
-
Сьомий і останній стовпці показують назву файлу.
Другий стовпець показує кількість жорстких посилань, що вказують на цей файл. П’ятий стовпець показує розмір файлу. У шостій колонці показано дату та час останньої зміни файлу. Але ці колонки не актуальні для поточної теми.
А як щодо каталогів?
Якщо ви спробуєте запитати інформацію про каталог за допомогою 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
(символьне покликання)-
Цей «файл» є вказівником на інший файл або каталог в іншому місці файлової системи.
На додаток до цих, є три інші типи файлів, про які ви повинні принаймні знати, але це виходить за рамки уроку:
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. Це означає дозвіл на створення або видалення файлів у каталозі.
Майте на увазі, що ви не можете зробити ці зміни лише за допомогою дозволу write, для цього також потрібен дозвіл execute (
x
), щоб перейти до каталогу. x
-
Позначає execute і має вісімкове значення
1
. Це означає дозвіл на вхід до каталогу, але не на перегляд його вмісту (для цього потрібенr
).
Остання частина про каталоги може здатися дещо заплутаною. Уявімо, наприклад, що у вас є каталог під назвою Another_Directory
з такими дозволами:
$ ls -ld Another_Directory/ d--x--x--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
може отримати доступ до файлів всередині каталогу, якщо він має правильні дозволи для відповідного файлу. Припустимо, що користувач має повні права (rwx
) для сценарію hello.sh
. Потім він може запустити сценарій, навіть якщо він не може прочитати вміст каталогу, що містить його, якщо він знає повне ім’я файлу:
$ sh Another_Directory/hello.sh Hello LPI World!
Як ми вже говорили раніше, дозволи вказуються послідовно: спочатку для власника файлу, потім для групи власників, а потім для інших користувачів. Щоразу, коли хтось намагається виконати дію з файлом, дозволи перевіряються таким самим чином.
Спочатку система перевіряє, чи є поточний користувач власником файлу, і якщо це так, вона застосовує лише перший набір дозволів. В іншому випадку вона перевіряє, чи належить поточний користувач до групи, яка володіє файлом. У цьому випадку вона застосовує лише другий набір дозволів. У будь-якому іншому випадку система застосує третій набір дозволів.
Це означає, що якщо поточний користувач є власником файлу, діють лише дозволи власника, навіть якщо дозволи групи чи інші дозволи є більш повними, ніж дозволи власника.
Змінення дозволів на файл
Команда chmod
використовується для зміни дозволів для файлу і приймає принаймні два параметри: перший описує, які дозволи потрібно змінити, а другий вказує на файл або каталог, для якого буде внесено зміну. Майте на увазі, що лише власник файлу або системний адміністратор (root) може змінити дозволи на файл.
Дозволи на зміну можна описати двома різними способами або «режимами».
Перший, який називається символьний режим, пропонує детальний контроль, що дозволяє додавати або прибирати один дозвіл, не змінюючи інші дозволи в наборі. Інший режим, який називається вісімковий режим, легше запам’ятати та швидше використовувати, якщо ви хочете встановити всі значення дозволів одночасно.
Обидва режими призведуть до однакового кінцевого результату. Так, наприклад, команди:
$ 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
або просто chown carol text.txt
. Крім того, ви можете використати команду chgrp student text.txt
.
Якщо ви не є системним адміністратором (root), ви не можете змінити право власності на файл іншому користувачу або групі, до якої ви не належите. Якщо ви спробуєте це зробити, ви отримаєте повідомлення про помилку Operation not permitted
(Операція не дозволена).
Групи запитів
Перш ніж змінити право власності на файл, може бути корисно знати, які групи існують у системі, які користувачі є членами групи та до яких груп належить користувач.
Щоб побачити, які групи існують у вашій системі, введіть getent group
. Вихідні дані будуть подібними до цього (вихідні дані були скорочені):
$ getent group root:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4:syslog,rigues tty:x:5:rigues disk:x:6: lp:x:7: mail:x:8: news:x:9: uucp:x:10:rigues
Якщо ви хочете знати, до яких груп належить користувач, додайте ім’я користувача як параметр до groups
:
$ groups carol carol : carol students cdrom sudo dip plugdev lpadmin sambashare
Щоб зробити навпаки (подивитися, які користувачі належать до групи) використовуйте groupmems
. Параметр -g
визначає групу, а -l
виведе список усіх її членів:
# groupmems -g cdrom -l carol
Tip
|
|
Дозволи за замовчуванням
Давайте спробуємо провести експеримент. Відкрийте вікно терміналу та створіть порожній файл за допомогою такої команди:
$ touch testfile
Тепер давайте подивимося на дозволи для цього файлу. Вони можуть відрізнятися у вашій системі, але припустимо, що вони виглядають так:
$ ls -lh testfile -rw-r--r-- 1 carol carol 0 jul 13 21:55 testfile
Дозволи rw-r—r--
: читати та писати для користувача та читати для групи та інших, або 644
у вісімковому режимі. Тепер спробуйте створити каталог:
$ mkdir testdir $ ls -lhd testdir drwxr-xr-x 2 carol carol 4,0K jul 13 22:01 testdir
Тепер дозволи rwxr-xr-x
: читати, писати та виконувати для користувача, читати та виконувати для групи та інших, або 755
у вісімковому режимі.
Незалежно від того, де ви знаходитесь у файловій системі, кожен файл або каталог, який ви створюєте, отримають ті самі дозволи. Ви коли-небудь замислювалися, звідки вони беруться?
Вони походять із user mask або umask
, який встановлює дозволи за замовчуванням для кожного створеного файлу. Ви можете перевірити поточні значення за допомогою команди umask
:
$ umask 0022
Але це не схоже на rw-r—r--
або навіть на 644
. Можливо, нам варто спробувати з параметром -S
, щоб отримати вихід у символьному режимі:
$ umask -S u=rwx,g=rx,o=rx
Це ті самі дозволи, які отримав наш тестовий каталог в одному з наведених вище прикладів. Але чому, коли ми створювали файл, дозволи були іншими?
Ну, немає сенсу встановлювати глобальні дозволи на виконання для всіх за замовчуванням, чи не так? Каталогам потрібні дозволи на виконання (інакше ви не зможете увійти до них), але файлам ні, тому вони їх не отримують. Звідси rw-r—r--
.
Окрім відображення дозволів за замовчуванням, umask
також можна використовувати, щоб змінити їх для поточного сеансу оболонки. Наприклад, якщо ми використовуємо команду:
$ umask u=rwx,g=rwx,o=
Кожен новий каталог успадкує дозволи rwxrwx---
, а кожен файл rw-rw----
(оскільки вони не отримують дозволів на виконання). Якщо ви повторите наведені вище приклади, щоб створити testfile
і testdir
і перевірити дозволи, ви повинні отримати:
$ ls -lhd test* drwxrwx--- 2 carol carol 4,0K jul 13 22:25 testdir -rw-rw---- 1 carol carol 0 jul 13 22:25 testfile
І якщо ви перевірите umask
без параметра -S
(символьний режим), ви отримаєте:
$ umask 0007
Результат не виглядає знайомим, оскільки використані значення відрізняються. Ось таблиця з кожним параметром і відповідним значенням:
Значення | Дозвіл на файли | Дозвіл на каталоги |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Як бачите, 007
відповідає rwxrwx---
, саме так, як ми просили. Початкові нулі можна ігнорувати.
Спеціальні дозволи
Окрім дозволів на читання, запис і виконання для користувача, групи та інших, кожен файл може мати три інші спеціальні дозволи, які можуть змінити спосіб роботи каталогу або виконання програми. Вони можуть бути вказані в символьному або вісімковому режимі, а саме:
Sticky-біт
Sticky-біт, також називається прапорцем обмеженого видалення, має вісімкове значення 1
і в символьному режимі представлений символом t
у межах дозволів для інших. Це стосується лише каталогів і не впливає на звичайні файли. У Linux це забороняє користувачам видаляти або перейменовувати файл у каталозі, якщо вони не володіють цим файлом або каталогом.
Каталоги з встановленим sticky-бітом показують t
, що замінює x
у дозволах для інших на виведенні ls -l
:
$ ls -ld Sample_Directory/ drwxr-xr-t 2 carol carol 4096 Dec 20 18:46 Sample_Directory/
У вісімковому режимі спеціальні дозволи вказуються за допомогою 4-значного числа, причому перша цифра представляє спеціальний дозвіл, який потрібно встановити. Наприклад, щоб встановити sticky-біт (значення 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 root 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
. -
Якими будуть дозволи за замовчуванням для файлу, якщо значення
umask
встановлено на027
? -
Припустимо, що файл під назвою
test.sh
є сценарієм оболонки з такими дозволами та правом власності:-rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
-
Які дозволи має власник файлу?
-
Використовуючи вісімкове позначення, який має бути синтаксис 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 зчитує числове значення? -
Розглянемо дозволи для тимчасового каталогу в системі 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
і можуть бути видалені лише користувачем, який їх створив?
Підсумки
У цьому уроці ви дізналися, як використовувати ls
для отримання (і декодування) інформації про права доступу до файлів, як керувати або змінювати те, хто може створювати, видаляти або змінювати файл за допомогою chmod
, як у вісімковому, так і в символьному режимах, як змінити право власності на файли за допомогою chown
і chgrp
і як дізнатися та змінити маску дозволів за замовчуванням для файлів і каталогів за допомогою umask
На цьому уроці обговорювалися такі команди:
ls
-
Виводить список файлів, опціонально включаючи такі деталі, як дозволи.
chmod
-
Змінює права доступу до файлу або каталогу.
chown
-
Змінює користувача та/або групу файлу чи каталогу.
chgrp
-
Змінює групу власників файлу або каталогу.
umask
-
Виводить або встановлює маску дозволів за замовчуванням для файлів і каталогів
Відповіді на вправи до посібника
-
Створіть каталог з ім’ям
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
-
-
Якими будуть дозволи за замовчуванням для файлу, якщо значення
umask
встановлено на027
?Дозволи будуть
rw-r-----
-
Припустимо, що файл під назвою
test.sh
є сценарієм оболонки з такими дозволами та правом власності:-rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
-
Які дозволи має власник файлу?
Дозволи для власника (від 2-го до 4-го символів у виведенні
ls -l
) єrwx
, тому відповідь: «читати, записувати та виконувати файл». -
Використовуючи вісімкове позначення, який має бути синтаксис chmod, щоб «зняти» спеціальний дозвіл, наданий цьому файлу?
Ми можемо «зняти» спеціальні дозволи, передавши 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
для stiky-біту,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
зчитує значення «справа наліво», від найменшої значущої цифри (інші) до найбільш значущої (користувач). Якщо ви передаєте одну цифру, ви змінюєте дозволи для інших. Двома цифрами ви змінюєте групу та інші, а трьома ви змінюєте користувач, група та інші, а чотирма цифрами ви змінюєте користувач, група, інші та спеціальні дозволи. -
Розглянемо дозволи для тимчасового каталогу в системі Linux,
/tmp
:$ ls -l /tmp drwxrwxrwt 19 root root 16K Dec 21 18:58 tmp
Користувач, група та інші мають повні права. Але чи може звичайний користувач видалити будь-які файли всередині цього каталогу? Чому це так?
/tmp
- це те, що ми називаємо каталогом, який доступний будь-кому у світі для запису, тобто будь-який користувач може писати до нього. Але ми не хочемо, щоб один користувач зіпсував файли, створені іншими, тому встановлюється 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-біт встановлено.Це також вірно для stiky-біту, представленого
t
у третій групі дозволів.t
у нижньому регістрі означає, що встановлено stiky-біт і що інші мають дозволи на виконання. Верхній регістрT
означає, що встановлено stiky-біт і що інші не мають дозволів на виконання. -
Як би ви створити каталог під назвою
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/
Бонусні бали, якщо ви про це подумали.