На ОС Linux полномочия имеет критически важное значение: распределение прав доступа между пользователями позволяет контролировать систему и ограничивать её от нежелательных вмешательств. Рассказываем, как устроена система полномочий пользователей, как сменить владельца и настроить разрешения папки.
Немного о правах доступа
Прежде всего нужно отметить, что в Linux все объекты считаются файлами (то есть папка с точки зрения операционной системы это файл, содержащий список других файлов и ссылки на них). Поэтому доступ к папкам организован так же, как и к файлам.
Права доступа различаются в зависимости от действий, которые может произвести пользователь, в Linux это может быть:
- чтение, просмотр содержимого, обозначается как r (read) ;
- запись, создание объектов внутри директории, изменение содержимого, удаление — w (write);
- выполнение, право запустить файл, право перехода в директорию — x (execute).
Папкам и файлам в системе Linux присваивается трёхзначное число, в котором закодированы разрешения на доступ к ним. Первая цифра обозначает совокупность прав доступа пользователя-владельца, вторая — первичной группы владельца, и третья — всех остальных. Группа пользователя создаётся по умолчанию в момент его создания, впоследствии эту настройку можно изменить.
Число формируется следующим образом:
Право на чтение даёт 4 единицы, запись — 2, выполнение — 1. Значения подобраны так, чтобы разные сочетания никогда не давали одинаковых сумм:
- 7 | rwx | может обозначать только максимальный доступ (4 + 2 + 1),
- 6 | rw- | — чтение и запись (4 + 2 + 0),
- 5 | r-x | — чтение и выполнение (4 + 0 + 1),
- 4 | r— | — только чтение (4 + 0 + 0),
- 3 | -wx | — запись и выполнение (0 + 3 + 1),
- 2 | -w- | — только запись (0 + 2 + 0),
- 1 | —x | — только выполнение (0 + 0 + 1),
- 0 | — | — полный запрет действий (0 + 0 + 0).
Стандартными настройками для общих папок являются 755 | rwxr-xr-x |, для домашних каталогов — 750 |rwxr-x—| и 700 |rwx——|, для исполняемых файлов обычно устанавливают 755 | rwxr-xr-x |, для содержащих данные — 644 | rw-r—r— |, 640 | rw-r—— | и 600 |rw——-|.
Как узнать владельца и разрешения папки
Введите в терминале команду ls с флагом -ld (-d указывает на directory), затем укажите путь:
ls -ld <directory>
Или -l для вывода информации о всех вложенных объектах:
ls -l <directory>
Утилита выведет десять символов, первый из которых — это тип объекта, а остальные — разрешения, после чего будет указан владелец и его группа.
Выбирайте для своих веб-проектов надёжного провайдера. Например, аренда VPS от AdminVPS — это:
- бесплатное администрирование,
- NVMe-диски,
- быстрая техподдержка,
- защита от DDoS-атак,
- доступная цена.
Кто может менять владельца или разрешения на доступ
Сделать это могут текущий владелец и рут-пользователь. Обратите внимание, что по умолчанию суперпользователь имеет полный доступ ко всей файловой системе.
Избегайте ситуации, когда в папке с доступом к записи для всех лежит файл без таких прав. Злоумышленники могут создать копию с нужными им разрешениями и заменить ей оригинал.
Как сменить владельца папки
Смена возможна с помощью двух утилит: chown и chgrp.
Chown
После chown нужно указать имя нового владельца и название его группы, разделённые двоеточием, затем директорию:
chown [new owner]:[new group] [изменяемый объект]
Команде можно передать только нового владельца или только группу. Смена владельца домашней директории user1 на пользователя Alex:
chown Alex <directory/user1>
Если вы собираетесь заменить только группу, поставьте перед ней точку или двоеточие:
chown :group1 <directory/user1>
Чтобы поменять настройки доступа рекурсивно (во всех дочерних папках и вложенных файлах) применяйте флаг -R. Например, следующей командой мы передадим права на директорию user1, в том числе на всё её содержимое, пользователю Alex и его первичной группе; команда будет выглядеть так:
chown -R Alex:Alex <directory/user1>
Chgrp
Эта утилита имеет ограниченные функции и может сменить только группу:
chgrp <new_group> <directory>
Как и chown, утилита поддерживает рекурсивные операции.
Как изменить разрешения утилитой chmod
Команда chmod имеет вид:
Chmod <опции, модификаторы> <права> <путь к объекту>
Chmod с правами доступа, записанными в виде чисел
Метод удобен благодаря краткости, однако он не даёт модифицировать существующие настройки, доступна лишь полная перезапись. В этом варианте указывается трёхзначное значение прав доступа и путь.
Команда, которая присвоит разрешения 600 указанному объекту:
chmod 600 testfile.doc
Выборочное изменение прав с записью символами
Здесь команда получается длиннее, но её запись более наглядная. К тому же можно изменить параметры выборочно с сохранением всех остальных прав.
Укажите после chmod категорию пользователя, к которому будут применены изменения, модификатор, разрешения и путь к объекту.
Категория:
- -u — для пользователя-владельца,
- -g — для группы,
- -o — для остальных пользователей,
- -a — для всех (то есть u + g + o).
Модификатор (действие):
- + — дать разрешение,
- — — удалить,
- = — заменить.
Например, следующая команда добавит всем категориям пользователей право на выполнение:
chmod a+x directory1/testfile1
Удаление права изменения у всех, кроме владельца:
chmod go-w directory2/testfile2
Установка максимальных разрешений владельцу (значения будут перезаписаны):
chmod u=rwx directory3/testfile3
Изменение параметров по типу объекта
Команда будет выполнена только для всех папок в указанной директории (сначала будут найдены все папки в директории, затем перезаписаны разрешения):
find /dir0/dir1/ -type d -exec chmod 744 {} \;
А эта команда только для файлов:
find /dir0/dir2/ -type f -exec chmod 640 {} \;
Дополнительные опции
- -R, -recursive: изменение разрешений для всех вложенных объектов;
- —preserve-root: запрет выполнения рекурсивных операций для корня «/»;
- -f, -silent, -quiet: «тихое» выполнение, подавляет вывод сообщений об ошибках или предупреждений;
- -v, -verbose: вывод подробной информации о ходе процесса;
- -c, -change: вывод сообщения, если с объектом произошли изменения;
- —reference: скопировать права из переданного объекта;
- —version: сообщение с версией утилиты.
Подведём итоги
- В Linux существует три типа разрешений: чтение, запись, исполнение.
- Также для каждой папки или файла существуют три категории пользователей: владелец, его группа и все остальные.
- Все объекты в Linux считаются файлами, в том числе папки, устройства и т. д. Поэтому ко всем объектам применяется одна и та же система прав доступа, а изменения вносят одними инструментами.
- Права доступа имеют числовую и символьную записи; например, 644 и rw-r—r—.
- Чтобы изменить владельца, используют утилиту Chown.
- Чтобы изменить группу — Chown и Chgrp.
- Чтобы отредактировать права доступа — Chmod.
Теперь вы знаете, как работают полномочия в Linux, как узнать и сменить владельца папки или файла, а также как изменить права доступа в Linux.
Читайте в блоге: