Шпаргалка по правам доступа к файлам в Linux

Права доступа к файлам, то есть контроль доступа к файлам и каталогам (папкам), крайне важны. Если ты писал собственные Bash-скрипты, скорее всего, уже сбился со счёта, сколько раз вводил команду chmod +x myscript.sh. При выполнении задач системного администрирования тебе необходимо хорошо знать команды su и sudo.

Время от времени может понадобиться освежить знания о правах доступа. На работе, например, нужно защищать конфиденциальные данные от посторонних глаз на сервере компании, который зачастую работает под управлением Linux. Кроме того, представь себе возможные убытки, если не удастся предотвратить случайные изменения критически важных файлов или злонамеренные действия.

Эта шпаргалка по правам доступа в Linux — именно то, что тебе нужно. В ней рассматриваются типы прав доступа, категории пользователей, к которым они применяются, команды chmod, su/sudo и другие связанные команды Linux.

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

Следующие команды отображают права доступа к файлам и каталогам:

Команда Описани

еls -l foo.sh

Проверить права доступа к файлу foo.sh

ls -ld bar

Проверить права доступа к каталогу bar

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

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

Права доступа, область действия и сведения о файле при выполнении команд ls -l или ls -ld

Права доступа, область действия и сведения о файле при выполнении команд `ls -l` или `ls -ld`

Права доступа, область действия и сведения о файле при выполнении команд `ls -l` или `ls -ld`

Права доступа в символьной нотации

Права на файлы и каталоги охватывают четыре области:

Область действия

Символ

Описание

User (u)

Владелец файла или каталога

Group (g)

Группа пользователей, которые могут получить доступ к файлу или каталогу

Other (o)

Другие пользователи (мир) All (a)

Все пользователи

 

Права доступа к файлам

Тип разрешенияСимволЕсли файл имеет это разрешение, вы можете:Если каталог имеет это разрешение, вы можете:Читать r Открытие и просмотр содержимого файлов (команды cat, head, tail)

Просмотр содержимого каталога (команды ls, du)

Написать w Редактирование, удаление или переименование файла (с помощью vi)

Редактирование, удаление или переименование каталога и файлов внутри него; создание файлов внутри него (команда touch)

Выполнить x Запустите файл.Вход в каталог (команда cd); без права x (исполнение) права r (чтение) и w (запись) на каталог бесполезны.

Ничего-Ничего Ничего

 

Команды, связанные с правами доступа

Команда Описание

chmod permission foo

Изменить права доступа к файлу или каталогу foo в соответствии с заданными правами в символьной или восьмеричной нотации.

Примеры:

chmod +x foo

Выдать права на выполнение для всех пользователей на файл foo с использованием символьной нотации.

chmod 777 foo

Выдать права на чтение, запись и выполнение для всех пользователей на файл foo с использованием восьмеричной нотации.

chown user2 foo

Изменить владельца файла foo на пользователя user2.

chgrp group2 foo

Изменить группу, к которой принадлежит файл foo, на group2.

umask

Получите четырёхзначное вычитаемое.

Напомните себе: уменьшаемое – вычитаемое = разность.

Если уменьшаемое — 777, разность — это ваши права доступа по умолчанию для каталогов;

если уменьшаемое — 666, разность — это ваши права доступа по умолчанию для файлов.

su / sudo / sudo -i

Вызов привилегий суперпользователя.id

Узнать свой идентификатор пользователя (UID) и идентификатор группы (GID).

groups

Найти все группы, к которым ты принадлежишь.

Если ты выполняешь команду, выходящую за пределы предоставленных прав, ты получишь ошибки вроде «Permission denied» (доступ запрещён) или «Operation not permitted» (операция не разрешена).

Изменение прав доступа

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

Метод

Формат разрешения

Примеры

Применение, не связанное с использованием chmod

Символьная нотация

Короткая текстовая строка, состоящая из одного символа из набора [u/g/o/a], одного символа операции из набора [+/-/=] и как минимум одного символа из [r/w/x]. Если опустить u/g/o/a, по умолчанию используется a.u+rg-wxo=rx+x (i.e., a+x)

Вывод команд ls -l и ls -ld, например:
-rwxrw-r—x

Здесь символ — обозначает отсутствие, а не удаление, права доступа.

Восьмеричная нотация

Трёхзначное восьмеричное число в диапазоне от 000 до 777774
640

Вычисление прав доступа по умолчанию с помощью umask

 

Символьная нотация

Эта нотация используется в выводе команд ls -l и ls -ld. Она сочетает символы u/g/o/a (обозначающие область действия), знаки +/-/= и права r/w/x для изменения доступа. Если u/g/o/a опущены, по умолчанию используется a.

Знаки +/-/= означают: предоставление / удаление / установка конкретных прав.

Вот несколько примеров использования команды chmod с символьной нотацией. Можно изменять сразу несколько прав, объединив выражения через запятую (,) — как показано в четвёртом примере ниже.

Команда в символьной нотацииИзменение прав пользователя (u)Изменение прав группы (g)Изменение прав для остальных (o) пользователейchmod +x foo Выполнить Выполнить Выполнитьchmod a=x foo Чтение
Записать
Выполнить Чтение
Записать
Выполнить Чтение
Записать
Выполнитьchmod u-w foo Записать(Без изменений)(Без изменений)chmod u+wx,g-x,o=rx foo Записать
Выполнить Выполнить Чтение
Записать
Выполнить

 

Восьмеричная нотация

Эта нотация представляет собой трёхзначное число, где каждая цифра обозначает права доступа как сумму слагаемых 4, 2 и 1, соответствующих правам чтения (r), записи (w) и выполнения (x) соответственно.

  • Первая цифра относится к пользователю (владельцу) (u).
  • Вторая цифра — к группе (g).
  • Третья цифра — к остальным пользователям (o).

Восьмеричная цифра

Предоставленные права доступа

Символ

0

Нет (отсутствуют)[u/g/o]-rwx1

Только право на выполнение[u/g/o]=x2

Только право на запись[u/g/o]=w3

Только права на запись и выполнение: 2 + 1 = 3[u/g/o]=wx4

Только для чтения[u/g/o]=r5

Только права на чтение и выполнение: 4 + 1 = 5[u/g/o]=rx6

Только права на чтение и запись: 4 + 2 = 6[u/g/o]=rw7

Все разрешения: 4 + 2 + 1 = 7[u/g/o]=rwx

 

Вот несколько примеров использования команды chmod с восьмеричной нотацией:

Команда в восьмеричной нотацииИзменение прав пользователя (u)Изменение прав группы (g)Изменение прав для остальных пользователей (o)chmod 777 foo Чтение
Записать
Выполнить Чтение
Записать
Выполнить Чтение
Записать
Выполнитьchmod 501 foo Чтение
Записать
Выполнить Чтение
Записать
Выполнить Чтение
Записать
Выполнитьchmod 365 foo Чтение
Записать
Выполнить Чтение
Записать
Выполнить Чтение
Записать
Выполнитьchmod 177 foo Чтение
Записать
Выполнить Чтение
Записать
Выполнить Чтение
Записать
Выполнить

 

Преобразование между символьной и восьмеричной нотациями

Чтобы визуализировать восьмеричную нотацию, можно представить отображение ↔ как соответствие между символьной нотацией и двоичной записью (0 = доступ запрещён, 1 = доступ разрешён), а ⇔ — как преобразование между двоичной и восьмеричной системами счисления. Получается:

  • r ↔ 100₂ ⇔ 4₈,
  • w ↔ 010₂ ⇔ 2₈,
  • x ↔ 001₂ ⇔ 1₈.

Таким образом, каждая комбинация прав r, w и x соответствует уникальной сумме их числовых значений. Например, полные права rwx ↔ 111 111 111₂ ⇔ 777₈, как показано ниже:

Символьная нотация (вывод команды ls -l)

Двоичное представление

Восьмеричная нотация

rwxr-xr-x111 101 101755
rw-r—r—110 100 100644
rwx——111 000 000700
r-xr-xr-x101 101 101555

Права доступа по умолчанию

Помимо того, что восьмеричная нотация является альтернативой символьной, она имеет особое применение в команде umask.

Чтобы узнать, какие права установлены у тебя как у текущего пользователя, используй команду umask, чтобы получить четырёхзначное число. Если вычесть его из 0777, ты получишь права доступа по умолчанию для создания каталога; если вычесть из 0666, — права по умолчанию для создания файла.

Пример использования:

Команда

Описание

umask

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

Примеры:

Вывод команды umask

Права доступа к каталогам по умолчанию

Права доступа к файлам по умолчанию

0002

Восьмерично:
777 – 2 = 775

Символьно:
rwxrwxr-xВосьмерично:
666 – 2 = 664

Символьно:
rw-rw-r—0022

Восьмерично:
777 – 22 = 755

Символьно:
rwxr-xr-xВосьмерично:
666 – 22 = 644

Символьно:
rw-r—r—0314Восьмерично:
777 – 314 = 463

Символьно:
r—rw–wxВосьмерично:
666 – 314 = 352

Символьно:
-wxr-x-w-

 

Изменение владельца

Прежде чем изменить владельца файла или каталога, нужно понимать, как система идентифицирует пользователей и группы. Для этого полезны команды id и groups.

Пример использования:

Команда

Описание

id

Узнай свой идентификатор пользователя (UID) и идентификатор группы (GID)

groups

Узнай, к каким группам принадлежит твой пользователь

 

Пример:

Вывод команды id

Описание

uid=501(teacher) gid=20(staff) groups=20(staff),12(everyone),61(localaccounts)

Твой пользователь
id (uid) is 501.

Твой пользователь
id (gid) is 20.

Твой пользователь принадлежит трём группам:
staff, everyone and localaccounts.groups output

Описание

staff everyone localaccounts

Твой пользователь входит в три группы:
staff, everyone and localaccounts.

 

Суперпользователь

Большинство дистрибутивов Linux содержат программу, которая позволяет получить доступ к терминалу от имени суперпользователя (root). Эта программа помогает опытным пользователям выполнять задачи системного администрирования.

Существует два способа вызвать эту программу: команда su (сокращение от substitute user) для открытия отдельного shell под root, и команда sudo для выполнения команд с правами суперпользователя напрямую. В обоих случаях потребуется ввести пароль суперпользователя для продолжения выполнения задачи.

В современных дистрибутивах пароль для root-пользователя обычно не задаётся, поэтому в таких случаях используют команду sudo -i, чтобы войти в shell от имени root.

Символ командной строки меняется с $ на # в root-оболочке. Это напоминание о том, что с большой силой приходит большая ответственность. Чтобы выйти из оболочки root, используй команду exit.

Команда (включая символ оболочки)Символ)

Описание команды

Вывод приглашения и (нового) символа оболочки$ suВызов оболочки суперпользователя

Password:
#$ sudo some_command

Выполнение команды some_command с привилегиями суперпользователя

Password:
$$ sudo -i

Вызов оболочки суперпользователя, если su отключён

Password:
#

 

Используй команды суперпользователя с осторожностью.

Изменение владельца файла

Если у тебя есть права суперпользователя, ты можешь изменить владельца (пользователя) файла или каталога с помощью команды chown. Если ты знаешь UID нового владельца, вместо user2 можно также указать соответствующий UID.

Команда Описание

sudo chown user2 foo

Передать право владения файлом foo пользователю user2

sudo chown 102 foo

Передать право владения файлом foo пользователю с UID=102

 

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

Если ты являешься владельцем файла или каталога, ты можешь изменить группу-владельца с помощью команды chgrp.

Команда

Описание

chgrp group2 foo

Передать право собственности на файл/каталог foo группе group2

chgrp 2 foo

Передать право собственности на файл/каталог foo группе с GID=2

sudo chown user2:group2 foo

(Требуются привилегии суперпользователя) Одновременно изменить владельца и группу файла на user2 и group2 соответственно