Если вы имеете за плечами хотя бы небольшой опыт работы в Windows, то наверняка вам уже приходилось сталкиваться с такой штукой как права доступа. Последние являются одной из ключевых функций безопасности, отсутствие прав доступа означало бы полную беззащитность системы перед внешними атаками и вирусами, которые с легкостью смогли бы перезаписать любой системный файл. Полагаем, вы уже разобрались, как их задавать, впрочем, иначе не могло и быть, ведь устроены они довольно просто, а самое главное, логично.
Владельцем файла в Windows может быть либо операционная система, либо пользователь, который в свою очередь может иметь права гостя, обычного юзера и администратора, при этом возможности пользователя зависят от его статуса. Например, обычный пользователь не может изменять конкретный файл, тогда как администратор волен делать с файлом всё что ему заблагорассудится. Но когда пользователь Windows пытается применить ту же логику к Linux, то непременно сталкивается с трудностями понимания организации прав доступа.
Удивляться тут особо не приходится, ибо она основательно отличается от того, с чем приходится сталкиваться пользователю в Windows. Так, одним из ключевых отличий распределения прав доступа в Linux является назначение каждому файлу не только хозяина, но и группы. Кроме того, в линукс-системах имеются особые права доступа, позволяющие юзерам запускать приложения от имени суперпользователя без ввода его пароля, но обо всём по порядку.
На базовом уровне в Linux используются три параметра доступа к файлам. К ним относятся:
- Чтение — этот параметр позволяет просматривать содержимое файлов и директорий, но не вносить в них изменения.
- Запись — наличие этого параметра позволяет вносить в файл изменения и создавать/удалять файлы и папки в каталогах.
- Выполнение — особый параметр, предоставляющий разрешение на запуск исполняемых файлов — приложений и скриптов. Без этого ключа файлы приложений не будут идентифицированы как исполняемые.
Кроме того, в Linux имеется три категории пользователей, для которых могут быть изменены права доступа.
Таковыми категориями являются:
- Владелец — входящие в эту группу пользователи обычно имеют полный набор прав на созданные ими файлы, а также на файлы, для которых пользователь назначен владельцем.
- Группа — категория пользователей, связанная с файлом. По умолчанию группа создается для каждого юзера, при этом она имеет то же имя и ID, что и пользователь.
- Все остальные — эту категорию составляют все остальные пользователи, кроме владельца и не привязанных к файлу пользователей групп. Исключением является только суперпользователь (root), который имеет полный доступ ко всем файлам независимо от их атрибутов.
Стоит также упомянуть о специальных правах доступа, так называемых битах, расширяющих полномочия обычных пользователей.
- SUID — заменяет ID запускающего программу пользователя на ID другого юзера, того же Root.
- SGID — работает так же, как и SUID, только при этом запускающий файл пользователь будет считаться членом группы, с которой этот файл связан.
- Sticky-bit — в настоящее время флаг утратил актуальность, раньше он применялся при создании общих папок. Файлы, для которых он установлен, можно читать и исполнять, но нельзя удалять, если только желающий удалить файл не является его владельцем.
Смотрим права доступа
Но довольно теории, давайте теперь посмотрим, как просматривать и изменять права доступа в Linux. Узнать права доступа для файла или папки можно в свойствах объекта на вкладке «Права», но для получения полной картины лучше использовать терминал.
Откройте его в каталоге с файлами и выполните такую команду:
ls -l
Если нужно просмотреть права конкретного файла, к команде через пробел нужно добавить имя файла, например, ls -l NTUSER.DAT, если речь идет о папке, то указывается ее имя. В результате вы получите в терминале такую картинку.
Обратите внимание на набор из десяти символов в начале каждой строки, это символьное обозначение прав доступа в Линукс.
Первый символ обозначает тип данных, например, дефис означает, что вы имеете дело с обычным файлом, смотрите скриншоты ниже.
В следующих девяти символах «закодированы» права доступа. На самом деле, права указаны в каждой тройке символов, то есть полученную строку rwxrwxrwx можно представить как rwx-rwx-rwx. Первая группа — это права доступа хозяина объекта, вторая группа — это права системной группы, третья тройка символов означает права на файл для всех прочих пользователей.
А вот что означают сами символы:
Зная обозначения, можно легко разобрать любую комбинацию. Например, 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, а самое главное, умеете просматривать и изменять права. Уверены, эти знания очень вам пригодятся, позволяя максимально эффективно управлять доступом к пользовательским и системным файлам.
Добавить комментарий