Типы пользователей и Права доступа в Linux

  Дмитрий Бушуев  | 

  Обновл. 15 Мар 2021  | 

 19570

 ǀ   5 

По замыслу создателей, Linux-системы — это многопользовательские операционные системы, т.е. позволяющие нескольким пользователям работать с одной системой, не мешая друг другу. Но пользователи, совместно использующие доступ к файлам, рискуют раскрыть секретную информацию или даже потерять данные, если другие пользователи получат доступ к их файлам или каталогам. Чтобы решить эту проблему, в Linux добавили механизмы владения и прав доступа к файлам (или каталогам), чтобы обозначить, какие полномочия каждый пользователь имеет над определенным файлом (или каталогом).

Типы пользователей в Linux

Каждый файл и каталог в Linux имеет три категории пользователей:

   Владелец — пользователь, создавший файл/каталог.

   Группа — все пользователи, принадлежащие к некоторой заданной группе, будут иметь одинаковые разрешения группы на доступ к файлу. Предположим, у вас есть проект, в котором несколько человек требуют доступа к файлу. Вместо того, чтобы вручную назначать права доступа каждому пользователю, вы можете добавить их всех в одну группу и назначить права доступа группы к файлу таким образом, чтобы только члены данной группы (и никто другой) могли читать или изменять файлы. Даже если вы единственный пользователь системы, вы все равно будете частью многих групп.

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

Другими словами, Владелец — это один пользователь, Группа — это совокупность пользователей, а Остальные — совокупность из всех остальных пользователей системы.

Примечание: В этой статье я буду использовать общий термин «файл», но все действия могут быть применены в том числе и к каталогам.

Теперь представим такую ситуацию: пусть у нас есть два пользователя А и Б, требуется сделать так, чтобы пользователь А не мог повлиять на файл, содержащий жизненно важную информацию/данные пользователя Б. Возникает вопрос: «Как Linux различает данные категории пользователей?». Например, вы не хотите, чтобы ваш коллега, который работает на вашем компьютере с Linux, просматривал ваши изображения. Вот тут-то на сцену и выходят права доступа, определяющие поведение пользователей.

Права доступа/Разрешения


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

   Чтение/Просмотр (Read) — дает право открывать и читать файл. Разрешение на чтение каталога дает возможность просматривать его содержимое.

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

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

Пример на практике

Рассмотрим следующий пример:

Здесь владелец (diego) файла Адреса.txt (который я заранее создал в папке /home/diego/Документы) имеет доступ к его «Просмотру и Изменению», в то время как другие члены его группы (её название совпадает с именем владельца — diego), а также все остальные пользователи, не входящие в эту группу, имеют доступ «Только просмотр». Поэтому они могут открыть файл, но не могут вносить в него изменения.

Чтобы изменить права доступа к файлу, пользователь может открыть выпадающее меню и для каждой категории пользователей выбрать нужное разрешение. Кроме того, вы можете сделать файл Исполняемым, позволяя ему работать как программа, установив флажок "Является выполняемым".

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

Если применить команду ls -l к нашему файлу Адреса.txt, то мы будем наблюдать такой вывод:

Выходные данные содержат следующую информацию:

Рассмотрим детально:

   Тип — обозначает тип объекта. Это может быть обычный файл (-), каталог (d) или ссылка (l).

   Разрешения (права доступа) — в этом поле отображается набор разрешений для файла, о которых мы поговорим ниже.

   Жесткая ссылка — отображает количество ссылок, имеющихся у файла. По умолчанию устанавливается значение 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 mod). Используя эту команду, мы можем установить права доступа (Чтение, Запись, Выполнение) к файлу/каталогу для Владельца, Группы и всех Остальных пользователей.

Синтаксис команды 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

Поскольку вы должны определить разрешения для каждой категории пользователей (Владелец, Группа, Остальные), команда будет включать в себя три числа (каждое из которых представляет собой сумму привилегий).

В качестве примера, давайте посмотрим на наш файл Адреса.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-системах различают три категории пользователей, а именно: Владелец, Группа и Остальные/Другие.

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

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

   Команда chown может изменить владельца файла/каталога.

   Команда chgrp может изменить группу, владеющую файлом.

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (45 оценок, среднее: 5,00 из 5)
Загрузка...

Комментариев: 5

  1. Fray:

    Большое Спасибо за понятно изложенный материал!
    Есть один вопрос касаемо присваивания/изменения прав в Числовом режиме:
    Понимаю что представлять список нескольких видов прав на одного пользователя очень удобно, но если вдруг так получилось, что появилась необходимость писать для каждого права отдельную цифру, без использования объединения, где одной цифрой представляются все виды прав.

    Как в таком случае будет выглядеть синтаксис, если мне захочется изменить права нескольких пользователей, вот так:
    (4-1 —1 -2-) вместо (512)?

  2. Аскар:

    Спасибо вам за подробно изложенный материал! Благодаря вам мне удалось закрыть пробелы в знаний по этой теме. В интернете данная тема излагается кратко, при этом многие моменты упуская из виду, из за чего у меня были проблемы с освоением линукс. Теперь все сдвинулось с мертвой точки в перед!

    1. Фото аватара Дмитрий Бушуев:

      Пожалуйста 🙂

  3. Life_Butterfly:

    Огромная благодарность за материал. Как раз поставил Линукс и вот вместе с вашими уроками учусь работать с терминалом и познаю историю)

    1. Фото аватара Дмитрий Бушуев:

      Всегда пожалуйста 🙂

Добавить комментарий для Life_Butterfly Отменить ответ

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