Контроль доступа к файловой системе

Linux, как и любой Unix, - это многопользовательская ОС. Т.е. одновременно за 1 физическим компьютером может работать множество различных людей.

Обычно каждый пользователь хочет, чтобы его данные мог изменять только он. Изменение данных может быть как целенаправленным, так и случайным.

=> ОС должна предоставить возможность контроля доступа к файлам :)

Проверим свой уровень доступа:

file /etc/shadow
less /etc/shadow

Файл /etc/shadow содержит в себе пароли (в зашифрованном виде) всех пользователей. Обычный пользователь, очевидно, не может считать информацию из этого файла.

Разберёмся как ОС видит текущего пользователя. Для этих целей используем программу id.

  • uid - Уникальный идентификатор пользователя в системе. В нашем случае это 1001.
  • gid - Уникальный идентификатор группы по умолчанию, к которому относится текущий пользователь. 1001.
  • grous (группы) - Список групп, в которые входит текущий пользователь.

Эти группы обеспечивают вам доступ к определённым частям ФС.

Как считывать ограничения по доступу к ФС?

Для просмотра уровня доступа к файлам используем приложение ls с аргументом -l. Нас сейчас будут интересовать только столбцы 1, 3 и 4.

Первый столбец описывает права доступа к конкретному файлу.

Само описание занимает 10 символов: 1 символ отвечает за тип файла, а 9 следующих описывают 3 группы по уровню доступа:

  • уровень доступа владельца.
  • уровень доступа группы.
  • уровень доступа всех остальных.

Т.е. если вы являетесь владельцем, тогда к вам применяется 1 уровень доступа. Если входите в группу, то второй. Если не являетесь ни тем ни другим, тогда третий.

Для описания уровня доступа 1 категории пользователей используется 3 символа. Они либо могут быть влкючены, либо могут быть выключены. Если символ выключен, тогда ставится прочерк.

  • rwx
  • r-x

Что каждый из этих символов значит:

  • r - можно считывать информацию из этого файла
  • w - можно записывать информацию в файл
  • x - execute, то есть возможность выполнять файл. А для каталогов это возможность запускать приложения внутри данного каталога.

Давайте разберём права доступа файла /etc/shadow.

Кто является владельцем файла? Это написано в 3 колонке. В случае файла /etc/shadow им является пользователь root - это суперпользователь, к которому никакие ограничения не налагаются.

Где указана группа, к которой относится файл? Это написано в 4 колонке. В случае файла /etc/shadow им является группа shadow.

Рассмотрим следующие форматы доступа к файлам:

  • -rwx------ - просто файл, владелец может делать всё, остальные ничего
  • -rw------- - просто файл, владелец может читать и записывать в файл, остальные ничего
  • -rw-r--r-- - просто файл, владелец может читать и записывать, остальные читать
  • -rw-rw---- - просто файл, владелец и группа могут читать и записывать, остальные ничего
  • lrwxrwxrwx - символическая ссылка, все могут делать всё. На самом деле права зависят от файла, на который ссылается ссылка
  • drwxrwx--- - директория, владелец и группа могут делать всё.
  • drwxr-x--- - директория, владелец может делать всё, а группа читать список файлов и выполнять приложения внутри директории

Как изменять права доступа?

Стоит отметить, что изменение прав доступа к файлу возможно только от лица владельца данного файла. Ну или если вы являетесь суперпользователем.

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

  • 0, 000, —, ok
  • 1, 001, –x, no
  • 2, 010, -w-, no
  • 3, 011, -wx, no
  • 4, 100, r–, ok
  • 5, 101, r-x, ok
  • 6, 110, rw-, ok
  • 7, 111, rwx, ok

Сопоставим строковое представление с числовым

  • -rwx------ - 700
  • -rw------- - 600
  • -rw-r--r-- - 644
  • -rw-rw---- - 660
  • lrwxrwxrwx - 777
  • drwxrwx--- - 770
  • drwxr-x--- - 750

chmod 755 file

Рассмотренный формат установки разрешений требует от вас знать точно как должны выглядеть все права доступа. Это зачастую правда. Однако вам может быть интересен способ установки прав только для конкретной категории, а не для всех категорий сразу.

Для такого описания надо ввести следующие обозначения:

  • u - владелец файла
  • g - группа файла
  • o - все остальные
  • a - все

Для установки возможны следующие действия

  • = - установить точно такое значение
  • + - включить следующие разрешения
  • - - отключить следующие разрешения

Для описания разрешений используется rwx.

  • u+x - владельцу разрешить исполнять.
  • u-x - запретить владельцу исполнять.
  • +x - всем разрешить выполнять.
  • o-rw - у “остальных” отобрать права на чтение и запись.
  • go=rw - группе и остальным разрешить читать и записывать.
  • u+x,go=rx

Откуда берутся права по умолчанию?

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

А откуда берутся права? Для этих целей есть специальная настройка, которая контролируется с помощью umask.

  • test.txt - 0644
  • кат. test - 0755

Текущее значение umask: 0022

Можно считать, что права для файлов считаются по формуле: 0666 - umask, а для каталогов 0777 - umask.

Есть также специальные права на файлы

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

  • u+s, 4000 - позволяет запустить программу не от имени текущего пользователя, а от имени владельца. Обычно применяется для того, чтобы все пользователи могли выполнять некоторую задачу, которую они не могут сделать по причине отсутствия у них прав.
  • g+s, 2000 - заменяет группу пользователя на группу данного каталога.
  • +t, 1000 - запрещает удалять или переименовывать файлы в каталоге если пользователь не является владельцем каталога или директории.

Как сменить своё обличие

  • Выйти и зайти под другим пользователем.
  • su, т.е. switch user, поменять пользователя. В этом случае от имени нового пользователя будет (по умолчанию) запущен интерактивный терминал (bash)
  • sudo - выполнить 1 команду от имени другого пользователя.

su

su [-[l]] [user]

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

Аргумент -l говорит о том, что данное изменение следует считать первичным входом в систему. В этом случае будет применяться больше настроек Bash, которые указаны у пользователя, от имени которого мы хотим работать.

При работе от имени суперпользователя надо быть предельно аккуратным: ОС уже не следит за вашими действиями и не будет пытаться предотвратить потенциально пагубные действия.

Что делать?

  • Думать
  • Запускать по 1 команде от имени суперпользователя

С помощью su этого можно добиться следующим образом:

su -c 'cat /etc/shadow'

Минусы такого подхода:

  • Каждый раз вводим пароль.
  • Команда записывается как строка, поэтому нет никаких подсказок от Bash ( не работает).

Sudo решает проблемы su по вызову 1 команды

sudo cat /etc/shadow

Для сброса информации о введённом пароле вызовите sudo с ключом -K.

Для того, чтобы пользователь мог воспользоваться возможностями sudo его необходимо включить в соответствующую группу.