Права доступа к объектам файловой системы в Linux

Вольный перевод статьи с Slicehost.

Полномочия файлов в Linux суть весьма странная и непонятная штуковина. Чтобы вступить на путь понимания, следует начать делать что-то на практике.


Доступ к файлу

В любой многопользовательской операционной системе, например Linux, важно контролировать, какие пользователи могут изменять или удалять различные файлы. Такой контроль нужен не только в целях безопасности, это необходимо для предотвращения катастрофических последствий для самой операционной системы. Если пользователь имеет доступ к минимальному количеству файлов, тем меньше вероятность того, что корявые руки станут причиной удаления важного файла,  или конфиденциальная информация будет опубликована на общедоступном веб-сайте.

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

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

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

Основы: владелец

Каждый файл и каталог в файловой системе Linux имеет владельца. Так же, как собственник в «реальной жизни», владелец файла, это тот, кто имеет возможность  назначить права доступа для файла. Если пользователю «мама» принадлежит файл «игрушка», нужно разрешение мамы поиграть с этой игрушкой. Может быть, она даст вам возможность поиграться  с ней, или, может быть, она откажет вам в доступе к ней вообще. Или она просто позволит взглянуть на игрушку без разрешения играть с ней, не зная, какая это пытка для вас видеть ее, лежащую высоко на полке, недостижимую, только потому, что она думает, что вы  ее обязательно заграбастаете.

Вот же, что за извращенные фантазии? О чем это я?

Да, владелец. Пользователь, которому принадлежит файл, получает возможность изменить его права доступа. После этого все зависит от установленных разрешений — сможет ли кто-то (даже владелец)  читать файл, или изменить его, либо удалить его. Это просто права доступа, но какие далеко идущие последствия.

Группа файла

Хотя каждый файл принадлежит пользователю, который владеет им и может контролировать права доступа, каждый файл также принадлежит к группе. Понятие «Группа», в файловой системе Linux, описывает множество пользователей, которые имеют права доступа к файлам, которые могут отличаться от прав обычного пользователя. Пользователь может быть более чем в 1 группе, но файл может быть только в одной группе.

Группа собственности является очень удобным для владельца файла способом присвоить один набор разрешений файла для людей, которых он не знает («Смотрите, но не трогайте»), и еще один набор разрешений для людей, которым доверяет работать с файлом («Вы можете смотреть и трогать. Но более — никто «).

Смена владельца

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

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

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

chown

Для смены владельца используется команда сhown, которая имеет следующий синтаксис:

chown user:group file1 file2 file3

В этом примере user — это пользователь, которого вы хотите сделать владельцем, а group — группа, которой хотите присвоить файл. Двоеточие — разделитель между ними. После пользователя и группы через пробелы вводятся один или несколько файлов, для которых будет произведено изменение владельца. И пользователь и группа — необязательные параметры, которые можно по отдельности опускать. Если вы хотите просто изменить владельца файла, вы можете использовать:

chown user file1 file2 file3

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

chown :group file1 file2 file3

Важно отметить, что chown  также воспринимает точку вместо двоеточия при разделении имен пользователей и групп. Это устаревший синтаксис, но так как он до сих пор встречается в старых сценариях или в документации, в chown оставлена его поддержка для совместимости. Если вам встретится такой пример, вы можете использовать его для смены владельца, и он будет нормально работать, но я по-прежнему рекомендую использовать вместо этого двоеточие.

Почему не стоит использовать точку в качестве разделителя?  Потому что система позволяет создать пользователя, в написании которого присутствует точка. Например: john.smith. Скорее всего вы с этим не столкнетесь, но нельзя исключать такой вероятности, потому все же лучше используйте двоеточие.

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

chown john.smith: file1 file2 file3

chgrp

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

chgrp group file1 file2 file3

Это работает так же, как «chown :group«, но проще и набирать, и читать.

Использование  параметра -R

Если вы хотите изменить владельца не только в определенном каталоге, но так же и в его вложенных подкаталогах, то достаточно просто использовать параметр «-R», применить изменения «рекурсивно»:

chown -R user:group directoryname

Параметр «-R» работает так же и с командой chgrp.

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

Влияние на символические ссылки

Символическая ссылка -это что то вроде псевдонима для файла, аналог ярлыка в Windows. Вместо того, чтобы применить изменения к самой символической ссылке, по умолчанию файловая система будет применять их к цели символической ссылки. Так что, если символическая ссылка «link» указывает на файл «thefile», можно выполнить такую команду:

chown user:group link

Когда эта команда выполняется, система  на самом деле изменит владельца и группу для целевого файла «thefile». Владелец символической ссылки  «link» останется неизменным.

Если вы хотите изменить владельца и/или группу символической ссылки, советуем использовать параметр  «-h» для chown и chgrp, например:

chown -h user:group link

Основы: права доступа

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

Есть две вещи, которые надо знать о полномочиях. Первая связана с тем, «что» кто-то имеет право делать с файлом, то есть, какие действия мы можем проделать с объектов файловой системы, а вторая, кем этот «кто-то» может быть. Давайте посмотрим на возможности этого «что» прежде чем разобраться с  «кем».

Что можно сделать

Для файла или каталога существуют три типа действий: чтение, изменение и исполнение.

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

Чтение

Действие «Читать»  означает, что конкретный пользователь может прочесть файл. Если у вас нет разрешения на чтение для файла, вы не можете заглянуть внутрь и увидеть его содержимое.

Разрешение «Читать» для каталога дает возможность просматривать список файлов этого каталога. Однако следует отметить, что для этого нужно так же иметь разрешение  на действие «Исполнять».

Запись

Разрешение на действие «Запись» определяет, можете ли не изменить содержимое файла. Если вы хотите изменить текст в HTML-файле, к примеру, вам нужно иметь разрешение на запись, прежде чем вы можете это сделать.

Разрешение на действие «Запись» для каталога определяет, можете ли вы можете добавлять, удалять и переименовывать файлы в этом каталоге.

Обратите внимание, система полномочий работает таким образом, что только разрешение на запись для каталога, в котором мы находимся, влияет на то, сможете ли вы переименовать или удалить файл. На уровне операционной системы, во всяком случае — некоторые программы, например, «RM», будут делать проверки и не дадут удалить файл, которым вы не владеете. Но нет никакой гарантии, что другая программа, которая не имеет аналогичных проверок, встроенных в нее, не позволит удалить файл, который вы можете изменять, но которым не владеете.

Полномочия на переименование и удаление могут показаться немного непонятными, пока вы не вдумаетесь в то, о чем мы уже говорили ранее: файловая система считает, что каталог — это просто особый вид файла. Если вы начнете думать о каталоге, как о специальном файле, который содержит перечень файлов в нем содержащихся и как их найти на диске, — соответственно, разрешение на запись в каталог-«файл» позволит Вам удалить или изменить этот список.

Надоело писать 😉 Потом продолжим

Права доступа к объектам файловой системы в Linux: 1 комментарий

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

CAPTCHA
Reload the CAPTCHA codeSpeak the CAPTCHA code