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

358
Шпаргалка по правам доступа к файлам в Linux
Шпаргалка по правам доступа к файлам в 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 до 777 774
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]-rwx
1 Только право на выполнение [u/g/o]=x
2 Только право на запись [u/g/o]=w
3 Только права на запись и выполнение: 2 + 1 = 3 [u/g/o]=wx
4 Только для чтения [u/g/o]=r
5 Только права на чтение и выполнение: 4 + 1 = 5 [u/g/o]=rx
6 Только права на чтение и запись: 4 + 2 = 6 [u/g/o]=rw
7 Все разрешения: 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 = доступ разрешён), а — как преобразование между двоичной и восьмеричной системами счисления. Получается:

  • r100₂4₈,
  • w010₂2₈,
  • x001₂1₈.

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

Символьная нотация (вывод команды ls -l) Двоичное представление Восьмеричная нотация
rwxr-xr-x 111 101 101 755
rw-r--r-- 110 100 100 644
rwx------ 111 000 000 700
r-xr-xr-x 101 101 101 555

 

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

Помимо того, что восьмеричная нотация является альтернативой символьной, она имеет особое применение в команде 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.
Твой пользователь принадлежит трём группам:
staffeveryone 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 соответственно