Как работать с правами доступа Unix

Права доступа в ОС Linux - это механизм, позволяющий разграничить доступ к ресурсам на компьютере.

 Если вы часто работаете с ОС Linux, то и без этого знаете, как работать с правами доступа. Однако, статья все равно может оказаться вам интересна. Если же вы совсем не знакомы с Unix системами, то узнаете, как правильно работать с правами доступа. 

Правами доступа файла, называется 12-битное слово. Первым идет тип файла: “d” - директория, “-” - обычный файл. Остальные 9 из них объединены в 3 группы по 3 бита: первая - для владельца файла, вторая - для его группы, третья - для всех остальных. 

Посмотрим на них подробнее.

Для этого, в терминале нужно ввести ls -l:

[ls.png]
3 бита групп означают следующее:

r - Чтение.

w - Запись.

x - Запуск.

Так как 3 бита соответствуют одной цифре восьмеричной системы счисления, то часто права доступа записываются в виде 3-4 значного числа.

  • Например, если вы немного работали с Linux, то при возникновении ошибок с доступом, видели советы настроить доступ 777. Это считается плохой практикой, так как предоставляет полный доступ к файлу всем пользователям машины.
Рассмотрим некоторые записи в восьмеричной системе счисления:
rwx rw- r-x -> 111 110 101 -> 4+2+1 4+2 4+1 -> 7 6 5

Таким образом, чтобы выдать полные права владельцу, чтение и запись группе и запуск всем пользователям, необходимо ввести:

chmod 765 file.txt

 

При этом, для директорий биты интерпретируются несколько иначе:
  1. Чтение - Возможность смотреть содержимое каталога.
  2. Запись - Возможность модифицировать директорию - создавать и удалять файлы (в том числе чужие).
  3. Запуск - Возможность использовать содержимое директории. 

 

  • Возможно, вы иногда могли увидеть, как при настройке прав указывают 4 цифры, вместо 3.  Давайте посмотрим, что они значат:

4 - SetUid Bit - Если вы указали этот бит, то при запуске, файл будет иметь права своего владельца независимо от того, кто его запустил

2 - SetGid Bit - Работает также, как и SetUid Bit, но по отношению к группе, а не владельцу

1 - Sticky Bit - Раньше использовался, чтобы отмечать часто используемые файлы. Таким образом, файл сохраняется в оперативной памяти. Сейчас же в нем смысла нет и он игнорируется.

Отметим, что из соображений безопасности, SetUid и SetGid не работают для скриптовых исполняемых файлов

 

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

4 - SetUid Bit - В Linux игнорируется, но во FreeBSD, например, все созданные файлы будут принадлежать владельцу директории 

2 - SetGid Bit - Какой бы пользователь не создавал файл, в качестве его группы будет группа текущей директории

1 - Sticky Bit - Даже если пользователь имеет право на запись в директории, удалять он сможет только свои файлы.

  • В качестве примера, рассмотрим ситуацию, где нам необходимо создать общедоступную директорию:
chmod 01777 public_dir
Тогда все смогут делать все, кроме удаления файлов других пользователей. Например, такие права доступа стоят по-умолчанию на директорию /tmp .

 

  • Есть еще один способ изменять права доступа файла. Его мы рассмотрим на основе сложного примера:
chmod -R u+rwX,go=rX ~

Эту команду рекомендуется использовать, если вы сломали все права в своей домашней директории.

Пойдем по порядку:

1.Уже знакомая нам команда chmod и ключ -R, который означает, что необходимо рекурсивно применить это правило ко всей директории.

2.В выражениях u+rwX и go=rX  - лучше просто рассмотреть синтаксис:

  • o g u  владелец, группа, пользователи соответственно.
  • + - =  означают добавить, отнять или приравнять (установить и снять остальные) права. 

3. Дальше идут флаги.

  • r w x - чтение, запись и запуск.
  • s - установка/снятие set битов.
  • t - Sticky Bit и X - установка/снятие битов для директорий и файлов, на которые хотя бы у кого-нибудь есть права на запуск.

 

Как настроить права доступа

Все это время, мы говорили, о правах доступа владельца и группы, но так и не рассматривали, как их настроить.

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

Однако, их можно изменить в любой момент следующей командой:

chown [owner]:[group] file.txt

Если добавить -R после chown, то команда применится рекурсивно (для всех файлов, что есть в директории).

 

Наш телеграм-канал
Пишем про облака, кейсы, вебинары
Подписаться