Все буде Україна!

Типи користувачів і Права доступу в Linux

  Юрій  | 

  Оновл. 10 Тра 2022  | 

 62

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

Типи користувачів у Linux

Кожний файл та каталог в Linux мають три категорії користувачів:

   Власник — користувач, який створив файл/каталог.

   Група — всі користувачі, що належать до певної заданої групи, матимуть однакові дозволи на доступ до файлу. Припустимо, у вас є проект, де кілька людей вимагають доступу до файлу. Замість того, щоб вручну призначати права доступу кожному користувачеві, ви можете додати їх усіх в одну групу і призначити права доступу групи до файлу таким чином, щоб тільки члени цієї групи (і ніхто інший) могли читати чи змінювати файли. Навіть якщо ви єдиний користувач системи, ви все одно будете частиною багатьох груп.

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

Іншими словами, Власник — це один користувач, Група — це декілька користувачів, а Інші — сукупність усіх інших, що залишилися, користувачів системи.

Примітка: У цій статті я використовуватиму загальний термін “файл”, але всі дії можуть бути застосовані в тому числі і до каталогів.

Тепер уявіть наступну ситуацію: “Є два користувачі — А і Б. Потрібно зробити так, щоб користувач А не міг вплинути на файл, що містить життєво важливу інформацію/дані користувача Б. Виникає питання: “Як Linux розрізняє дані категорії користувачів?”. Наприклад, ви не хочете, щоб ваш колега, який працює на вашому комп’ютері з Linux, переглядав ваші зображення. Ось тут і стають у нагоді права доступу, що визначають поведінку користувачів.

Права доступу/Дозволи

Кожен файл і каталог в Linux має наступні три типи дозволів для всіх трьох вищеописаних категорій користувачів:

   Читання/Перегляд (Read) — дає право відкривати та читати файл. Дозвіл на читання каталогу дає можливість переглядати його вміст.

   Запис/Зміна (Write) — дає право змінювати вміст файлу. Дозвіл на запис у каталог дає право додавати, видаляти та перейменовувати файли, що зберігаються в каталозі. Розглянемо сценарій, у якому ви маєте дозвіл на запис у файл, але немає дозволу на запис у каталог, де зберігається файл. Ви зможете змінити вміст файлу, але не зможете перейменувати, перемістити або видалити файл із каталогу.

   Виконання (eXecute) — у Linux ви не зможете запустити програму, якщо не задано дозвіл на виконання, але ви все одно зможете бачити/змінювати програмний код (за умови, що встановлені дозволи на читання та запис).

Приклад на практиці

Розглянемо наступний приклад:

Тут власник (diego) файлу Адреса.txt (який я раніше створив у папці /home/diego/Документы) має доступ до його “Просмотру и Изменению”, в той час як інші члени його групи (її назва співпадає з іменем власника — diego), а також всі інші користувачі, які не входять в цю групу, мають доступ “Только просмотр”. Тому вони можуть відкрити файл, але не можуть вносити в нього зміни.

Щоб змінити права доступу до файлу, користувач може відкрити випадаюче меню і для кожної категорії користувачів вибрати потрібний дозвіл. Крім того, ви можете зробити файл Виконуваним, дозволяючи йому працювати як програма, встановивши прапорець "Является выполняемым".

Примітка: Команда ls використовується для виводу вмісту каталогів та інформації про файли. Ключ –l використовується для виводу детальної інформації про права доступу, власника, розмір файлу тощо.

Якщо застосувати команду ls -l до нашого файлу Адреса.txt, то ми отримаємо наступне:

Вихідні дані містять наступну інформацію:

Розглянемо детально:

   Тип — означає тип об’єкту. Це може бути звичайний файл (-), каталог (d) або посилання (l).

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

   Жорстке посилання — відображає кількість посилань, які є у файла. За замовчуванням встановлюється значення 1.

   Власник — ім’я користувача, який володіє файлом. Часто (але не завжди) співпадає з іменем його творця.

   Група — група, яка має доступ до файлу. Одночасно володіти файлом може тільки 1 група.

   Розмір — розмір файлу в байтах.

   Дата модифікації — дата і час останньої зміни файлу.

   Ім’я файлу.

Інформація про права доступу до файлу згрупована у рядок символів, перед яким стоїть -. При цьому кожна літера задає певний дозвіл, а саме:

   r (read) — дозвіл на читання/перегляд файлу;

   w (write) — дозвіл на запис/зміну файлу;

   x (execute) — дозвіл на виконання файлу;

    — немає набору дозволів.

Користувачі, які мають дозвіл на Читання, можуть бачити вміст файлу (або файлів у каталозі), однак вони не можуть змінити його (або додати/видалити файли в каталозі). З іншого боку, ті, хто має права на Запис, можуть редагувати (додавати та видаляти) файли. Нарешті, можливість Виконання означає, що користувач може запустити файл. Ця опція переважно використовується для запуску скриптів.

