Немного о правах в Linux

Разграничение доступа

Linux это среда выполнения и инструмент для организации хранения файлов. Системных и пользовательских.

Права разделяются как минимум на две категории:

  1. Доступ к файлам и каталогам для пользователей.
  2. Доступ к файлам и каталогам для программ.

В самом простом случае, в ОС Linux присутствует как минимум один пользователь. Он и пользователь, и администратор компьютера. По умолчанию его зовут root и когда он создает файлы, то они наследуют принадлежность к пользователю root, а также набор прав доступа к этим файлам. И никто, кроме root изначально не имеет доступа к этим файлам.

В системе существуют программы. Они начинают работать с момента загрузки компьютера и вплоть до момента выключения. Последняя программа иницилизирует отключение питания.

Поскольку в системе Linux на каждый файл назначены свои права доступа, а также тот факт, что в Linux любой объект это файл, следовательно, к этому файлу должно быть право доступа у пользователя. Если у нас пользователь root запускает программу, то этой программе передаются права пользователя root и эта программа также будет иметь права доступа к файлу, которому назначены права пользователя root. В классическом Linux пользователь root имеет монопольный доступ ко всем объектам системы, даже к тем, которым назначены права других пользователей. Он имеет право менять права доступа к файлам, назначать произвольную группу и произвольных пользователей. Поэтому в чистом виде рассматривать пользователя root не имеет смысла. Например в Alt Linux по умолчанию действует трехуровненвая система прав доступа:

  1. Пользователи.
  2. Неполный root.
  3. Root.

В классическом Debian действует двухуровневая и полуторная система прав:

  1. Пользователь.
  2. root.

Полуторная система:

  1. Пользователь.
  2. Sudouser — реализация полуторной системы, когда пользователю передаются root права. Она довольно гибкая и можно установить пользователю необходимый уровень доступа.

Программа sudo предназначена для присвоения прав root пользователю user. В Altlinux, чтобы разрешить sudo для пользователя нужно обратиться к документации, где описана эта процедура.

Визуально, систему прав доступа можно показать так:

На картинке выше показано, что файл setup-nextcloud.php принадлежит пользователю aleksey, группе aleksey и права 0644. Это восьмеричная форма записи прав доступа.
я пока не рассматриваю первый разряд, число которого 0. Но число 6 это разрешение чтения и записи файла для пользователя, 4 это право только на чтение пользователям, входящим в группу aleksey, 4 это право на чтение файла остальным пользователям.
более подробно права доступа описаны в следующей таблице:

Восьмеричная записьЧеловекопонятнаяПрава на файлПрава на каталог
0нет правнет прав
1—xвыполнениечтение файлов и их свойств
2-w-записьнет прав
3-wxзапись и выполнениевсё, кроме чтения списка файлов
4r—чтениечтение имен файлов
5r-xчтение и выполнениечтение имен файлов
6rw-чтение и записьчтение имен файлов и запись файлов в каталог
7rwxполный доступполный доступ к каталогу

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

Группы пользователей

Группы пользователей появились неслучайно. Даже в пределах одной системы и одного компьютера невозможно обойтись всего двумя пользователями. По крайней мере в Linux. Хотя в Windows ситуация не отличается. И очень часто некоторые процессы должны запускаться от имени фиктивного пользователя и не должны выходит за пределы своих компетенций. Например большинство веб-служб имеют пользователя www-data и полномочия этого пользователя ограничены группой www-data. Если конкретного пользователя добавить в группу www-data, то этот пользователь будет иметь доступ к тем файлам, к которым имеют права доступа пользователи группы www-data. То-есть может быть владелец aleksey:www-data, где www-data — группа пользователей. Тогда права на файлы и каталоги должны устанавливаться вторым битом (070) например.

Почему? Вхождение пользователей в группы определяет компетенции конкретного пользователя.

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

По философии Linux, у простого пользователя должен быть ограниченный набор прав доступа к системе. По классике. В голом linux у пользователя изначально вовсе нет никаких прав, кроме как для работы в «домашней» папке. Ему запрещено всё, в том числе работа с флешками, cd/dvd, настройка сети, времени, да и вообще, всего, чего не должен касаться пользователь. За него должен всё настроить администратор.

Почему бы не дать эти привилегии пользователю? Ведь по большей мере пользователь устанавливает Linux для себя, чтобы работать на своем ПК.

Здесь философия проста: пользователю что не разрешено, то запрещено.

Продолжение следует