Включите исполнение JavaScript в браузере, чтобы запустить приложение.
25 ноя 2024

Права пользователя в Linux

Узнайте, как управлять правами доступа в Linux! 🧑‍💻 Пошаговое руководство: как просмотреть, изменить и назначить права пользователям на файлы и директории. Полезные команды и примеры — в статье GitVerse.

Разрешения и права пользователя в Linux — это концепция, которая определяет, кто может получать доступ к файлам и каталогам и изменять их. У каждого файла и каталога есть владелец и группа. Например, владелец и группа файла или каталога могут быть изменены с помощью команды chown. Разрешения могут быть доступны для чтения, записи или выполнения, а также могут быть изменены с помощью команды chmod. Разрешения важны для обеспечения безопасности и многопользовательских сред в Linux. Существует множество тонкостей, связанных с владением файлами и правами доступа к ним. В статье рассмотрим особенности прав доступа в Linux, их изменение и работу с ACL.

Права доступа в Linux

В Linux права собственности на файлы имеют важное значение для эффективного управления системой и обеспечения безопасности.

У каждого файла и каталога в Linux есть три типа владельцев:

  • пользователь — создатель файла становится его владельцем. Изменить владельца можно позже;
  • группа — все пользователи входят в определенные группы. Управление пользователями в многопользовательской среде предполагает создание отдельных групп (например, команда разработчиков, команда контроля качества, команда системных администраторов). Членство в группах упрощает управление разрешениями;
  • прочие — в эту группу входят все пользователи системы. К ней относятся все, у кого есть доступ к системе.

В Linux есть система разрешений, основанная на трех ключевых атрибутах:

  • доступ для чтения — обозначается как «r»; предоставляет доступ для чтения файла;
  • доступ для записи — обозначается как «w»; предоставляет доступ для записи или изменения файла;
  • доступ к выполнению — этот параметр обозначается символом «x»; он предоставляет пользователю доступ к выполнению команды над файлом.

Наиболее распространенный способ просмотра разрешений для файла — использование ls с параметром длинного списка -l, например, ls -l myfile. Чтобы просмотреть разрешения для всех файлов в этом каталоге, нужно запустить команду без аргумента myfile:

ls -l

При нахождении в пустом домашнем каталоге без созданных файлов, можно изучить содержимое каталога /etc с помощью команды:

 ls -l /etc

Что такое UID и GID в Linux

Каждому пользователю и группе присваивается уникальный идентификатор (ID). Он также называет идентификатор пользователя (UID) и идентификатор группы (GID). Операционная система использует эти идентификаторы внутри системы для идентификации и управления правами доступа пользователей и групп и владения ими.

Идентификаторы пользователей (UID). Каждой учетной записи пользователя в Linux присваивается UID. Пользователь root имеет UID, равный 0, который зарезервирован для суперпользователя. Учетные записи обычных пользователей обычно имеют UID, начинающиеся с 1000 и последовательно увеличивающиеся. UID 1 зарезервирован для учетной записи демона, а другие UID могут быть назначены системным учетным записям или службам.

Идентификаторы групп (GID). Как и пользователям, группам в Linux присваивается GID. Корневая группа обычно имеет GID, равный 0. Обычные группы в основном имеют GID, начинающиеся с 1000 и последовательно увеличивающиеся. Идентификаторы GID могут быть связаны с несколькими пользователями, что позволяет им совместно использовать общие разрешения и доступ.

/etc/passwd и /etc/group. Информация о пользователях и группах, включая их идентификаторы, хранится в системных файлах «/etc/passwd» и «/etc/group». Эти файлы обеспечивают сопоставление имен пользователей/групп и их соответствующих идентификаторов, а также другой информации, связанной с учетной записью.

Изменение идентификаторов пользователей и групп. Изменение может повлиять на владельца файла и права доступа к нему. Команда usermod используется для изменения свойств учетной записи пользователя, включая UID. Команда groupmod используется для изменения свойств группы, включая GID.

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

Конфликты UID и GID. Конфликтующие UID или GID могут привести к проблемам с владением файлами или доступа к ним.

Изменение прав доступа к файлу или каталогу

Чтобы изменить права доступа к файлам в Linux, используйте команду chmod. Синтаксис:

chmod [option] [mode] [file_folder_name]

Параметр mode устанавливает новые права доступа для файла или папки. Используйте символьный или числовой форматы — они работают аналогично и дают одинаковый результат.

Символьный формат

В символьном режиме используется больше символов, но они проще для понимания. Это удобно для системных администраторов, которые не знакомы со стандартными разрешениями Linux.

Для каждого уровня доступа есть свой символ:

Read — r

Write — w

Execute — x

У каждой личности есть свой символ:

User — u

Group — g

Others — o

Существуют также операторы для управления разрешениями:

Предоставить уровень доступа +

Отменить уровень доступа -

Установить уровень доступа =

Пример удаления прав на чтение у других users для файла3:

# chmod o-r file3

В этом примере удаляется (-) разрешение на чтение (r) у других пользователей (o) для файла3.

Установим разрешения для каталога и всего его содержимого:

# chmod -R o=rwx,g+rw,o-rwx Resources

Числовой формат

Каждый уровень доступа (чтение, запись, выполнение) имеет восьмеричное значение:

Чтение — 4

Запись — 2

Выполнение — 1

Каждая личность (пользователь, группа, другие лица) имеет определенную позицию:

  • пользователь первый или крайний слева;
  • группа — средний;
  • остальные — последние или крайние справа.

Синтаксис числового режима определяет желаемые разрешения слева направо.

Можно предоставить пользователю (владельцу) доступ для чтения, записи и выполнения, группе только для чтения и всем остальным доступ к файлу3. Команда:

# chmod 740 file3

Три значения разрешений связаны с идентификаторами:

 ugo

 740

Значение 7 присваивается пользователю. Это сумма 4+2+1 или чтение+запись+выполнение (полный доступ). Значение 4 присваивается группе — сумма значений 4+0+0 (доступно только для чтения). Значение 0 присваивается другим — сумма 0+0+0 (нет доступа). В этом примере у user есть rwx, у группы есть только r, а у всех остальных нет доступа к файлу3.

Команды для управления правами в Linux

Команды Linux обеспечивают контроль над владельцами файлов и разрешениями на их использование. Они помогают следить за безопасностью информации.

Команда chown

В Red Hat Enterprise Linux (RHEL) команда mighty chown расшифровывается как «изменить владельца» ‎. Она позволяет пользователям изменять права собственности на файлы и каталоги. Синтаксис:

chown [OPTIONS] [NEW_OWNER][:NEW_GROUP] FILE(s)/DIRECTORY(s)

Опции:

R, --рекурсивный: рекурсивно изменяет владельца каталогов и их содержимого;

v, --подробный: отображает сообщение для каждого обработанного файла.

Только пользователь root или user с соответствующими разрешениями может использовать chown для изменения владельца.

Изменение владельца группы:

chown :newgroup myfile.txt

Эта команда создает файл с именем myfile.txt. Вы присоединяетесь к новой группе с именем new group, и это не повлияет на владельца файла.

Команда chmod

Команда chmod позволяет указать уровни доступности для чтения, записи и выполнения файла. Синтаксис:

chmod [OPTIONS] MODE FILE...

Пример chmod — назначение прав на чтение и запись для владельца:

chmod 600 myfile.txt

После выполнения chmod 600 myfile.txt владелец myfile.txt получит полный доступ для чтения и записи к файлу (6 в **6**00). Группа и другие users не будут иметь никаких разрешений вообще (следующие два 0 в 6**00**).

Команда chgrp

Используется для изменения группового владения файлами или каталогами. Она полезна, когда вы хотите изменить только групповое владение, не затрагивая пользователя-владельца файла или его разрешения. Синтаксис:

chgrp [OPTIONS] NEW_GROUP FILE…

Пример изменений прав собственности группы на файл:

chgrp newgroup myfile.txt

Это изменит права собственности группы на файл с именем myfile.txt на группу с именем newgroup.

Команда id

id — это базовая команда Linux, используемая для подтверждения личности указанного пользователя Linux. Она также используется для поиска имен пользователей и групп, а также UID и GID любого user. Синтаксис:

id [OPTIONS] [USERNAME]

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

id -u master

Для поиска GID master мы будем использовать команду:

id -g master

Команда umask

Она позволяет настроить разрешения по умолчанию для вновь создаваемых файлов и папок. User может выбрать способ ограничения разрешений, используя маску разрешений. Маска разрешений взаимодействует с системными разрешениями по умолчанию и изменяет их. Для применения этой маски используется команда umask. Синтаксис:

umask [-p] [-S] [mask]

