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

При разработке программного обеспечения (ПО), в том числе и операционных систем (ОС) ключевым аспектом является обеспечение безопасности конечного продукта. Вероятнее всего, создать абсолютно безопасную систему невозможно — любые замки могут быть сколь угодно крепкими, однако они также должны отпираться. Поэтому задача при разработке и реализации систем безопасности сводится к тому, чтобы максимально усложнить процесс её взлома или обхода потенциальным злоумышленникам.

Одним из немногих существующих способов построения безопасности в ПО является организация прав доступа к ресурсам системы среди пользователей, пользовательских групп, а также ролей. Такую организацию можно рассматривать в виде функционального блока, который на входе принимает значения пары «пользователь/действие», а на выходе выдаётся решение, определяемое допустимостью каждого действия для пользователей.

Архитектурные особенности управления доступом

В ОС Linux, как и в других Unix-подобных системах никогда не было централизованного управления доступом. Но для реализации этой задачи изначально используются основные и обязательные правила:

  1. Все объекты в системе (файлы, процессы) принадлежат своим владельцам, которые обладают полноценным контролем над собственными объектами.
  2. Тот, кто создаёт объекты, изначально и является его владельцем.
  3. В системе всегда существует пользователь root, так называемый суперпользователь, который имеет полный доступ ко всем объектам любых других владельцев (пользователей).
  4. Административные задачи могут выполняться только суперпользователем.

Для реализации этого комплекса правил в ОС Linux существует код, который распределён практически по всем основным компонентам системы и рассчитывает окончательное решение для предоставления/распределения доступа.

Например, файловая система Linux имеет собственную систему управления правами, в основе которой лежит реализация принципа UNIX-групп. Надо отметить также, что это самая сложная система, гораздо сложнее любой другой, сосредоточенной, например, в ядре.

Некоторые системные вызовы, при их выполнении «завязаны» только на пользователя root и в данном случае выполняется проверка, собственно, пользователя. И также существуют такие системные вызовы, для выполнения которых, кроме проверки пользователя должны соблюдаться определённые условия, которые довольно сложно вычисляются.

Управление доступом для файловой системы

Концепция UNIX-подобных систем предполагает, что каждый файл в системе принадлежит определённым владельцу и группе. У файла может быть только один владелец, в то же время в группе владельцев может быть несколько пользователей. Лишь тот, кто владеет файлом, может задавать права доступа на собственные файлы (причём таким образом, что только владелец сможет получить доступ к ним) и определять, какие операции над ними разрешены для членов группы и всех остальных пользователей.

Узнать владельца, группу, а также разрешения для конкретного файла позволяет команда ls -l имя_файла, например:

$ ls -l /home/john/my_tasks
-rw------ 1 john work 1258 Jun 18 14:46 /home/john/my_tasks

Этот вывод означает, что объектом  my_tasks владеет пользователь john, а принадлежит он (файл) группе work. Первый столбец, содержащий дефисы и буквы показывает права доступа для владельца — «-rw», для группы — «—» и последние 3 дефиса — для всех остальных.

Важно понимать, что файловая система (и ядро) отслеживают идентификаторы пользователей — так называемые UID (User ID), специальные уникальные номера, присваиваемые им системой при создании. Идентификатор суперпользователя root равен 0. Сами идентификаторы с соответствующими им именами обычно хранятся в /etc/passwd. Информация о группах, т. е. о GID (Group ID) находится в /etc/group. Текстовые имена пользователей предназначены для удобства восприятия.

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

Для изменения прав существует команда chmod. Первым её аргументом является описание новых прав, вторым — файлы, к которым эти права применяются. Как уже отмечалось, права доступа к файлам могут изменять владельцы этих файлов или пользователь root.

Существуют восьмеричная и мнемоническая спецификации прав доступа. Мнемоническая предусматривает следующие обозначения: «r» – чтение, «w» – запись и «x» – исполнение (запуск), которые записываются в наборе из трёх символов. Например, запись «-rw——» означает, что для файла разрешены чтение («r») и запись («w»), только для владельца – «-rw», а для группы и всех остальных пользователей доступ к файлу закрыт — символ дефиса означает запрет.

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

Восьмеричное представление Двоичное представление Режим доступа Восьмеричное представление Двоичное представление Режим доступа
0 000 4 100 r—
1 001 —x 5 101 r-x
2 010 -w- 6 110 rw-
3 101 -wx 7 111 rwx

Например, команда:

$ chmod 711 my_tasks

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

В случае с мнемонической записью прав, отсутствует возможность задавать разные режимы доступа сразу для всех категорий, например команда:

$ chmod ugo+w my_tasks

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

$ chmod ugo-w my_tasks

разрешение на запись запрещает.

Запись «ugo» означает набор категорий объектов: «u» – «user», т. е. владелец, «g» – «group» – группа и «o» – «other» – все остальные. Символы «+» и «-» означают добавление и удаление соответственно. Еще используется символ «=», для указания только того, что явно указывается, например:

$ chmod go=r my_tasks

разрешит группе и всем остальным только чтение, независимо от того какими правами на этот файл они обладали ранее.

Смена владельца и группы

Для того, чтобы сменить владельца и группу файла необходимо воспользоваться командой chown. Её синтаксис аналогичен команде chmod, за исключением того, что в качестве первого аргумента выступает запись вида «user:group». Для того чтобы изменить группу файла, необходимо либо быть владельцем файла и входить в назначаемую группу, либо быть пользователем root. Пример:

$ chown john:michael my_tasks

Эта команда назначит файлу my_tasks в качестве создателя  пользователя john и добавит его в группу michael. Следует быть осторожным при использовании этой команды и применять её только в случае, если однозначно понятно, чего нужно добиться в результате.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

ИТ Проффи

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: