Linux определить права папки

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

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

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

Удивляться тут особо не приходится, ибо она основательно отличается от того, с чем приходится сталкиваться пользователю в Windows. Так, одним из ключевых отличий распределения прав доступа в Linux является назначение каждому файлу не только хозяина, но и группы. Кроме того, в линукс-системах имеются особые права доступа, позволяющие юзерам запускать приложения от имени суперпользователя без ввода его пароля, но обо всём по порядку.

На базовом уровне в Linux используются три параметра доступа к файлам. К ним относятся:

  • Чтение — этот параметр позволяет просматривать содержимое файлов и директорий, но не вносить в них изменения.
  • Запись — наличие этого параметра позволяет вносить в файл изменения и создавать/удалять файлы и папки в каталогах.
  • Выполнение — особый параметр, предоставляющий разрешение на запуск исполняемых файлов — приложений и скриптов. Без этого ключа файлы приложений не будут идентифицированы как исполняемые.

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

Таковыми категориями являются:

  • Владелец — входящие в эту группу пользователи обычно имеют полный набор прав на созданные ими файлы, а также на файлы, для которых пользователь назначен владельцем.
  • Группа — категория пользователей, связанная с файлом. По умолчанию группа создается для каждого юзера, при этом она имеет то же имя и ID , что и пользователь.
  • Все остальные — эту категорию составляют все остальные пользователи, кроме владельца и не привязанных к файлу пользователей групп. Исключением является только суперпользователь (root) , который имеет полный доступ ко всем файлам независимо от их атрибутов.

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

  • SUID — заменяет ID запускающего программу пользователя на ID другого юзера, того же Root .
  • SGID — работает так же, как и SUID , только при этом запускающий файл пользователь будет считаться членом группы, с которой этот файл связан.
  • Sticky-bit — в настоящее время флаг утратил актуальность, раньше он применялся при создании общих папок. Файлы, для которых он установлен, можно читать и исполнять, но нельзя удалять, если только желающий удалить файл не является его владельцем.

Смотрим права доступа

Но довольно теории, давайте теперь посмотрим, как просматривать и изменять права доступа в Linux. Узнать права доступа для файла или папки можно в свойствах объекта на вкладке «Права», но для получения полной картины лучше использовать терминал.

Откройте его в каталоге с файлами и выполните такую команду:

Читайте также:  Теми до windows безкоштовно

ls -l

Если нужно просмотреть права конкретного файла, к команде через пробел нужно добавить имя файла, например, ls -l NTUSER.DAT , если речь идет о папке, то указывается ее имя. В результате вы получите в терминале такую картинку.

Обратите внимание на набор из десяти символов в начале каждой строки, это символьное обозначение прав доступа в Линукс.

Первый символ обозначает тип данных, например, дефис означает, что вы имеете дело с обычным файлом, смотрите скриншоты ниже.

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

А вот что означают сами символы:

Зная обозначения, можно легко разобрать любую комбинацию. Например, rwx означает, что пользователь или группа имеет права на чтение, запись и исполнение, r-x — права на доступ и исполнение, но с запретом на изменение или удаление, rw- станет означать наличие прав на чтение и запись, но не право запускать файл как исполняемый.

Как в Linux определить и заменить пользователя и группу

Как вы уже знаете, права в Linux могут иметь не только пользователи, но и группы, в связи с чем может возникнуть вопрос: а как определить имя владельца и название группы? Элементарно, их выводит та же команда ls -l . В третьей колонке слева указано имя владельца объекта, название же связанной с объектом группы указано в четвертой колонке.

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

sudo chown u:g file

chown — это сама команда замены, u — имя пользователя, которому желаем делегировать права, g — название группы, а file — название самого файла. В данном случае мы передаем права суперпользователю — root .

Меняем права в Линукс для объектов ФС

Если за замену пользователя и группы в Линукс отвечает команда chown , то для изменения прав доступа в системе предусмотрена команда chmod .

Она имеет следующий синтаксис:

chmod категория действие права объект

Что такое категории вы уже знаете, это владельцы файлов, группы и все остальные пользователи. Обозначаются категории как u, g и o соответственно. Для сразу всех категорий используется обозначение a. Категории можно группировать, например, ug станет означать, что мы хотим изменить права на объект для владельца и группы.

Действие — это изменение прав. Для присвоения прав используется ключ «=», для добавления указывается флаг «+», чтобы забрать права, нужно использовать ключ «-». С обозначениями прав вы также уже знакомы. Всё, можно формировать команды.

Сделаем для примера файл ntuser.ini недоступным для редактирования и исполнения:

chmod ug-wx ntuser.ini

В результате символьное представление прав стало таким: r—r—rwx. Как видите, права на файл были изменены для текущих владельца и группы, но не для категории «Все остальные» , если же бы мы вместо ug указали ugo или a, право на чтение и исполнение потеряли бы все категории. Обратите внимание, что в данном случае мы не использовали sudo в начале команды, поскольку и так являемся владельцем. Если же бы изменяли права root или другого пользователя, использование sudo было бы обязательным.

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

Источник

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

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

Читайте также:  Windows 10 зависает намертво периодически 2020

Прежде всего, отметим привилегированного пользователя root, для которого права других пользователей не играют роли вообще: ему позволено делать с созданными ими объектами всё что угодно. Речь пойдёт о непривилегированных пользователях.

