Разрешения и права пользователя в 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 по умолчанию для каталога (наследование для файлов)