[mask — новая маска разрешений, которую вы применяете. По умолчанию маска представлена в виде числового (восьмеричного) значения;

[-S] — отображает текущую маску в виде символьного значения;

[-p] — отображает текущую маску вместе с командой umask, позволяя копировать и вставлять ее в качестве входных данных в будущем.

Команда chmod работает аналогично umask. Она также используется для определения разрешений для файлов и папок.

Разница между umask и chmod в том, что umask изменяет разрешения по умолчанию и, следовательно, разрешения для всех вновь создаваемых файлов и папок. Сhmod устанавливает разрешения для файлов и папок, которые уже существуют.

Расширенные права

SUID (Set User ID), SGID (Set Group ID), и Sticky Bit — права, которые выходят за рамки стандартных прав доступа к файлам и предоставляют мощные функциональные возможности. Например, предоставление временных привилегий, контроль группового доступа и сохранение целостности данных.

SUID, SGID и sticky bit

Когда для исполняемого файла установлен бит SUID, это означает, что файл будет выполнен с теми же правами доступа, что и у владельца исполняемого файла.

SGID аналогичен SUID. Если установлен бит SGID, любой пользователь, запускающий файл, будет иметь права доступа владельца группы файлов. Преимущество этого метода заключается в работе с каталогом. Когда к нему применяется разрешение SGID, все подкаталоги и файлы, созданные внутри этого каталога, получают право собственности в той же группе, что и основной каталог (а не в группе пользователя, создавшего файлы и каталоги).

Sticky bit — специальное разрешение, которое может быть установлено только для каталогов. Если для каталога установлен sticky, все файлы в каталоге могут быть удалены или переименованы только владельцами файлов или пользователем root.

Пример работы со специальными правами

В некоторых случаях для запуска программы может потребоваться, чтобы пользователь имел больше прав, чем у него есть по умолчанию. В качестве примера можно привести команду passwd, которая позволяет пользователям менять свой собственный пароль. Смена пароля по сути требует изменения файла /etc/shadow. Однако доступ на запись в файл /etc/shadow имеет только пользователь root:

cooluser@LAPTOP-5V55HON5:~$ ls -l /etc/shadow

-rw-r—– 1 root shadow 1824 Oct 18 19:49 /etc/shadow

cooluser@LAPTOP-5V55HON5:~$

Для смены пароля нам нужно быть пользователем root или иметь привилегии sudo. Однако обычные пользователи могут выполнить команду passwd, чтобы изменить свой собственный пароль, без прав sudo или root.

cooluser@LAPTOP-5V55HON5:~$ passwd

Changing password for cooluser.

Current password:

New password:

Retype new password:

passwd: password updated successfully

cooluser@LAPTOP-5V55HON5:~1$

Чтобы понять, почему passwd, по-видимому, предоставляет доступ на уровне root, а ls — нет, посмотрим на разрешения для этих двух исполняемых файлов.

cooluser@LAPTOP-5V55HON5:~$ ls -l /bin/ls

-rwxr-xr-x 1 root root 142144 Sep 5 2019 /bin/ls

cooluser@LAPTOP-5V55HON5:~$ ls -l /bin/passwd

-rwsr-xr-x 1 root root 68208 May 28 01:37 /bin/passwd

cooluser@LAPTOP-5V55HON5:~$

Оба исполняемых файла принадлежат пользователю root и группе. Есть только одно различие в разрешениях. Исполняемый файл passwd содержит «s» ‎ там, где должен быть «x»‎ для прав доступа владельца файла. Эта буква «s» ‎ сообщает нам, что setuid установлен.

Поскольку setuid установлен, когда мы запускаем команду passwd, она автоматически выполняется от имени владельца файла. Потому что владелец root, смена пароля и требуемая правка в /etc/shadow работают корректно.

Управление ACL (setfacl, getfacl) в Linux

Списки контроля доступа (ACL) предоставляют расширенный и более гибкий механизм предоставления разрешений для файловых систем Linux, позволяя администраторам устанавливать конкретные разрешения для отдельных пользователей или групп. 

Изменение и просмотр настроек ACL с помощью setfacl и getfacl

Существуют две основные команды для управления списками ACL:

  • setfacl — для установки записей ACL;
  • getfacl — для получения и отображения записей ACL.

Чтобы добавить разрешения для пользователя (user — это либо имя пользователя, либо идентификатор):

# setfacl -m "u:user:permissions"

Чтобы разрешить всем файлам или каталогам наследовать записи ACL из каталога, в котором они находятся:

# setfacl -dm "entry"

Показать права доступа:

# getfacl filename

Работа с ACL по умолчанию

ACL по умолчанию — это определенный тип разрешений, назначаемых каталогу, который не изменяет разрешения самого каталога. Он делает так, что указанные ACL устанавливаются по умолчанию для всех файлов, созданных внутри него.

Создадим каталог и назначим ему ACL по умолчанию, используя параметр -d:

$ mkdir test && setfacl -d -m u:dummy:rw test

-m — изменить или добавить запись ACL для пользователя или группы

-x — удалить запись ACL

-b — удалить все записи ACL

-d — установить ACL по умолчанию для каталога (наследование для файлов)