В системе существует 2 основных объекта файловой системы: файлы и папки (директории). И если права на папку задаются её владельцем:группой и 4-мя триадами битов разрешений (superbits:user:group:others), то для определения прав доступа к файлу необходимо учитывать ровно в два раза больше данных: для самого файла и для папки, в которой он находится. Последнее обстоятельство нередко ускользает из поля зрения при анализе прав доступа к файлам.

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

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

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

  • Прочерком обозначено отсутствие изменений (неизменность исходных параметров).
  • Очевидно, что во всех случаях для доступа к объектам внутри папки должен быть установлен execution бит «x«, то есть без этого бита ни о каких операциях над её объектами речи быть не может.
  • Обратите внимание, что при удалении, переименовании и перемещении файла его собственные права не играют никакой роли — учитываются лишь права на папку, в которой он находится.
  • Кроме того, изменение владельца файла происходит лишь в том случае, когда изменяется его i-node. Поэтому при переименовании и перемещении файлов сохраняются права их оригинальных владельцев, тогда как при копировании владелец и группа меняются на того, кто копирует.
  • Права доступа на вновь создаваемый файл определяются маской umask, которая задаётся отдельно для каждого пользователя системы. Владельцем файла становится его создатель, а группой — первичная группа создателя. Исключением является случай, когда на папке, в которой находится файл, установлен бит SGID (2000): вновь создаваемые файлы и папки будут иметь группу папки, а не первичную группу создателя. Это полезно, если группа пользователей работает над неким проектом и важно, чтобы все файлы проекта принадлежали одной и той же группе.
  • Следует также отметить и Sticky bit (1000), который устанавливается на папку для того, чтобы пользователи не могли удалять чужие файлы даже при наличии на это формальных полномочий. Ярким примером является директория /tmp.
  • При копировании непривилегированными пользователями биты SUID и SGID сбрасываются, хотя остальные триады прав сохраняются.

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

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

Пример 1. Имеется файл samfile в папке testfolder с указанной принадлежностью и правами. Необходимо определить, что сможет сделать с ним пользователь den, если и он и sam входят в группу admins.

  1. Выясняем соответствие триад прав «den — папка»
    • Пользователь den не совпадает с владельцем папки root, поэтому первая триада отбрасывается.
    • Пользователь den входит в группу admins, следовательно мы имеем соответствие прав во второй триаде и останавливаемся на ней. Триада прав по папке: rwx.
  1. Выясняем соответствие триад прав «den — файл»
    • Пользователь den не совпадает с владельцем файла samfile, поэтому первая триада отбрасывается.
    • Пользователь den не входит в группу sam, поэтому вторая триада тоже отбрасывается.
    • Остаётся третья триада, поскольку den для этого файла относится к категории «другие». Триада прав по файлу: r—
    • Теперь, совмещая эти триады прав мы можем определить, что den может делать с файлом samfile всё, кроме редактирования, поскольку для редактирования триада прав на файл должна быть не менее -wx.
Читайте также:  Не устанавливается windows вылетает синий экран

Пример 2. Теперь предположим, что пользователь den не входит в группу admins.

Тогда мы должны выбрать последнюю триаду прав по папке: r-x.
Совмещая триады прав по папке и файлу получаем, что den может лишь читать файл samfile, но ничего более делать с ним не может.

Резюмируя, можно сказать, что эффективные права доступа могут формироваться из разнородных триад: релевантная триада для папки может оказаться групповой, а триада для файла — «для других». Поэтому навскидку не всегда удаётся определить их правильно.

Обратите внимание также на то, что в определении прав доступа участвуют целых три стороны: субъект, владелец:группа папки и владелец:группа файла.

Альтернативный выбор прав в триадах

Пользователь может быть как владельцем объекта, так и входить в его группу. В этих случаях предпочтение отдаётся триаде пользователя, а триада группы игнорируется.

Пример 1. Сможет ли sam удалить файл samfile, если он входит в группу admins?

  1. Выясняем соответствие триад прав «sam — папка»
    • Пользователь sam совпадает с владельцем папки samfolder, но также входит в группу admins. В этом случае следует отдать предпочтение триаде пользователя rwx.
  1. Выясняем соответствие триад прав «sam — файл»
    • Пользователь sam совпадает с владельцем файла samfile и входит в группу sam. Здесь также необходимо выбрать триаду пользователя —.

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

Каким образом сделать файл редактируемым и читабельным для пользователя sam? Он был бы таковым, если бы «победила» групповая триада rw-. Очевидно, чтобы групповая триада «сработала», достаточно просто поменять владельца файла, тогда первая триада перестанет быть релевантной пользователю sam и отпадёт сама собой. В самом деле, сменив владельца файла на любого другого, например, root, можно убедиться в том, что файл стал для sam-а читабельным и редактируемым.

Определение прав доступа для папок

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

Операции редактирования содержимого для папок как такового нет, поэтому эта строка опущена.

Наиболее тривиально определяются права на корневые папки, поскольку для них нет родительских.

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

Важно понимать, что права на папки в Linux не наследуются. Это значит, что если вы не имеете доступа в некоторую папку, то это не запрещает доступа в подпапку этой папки, если для вложенной папки выставлены соответствующие права.

Расширение прав доступа в Linux с помощью Posix ACL

Списки доступа согласно стандартам Posix позволяют явным образом переопределить права на любой объект для любого пользователя и, фактически, подменяют собой функционал традиционной системы прав Linux. Они позволяют сделать с правами на объекты практически всё, что не удаётся сделать путём традиционных манипуляций с включением пользователей в разные группы и перетасовкой их триад прав.

Вы можете ознакомиться с примером применения Posix ACL для решения конкретной задачи.

Источник

Оцените статью