Дозволи завжди йдуть саме в такому порядку, тобто rwx. А далі вони встановлюються для всіх трьох категорій користувачів в порядку Власник, Група та Інші:

Отже, якщо ви озброїтеся вищенаведеною картинкою і подивитеся на результат виконання команди ls –l, то зможете сказати такі речі про права доступу до файлу Адреса.txt:

-rw-r--r-- 1 diego diego 2 фев 17 21:15 /home/diego/Документы/Адреса.txt

Що ми бачимо?

   Власник diego має права на читання та запис у файл.

   Група diego має права тільки на читання.

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

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

diego@debian:~$ ls -l /bin/ping
-rwxr-xr-x 1 root root 77432 фев 2 20:49 /bin/ping

Що ми бачимо?

   Власником файлу є користувач root, який має права доступу на читання, зміну та виконання файлу (rwx).

   Всі члени групи root мають права на читання та виконання файлу (r-x).

   Інші користувачі також мають права на читання та виконання файлу (r-x).

Зауважу, що один користувач може бути членом кількох груп, але лише основна група користувача може бути призначена файлу. Основну групу користувача можна знайти за допомогою команди id, наприклад id -gn <ім'я_користувача>. Залиште ім'я_користувача порожнім, якщо хочете отримати інформацію про власну основну групу.

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

Зміна прав доступу. Команда chmod

Уявіть, що ви не бажаєте, щоб ваш колега бачив ваші особисті зображення. Це можна зробити шляхом зміни прав доступу до файлів за допомогою команди chmod (скор. від change mode”). Використовуючи цю команду, ми можемо встановити права доступу (Читання, Запис, Виконання) до файлу/каталогу для Власника, Групи та Інших користувачів.

Синтаксис команди chmod наступний:

chmod [дозволи] [ім'я файлу]

Існує два способи використання команди chmod: символьний та числовий.

Використання команди chmod у символьному режимі

Для встановлення параметрів дозволів для кожної окремої категорії користувачів застосовуються наступні символи:

   u — власник;

   g — група;

   o — інші користувачі;

   a — для всіх трьох категорій (Власник + Група + Інші).

А також використовуються наступні математичні символи:

   + — додання дозволів;

    — видалення дозволів;

   = — перевизначення існуючих дозволів новим значенням.

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

   читання, запис та виконання для Власника;

   читання та запис для членів Групи;

   читання для Інших користувачів.

chmod u=rwx,g=rw,o=r /home/diego/Документы/Адреса.txt

В результаті отримуємо:

diego@debian:~$ chmod u=rwx,g=rw,o=r /home/diego/Документы/Адреса.txt
diego@debian:~$ ls -la /home/diego/Документы/Адреса.txt
-rwxrw-r-- 1 diego diego 2 фев 17 21:15 /home/diego/Документы/Адреса.txt

Як бачите, права доступу до файлу змінились з -rw-r--r-- на -rwxrw-r--, що нам і було потрібно.

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

chmod o-r /home/diego/Документы/Адреса.txt

Результат:

diego@debian:~$ chmod o-r /home/diego/Документы/Адреса.txt
diego@debian:~$ ls -la /home/diego/Документы/Адреса.txt
-rwxrw---- 1 diego diego 2 фев 17 21:15 /home/diego/Документы/Адреса.txt

Права доступу до файлу змінились з -rwxrw-r-- на -rwxrw----.

Подумавши, ми вирішуємо дати повні права (за винятком права на виконання) абсолютно всім користувачам системи, і виконуємо команду:

diego@debian:~$ chmod a+rw-x /home/diego/Документы/Адреса.txt

Результат:

diego@debian:~$ chmod a+rw-x /home/diego/Документы/Адреса.txt
diego@debian:~$ ls -la /home/diego/Документы/Адреса.txt
-rw-rw-rw- 1 diego diego 2 фев 17 21:15 /home/diego/Документы/Адреса.txt

Права доступу до файлу змінились з -rwxrw---- на -rw-rw-rw-. Всі користувачі можуть читати та змінювати наш файл, але ні в кого з них немає прав на його виконання.

Використання команди chmod у числовому режимі

Інший спосіб вказати права доступу до файлу — застосувати команду chmod у числовому режимі. У цьому режимі кожен дозвіл файлу представлено деяким числом (у вісімковій системі числення):

   r (читання/перегляд) = 4

   w (запис/зміна) = 2

   x (виконання) = 1

    (не задано) = 0

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

Число Тип дозволу Символ
0 Немає дозволу −−−
1 Виконання −−x
2 Запис −w−
3 (2+1) Запис + Виконання −wx
4 Читання r−−
5 (4+1) Читання + Виконання r−x
6 (4+2) Читання + Запис rw−
7 (4+2+1) Читання + Запис + Виконання rwx

Оскільки ви повинні визначити дозволи для кожної категорії користувачів (Власник, Група, Інші), команда включатиме 3 числа (кожне з яких являє собою суму привілеїв).

Як приклад, давайте візьмемо наш файл Адреса.txt, права якого, я нагадаю, ми налаштували (у символьному режимі) за допомогою команди:

chmod u=rwx,g=rw,o=r /home/diego/Документы/Адреса.txt

Ті самі параметри дозволів, але вже у числовому форматі, можна визначити так:

chmod 764 /home/diego/Документы/Адреса.txt

Тепер змінимо дозволи файлу так, щоб Власник міг читати та писати, Група — тільки читати, а у Інших — взагалі не було прав доступу. Судячи з вищенаведеної таблиці, для Власника числове представлення прав доступу відповідає числу 6 (rw-), для Групи — числу 4 (r--), а для Інших 0 (---). Разом повинно вийти 640 (rw-r-----):

diego@debian:~$ chmod 640 /home/diego/Документы/Адреса.txt

Результат:

diego@debian:~$ chmod 640 /home/diego/Документы/Адреса.txt
diego@debian:~$ ls -la /home/diego/Документы/Адреса.txt
-rw-r----- 1 diego diego 2 фев 17 21:15 /home/diego/Документы/Адреса.txt

Як бачите, права змінились з -rwxrwr-- на -rw-r-----, цього ми і хотіли.

Зміна власника та групи

Крім зміни прав доступу до файлів, ви можете зіткнутися із ситуацією необхідності зміни власника файлу або навіть усієї групи. Виконання будь-якого з цих завдань вимагає від вас наявності привілеїв суперкористувача (root). Для цього я застосовуватиму утиліту sudo.

Щоб змінити власника файлу, необхідно застосувати команду chown (скор. від change owner”), синтаксис якої доволі простий:

chown [ім'я_користувача] [ім'я_файлу]

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

chown [ім'я_користувача]:[група] [ім'я_файлу]

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

chown :[група] [ім'я_файлу]

Або ж використовуйте команду chgrp (скор. від change group), яка спеціально застосовується для зміни власника групи файлу або каталогу:

chgrp [група] [ім'я_файлу]

Тепер давайте змінимо власника та групу файлу Адреса.txt на користувача root і групу root (при цьому вам можуть знадобитися права суперкористувача):

diego@debian:~$ sudo chown root:root /home/diego/Документы/Адреса.txt
[sudo] пароль для diego:
diego@debian:~$ ls -la /home/diego/Документы/Адреса.txt
-rw-r----- 1 root root 2 фев 17 21:15 /home/diego/Документы/Адреса.txt
diego@debian:~$

Як ви можете бачити, власник і група файлу змінились з diego:diego на root:root.

Зауважте, що мені довелося використати sudo з chown. Це тому, що тут задіяний користувач root, і, щоб мати з ним працювати, мені знадобилися права суперкористувача.

Чи є пріоритет у правах доступу до файлів?

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

----r--rw- 1 diego coolgroup 2 фев 17 21:15 /home/diego/Документы/Адреса.txt

Тепер, якщо користувач diego спробує прочитати файл за допомогою команди cat або less, чи зможе він це зробити? Відповідь — ні, тому що у нього немає дозволу на читання.

Але як же так? Адже користувач diego є частиною групи coolgroup, а група має доступ до читання. І навіть усі інші користувачі мають дозвіл на читання та запис! Це повинно означати, що кожен (включаючи користувача diego) може читати та змінювати файл, чи не так? Неправильно!

У Linux-системах пріоритет зчитування прав доступу віддається спочатку Власнику, потім Групі, а вже після цього Іншим. Система визначає, хто ініціював процес (cat або less у нашому прикладі). Якщо користувач, який ініціював процес, також є Власником файлу, то зчитуються біти дозволів для Власника.

Якщо процес ініціював не Власник файлу, то система перевіряє Групу. Якщо користувач, який ініціював процес, знаходиться в тій самій Групі, що і Група-власник файлу, то зчитуються біти дозволів для Групи.

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

Підказки

   Файл /etc/group містить всі групи, які визначені в системі.

   Ви можете використати команду groups, щоб знайти всі групи, членом яких ви є:

   Ви можете використати команду newgrp для того, щоб працювати в якості члена групи, відмінної від вашої заданої за замовчуванням (групи):

   Дві групи не можуть володіти одним і тим же файлом.

   У Linux немає вкладених груп. Одна група не може бути підгрупою іншої.

   xвиконання каталогу означає дозвіл “увійти” в каталог та отримати можливий доступ до його підкаталогів.

Висновки

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

   У Linux-системах розрізняють 3 категорії користувачів, а саме: Власник, Група та Інші.

   Права доступу до файлів діляться на права Читання/Перегляду, Запису/Зміни та Виконання, які позначаються буквами r, w і x.

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

   Команда chown може змінювати власника файлу/каталогу.

   Команда chgrp може змінювати групу, яка володіє файлом.

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (1 оцінок, середня: 5,00 з 5)
Loading...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *