Freebsd как установить права на файл

Обновлено: 07.07.2024

Примеры использования команды chmod в символьном режиме

Права:

(Изначальное значение прав доступа файла file - rwxrwxrwx – полный доступ для всех) Отмена разрешения на выполнение файла для всех пользователей и групп:

Отмена записи в файл группой и остальными пользователями:

Разрешение выполнения файла владельцем:

Предоставление группе тех прав доступа, которыми владеет владелец файла:

Отмена чтения и запись в файл пользователям группы и другим пользователям:

Примеры использования команды chmod в абсолютном режиме

Разрешение чтения, записи, выполнения файла file всеми пользователями и группами (полный доступ):

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

Установка полного доступа к файлу для владельца и лишь чтения для группы и остальных пользователей:

Установка полного доступа к файлу владельцу файла и запрет доступа группе и другим пользователям:

Установка разрешений на чтение и запись для владельца файла и лишь чтения для группы и остальных:

Установка разрешений на чтение и запись владельцу файлу и его группе и запрет доступа для других:

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

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

Разрешение доступа к файлу на чтение и выполнение пользователю и остальным и запрет доступа для группы:

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

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

Результатом выполнения вышеприведенной команды будет рекурсивный “обход” всех подкаталогов текущего каталога и назначение полного доступа для всех пользователей и групп. В этой статье рассмотрены лишь некоторые примеры применения команды chmod. Если вы хотите узнать подробнее о работе команды chmod и правах доступа в Linux, обратите внимание на эту статью.

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

Многопользовательность предполагает наличие механизма регулирования прав доступа к любому ресурсу в системе. Существует три типа прав доступа: на чтение, запись и исполнение. Права сгруппированы три по три, соответственно чтение/запись/выполнение для владельца/группы/всех остальных. Численное представление:

ЗначениеПрава доступаСписок файлов каталога
0Ничего не разрешено ---
1Нельзя читать и писать, разрешено исполнять --x
2Нельзя читать и исполнять, разрешено писать -w-
3Нельзя читать, разрешено писать и исполнять -wx
4Разрешено читать, нельзя писать и исполнять r--
5Разрешено читать и исполнять, нельзя писать r-x
6Разрешено читать и писать, нельзя исполнять rw-
7Разрешено все rwx

Чтобы увидеть права доступа, можно воспользоваться опцией -l команды ls (1) . Формат вывода этой команды следующий (первая колонка):

Первый (считать слева) символ показывает тип файла: обычный файл, директория, символьное или блочное устройство, ссылка или другой объект. В нашем случае это - , то есть обычный файл. Следующие три символа (в данном случае это rw- ) задают права доступа владельца файла. Затем идут права группы, которой принадлежит файл ( r-- ). Последняя тройка ( r-- ) определяет права для всех остальных. Минус означает отсутствие каких-либо прав (т.е. нельзя ни читать, ни писать, ни выполнять). В данном случае права установлены таким образом, что владелец может читать и писать в в файл, а группа и другие может только читать. Таким образом, численное представление прав будет 644 .

Права на устройства контролируются аналогичным образом. Во FreeBSD все устройства представлены в виде файлов, которые можно открывать, читать и писать в них. Эти специальные файлы содержаться в директории /dev .

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

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

Существуют и другие права доступа, например, setuid-бит на выполняемые файлы и sticky-бит на директории. За дополнительными сведениями по этому вопросу обращайтесь к страницам системного справочника ( chmod (1) ).

Права доступа играют важную роль в формировании концепции безопасности ОС. В FreeBSD права доступа являются довольно простыми, в отличии от операционной системы Windows, где есть восходящее, нисходящее наследование. Конечно, такая гибкость в установлении прав доступа к определённым ресурсам это положительный момент, но слишком сложная система выставления прав может привести к серьёзной ошибке, что в свою очередь может скомпрометировать систему в целом.
В операционной система FreeBSD существует всего три стандартных флага (так же имеются специальные флаги), которые определяют те или иные права доступа:
r – чтение
w – запись
x – выполнение

Данные флаги применяются к следующим трём категориям:
u - Пользователь (owner)
g - Группа (group)
o - Другие (other)

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

Для просмотра установленных прав доступа, соответствующего владельца и группы на какой-либо ресурс используется команда ls(1) с опцией -l:

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

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

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

Пример:
Пользователь atrium является владельцем определённого файла и состоит в группе wheel. Права доступа на файл определены как rwx-r-x----, т.е владелец файла может записывать, исполнять, читать файл, а группа только читать и исполнять. Далее попробуем произвести запись в файл:

Как видим запись в файл произошла успешно.

2.Если пользователь не является владельцем файла, то проверятся, не состоит ли он в группе, которая имеет права доступа к ресурсу, если это так, то система определяет права доступа пользователю соответствующие правам группы. Если пользователь состоит в группе и для группы отсутствуют права, то доступ запрещается.

3.Далее, если пользователь не является владельцем файла и не состоит в группе, которая имеет доступ к файлу, то ему назначаются права определённые для других.

4.Особо проверяются права доступа для пользователя root. Если система видит, что пользователь имеет UID = 0, что соответствует root, независимо от login_name, то система вообще не проверяет права доступа к ресурсу, так как пользователь root имеет неограниченный доступ к системе.

Виды представления прав доступа:

Права доступа можно представить как в цифровом виде, так и в символьном.

1. Цифровой вариант

Так как права доступа назначаются трём категориям, и имеется три вида прав доступа, в результате всего назначается девять флагов:

(111 – 111 -111) – соответствует правам доступа 777.

Представление прав доступа основано на двоичной системе. Т.е каждой категории можно назначит три флага – чтение (r), запись (w), выполнение (x), что соответствует (111). 1 означает присутствие того или иного флага, 0 – соответственно отсутствие того или иного флага.

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

128 64 32 16 8 4 2 1

Управление правами доступа во FreeBSD

Как же нам перевести наши права доступа в десятичную систему? Давайте потренируемся.
Назначим файлу с именем test.txt следующие права доступа:

Теперь переведём полученные цифры:

u(user) – 111 – смотрим нашу таблицу соответствия справа налево, данной последовательности соответствуют цифры – 124, далее полученные цифры суммируем и получаем – 1+2+4 = 7
g(group) – 101 – проделываем то же самое – 1+4 = 5
o(other) – 100 – проделываем то же самое – 4 = 4

В результате наши права доступа на файл выглядят следующим образом – 754 и их можно назначить с помощью команды chmod(1).

Для обратного перевода, цифрового значения в двоичное, необходимо разделить на 2, остаток при делении соответствует единице, если деление без остатка – 0, записывается справа налево.


Так же для облегчения запоминания составим таблицу соответствующую цифровому представлению прав доступа:

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

1.Для владельца - чтение, запись, выполнение
2.Для группы – чтение и запись
3.Для других – чтение

Владелец: 0400 + 0200 + 0100 = 0700
Группа: 0040 + 0020 = 0060
Другие: 0004 = 0004

В итоге мы получаем права доступа для файла – 764, данные права можно назначить с помощью команды chmod(1).

2. Символьный вариант

Символьный вариант назначения прав доступа запомнить довольно легко. При данном способе назначения прав доступа учитываются четыре категории:
a - Все (all) (ugo)
u - Владелец (owner)
g - Группа (group)
o - Другие (other)

Для этих трёх категорий назначаются права доступа:
r – право на чтение [см. Таблица 1.4]
s – для u (owner) – setuid бит, для g (group) – setgid бит [см. Таблица 1.5]
t – stick бит [см. Таблица 1.5]
w – право на запись [см. Таблица 1.4]
x – право на выполнение [см. Таблица 1.4]

Над правами, описание которых представлено выше возможно выполнение следующих операций:
+ - добавляет указанные права доступа для той или иной категории
- - удаляет указанные права доступа для той или иной категории
= - назначает указанные права доступа, при этом отменяя предыдущие для той или иной категории

При назначении прав доступа с помощью символьного варианта, категории разделяются символом запятая (,). Для примера, файл имеет права доступа (rw- r— rw--), назначим ему следующие права доступа (rwx --x –w-):

или можно по-другому

Способов довольно много, как говорится, всё зависит от вашей фантазии, мне больше нравится в цифровом варианте.


Так же помимо стандартных прав доступа – чтение, запись, выполнение существуют специальные права доступа, их можно назначить как в символьном, так и в цифровом варианте:

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

1.Право записи установленное на каталог для группы, владельца или других позволяет удалить в нём любой файл в независимости от владельца и установленных на него прав доступа, поэтому с правом записи на каталог будьте весьма осторожны. Для решения данной проблемы можно использовать специальный флаг – Stick бит (1000), приведённый в таблице 1.5.

2.Право выполнения установленное на каталог позволяет применение для него команды ls(1) с ключом ‘–l', команды cd(1) так как происходит обращение к метаданным файлов.

3.Право чтения для каталога позволяет получить список файлов без подробной информации о них.

4.Права чтения и выполнения для каталога действуют независимо друг от друга, т.е наличие обоих прав доступа необязательно. Комбинацией данных прав доступа можно получить довольно интересные результаты:
При установленном праве выполнения на каталог, без права чтения позволяет создать так называемый “тёмный” каталог. Что это такое? В данном каталоге отсутствует возможность получить листинг находящихся в нём файлов, но имеется возможность обращаться к файлам, если их имена заранее известны. К примеру, создадим тёмный каталог и попытаемся получить листинг файлов в нём и прочитать один из файлов с заранее известным именем:

Установленные права доступа на тот или иной ресурс может изменить только владелец или суперпользователь с UID = 0.

Предопределение прав доступа

Существует весьма полезная команда umask(2), она задаёт маску на вновь создаваемые файлы в системе. Данную команду Вы можете встретить не только в ОС FreeBSD, но так же и в различном ПО (Samba….). В ПО она может применяться и для каталогов, но существует различие в способе высчитывания прав доступа для каталогов и файлов, которые определяет данная команда. Формат команды весьма прост, задаются три цифры, которые затем поочерёдно вычитаются из 7, если команда определяет права для каталогов и из 6, если команда определяет права для файлов. Для примера в ОС FreeBSD вы задаёте маску 240, это позволит задать права доступа на вновь создаваемые файлы 426, т.е в символьном представлении r---w-rw-:

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

chmod(1) – изменения прав доступа к тому или иному ресурсу.
chown(8) – изменение группы и владельца ресурса.
chgrp(1) – изменение группы ресурса.
ls(1) – чтение каталога и получение различной подробной информации.
stat(1) – получение статистической информации о файле, весьма полезная команда.
umask(2) – задаёт маску на создаваемые файлы для пользователя.

Практика:
(Для более подробной информации о командах обязательно читайте маны)

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

Войти

Авторизуясь в LiveJournal с помощью стороннего сервиса вы принимаете условия Пользовательского соглашения LiveJournal

Необходимый минимум о правах доступа к файлам и папкам

nas4free - программное обеспечение на основе FreeBSD. Поэтому вся основа - файлы, папки, права доступа - как в этой оси. (И вся это основа - очень близка к Linux, хотя и не полностью совпадает). Я попытаюсь предельно кратко и поверхностно описать эти самые права. Более полное и корректное описание см "Руководство FreeBSD" Права доступа. В соседних главах, кстати, тоже есть что почитать долгими зимними вечерами ;)

С правами доступа к файлам на NAS вы обычно сталкиваетесь, когда при попытке удалить файл на Windows шаре, а система не даёт. Если посмотреть на такой файл в файловом менеджере nas4free (как пример - files.db на картинке), то



в столбце справа видим запись -rw-r---r--. А у папки - drwxr-xr-x. Можно догадаться, что первая буква позволяет отличить папку (от слова directory) от файла. Так и есть. Бывают и другие значения, например l - (от link) софтлинк, ссылка на файл, примерно как ярлык в Windows.

Остальные 9 букв - три тройки. Первая тройка флагов - права для пользователя-владельца файла. Вторая - для тех, кто состоит в той же группе, что и основная группа владельца и третья - для всех прочих. В нашем примере для файла files.db владелец может его читать ( r - read), писать в него (включая изменять содержимое и удалять; w - write) и исполнять как программу (x - eXecute). Для папки флаг x имеет немного другое значение. Если не вдаваться в детали - для нормального чтения папки должны быть подняты флаги r и x.

Как менять права?
NB хорошая практика - давать доступ тем пользователям и туда, куда им положено. Она обязательна на работе. Да и дома позволяет ограничить доступ членам семьи туда, где они что-то могут по незнанию поломать. Так что если вы можете внедрить и использовать такую практику дома - так и делайте. А описываемая ниже практика с полным доступам ко всем данным годится только для важного частного случая домашней доверенной сети без доступа извне, в которой кроме вас никто файлы не пишет-стирает.

Для новичка наиболее простой способ сменть права одному-двум файлам - через файловый менеджер. Кликаем мышкой на строку прав файла (напр -rw-r---r--) - открывается диалог редактирования прав.

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

Команда ls c ключами la показывает полную информацию о файлах, включая права и владельцев

Команда chmod меняет права доступа

даст полный доступ ко всему содержимому папки /mnt/Pool/Media/test

Обращаться с ОСТОРОЖНОСТЬЮ. Например, команда chmod -R 777 /mnt/Pool/Media даст полный доступ к содержимому /mnt/Pool/Media - а это нежелательно. К примеру, у нас там был служебный файл .wd_tv и сломать доступ к нему - нехорошо. Ещё хуже, если мы нарушим доступ к чему-то более сложному, чем данные - к клеткам (jail), папкам с исполняемыми кодами и пр. Скорее всего просто перестанет работать. И починить будет непросто.

Соответственно, в Unix, права доступа и участники, сгруппированы три по три, read/write/execution для user/group/other. Кроме вышеупомянутых прав доступа, операционные системы Unix, поддерживает "файловые флаги", для обеспечения дополнительного уровня защиты, контроля и управления объектами системы. Например, с помощью флагов, можно запретить удаление файла, даже пользователю root. Вообще, правильней говорить не о правах пользователей, на тот или иной файл/директорию, а о правах процессов, так как все манипуляции с файлами ( создание, чтение, изменение, удаление ), производятся с помощью какой-то программы, например текстового редактора, который в запущенном виде, собственно и является процессом. Каждому пользователю системы, присваиваются идентификаторы, UserID ( идентификатор пользователя ) и GroupID ( идентификатор группы ), именно по ним операционная система определяет владельца и группу для того или иного объекта системы. Символические имена назначаются исключительно для удобства чтения, пользователями. Каждый процесс в операционной системе Unix, имеет не два, а четыре идентификатора, это, реальный UserID ( UID ) и эффективный UserID ( UID ) а так-же реальный и эффективный идентификатор группы GroupID ( GID ). Реальный UserID ( Реальный GroupID ) - реальные номера применяются для учета использования системных ресурсов. Эффективный UserID ( Эффективный GroupID ) - новый идентификатор, полученный процессом уже во время выполнения, применяются для определения прав доступа. Процессы запущенные автоматически ( например при старте системы ), так-же получают UserID, какой именно, определяется запускающей программой ( cron, inetd и т.д. ), в обычных случаях, UserID наследуется от родительского процесса. Некоторые процессы - "родители", могут присваивать, дочернему процессу - "потомку", UserID, не совпадающий со своим. Иногда, запущенный процесс, может во время выполнения, менять свои идентификаторы. Это происходит, когда в правах доступа на файл, установлены дополнительные биты, SUID ( Set user ID - бит смены идентификатора пользователя ) и SGID ( Set group ID - бит смены идентификатора группы ). Когда пользователь или процесс запускает файл, у которого установлен один из этих битов, процессу, временно присваиваются права владельца данного файла ( а не того, кто его запускает ). Таким образом, обычный пользователь, может выполнять команды от имени пользователя root. Как было упомянуто выше, права доступа к файлам и директориям, определяются по Реальному UserID и Реальному GroupID. Если идентификатор не меняется в процессе выполнения программы, Реальный UserID ( реальный GroupID ) и Эффективный UserID ( эффективный GroupID ) совпадают. Система обеспечения прав доступа в операционных системах Unix, имеет числовое и символическое, выражения. Числовае выглядит следующим образом: Плюс к этому, биты смены идентификаторов SUID и SGID, восьмеричные значения 4000 и 2000, как было сказано выше, они обеспечивают программам, доступ к файлам и процессам, к которым в обычных условиях, пользователь доступа не имеет. В случае установки бита SGID для директории, созданные в ней файлы, при запуске, будут принимать идентификатор группы каталога, а не группы в которую входит владелец файла. Существует еще один бит с восьмеричным значением 1000, так называемый Stiky-bit ( липучка ). Если данный бит установлен на директорию, содержащиеся в ней файлы, разрешено удалять и переименовывать, только в случае, если пользователь является, владельцем каталога, владельцем файла или это пользователь root. Символические выражения для установки прав доступа. В качестве аргументов команды chmod, вместо восьмеричных значений, используются буквенные эквиваленты. Что-бы посмотреть права доступа и владельцев на файлы и директории в режиме листинга, можно использовать команду ls с флагом -l. В данном листинге видно, что владельцем всех файлов является пользователь root и группа wheel. Первый символ слева в колонке прав доступа, означает тип объекта, объекты могут быть следующих типов:

- Обычный файл. b Специальный файл блочного устройства. c Файл символьного устройства. d Директория. l Символьная ссылка. p FIFO. s Сокет. w Whiteout ( скрытый ).

  • Файл file.txt, доступен на чтение и запись - пользователя, только для чтения - группой и для чтения - другим;
  • Файл file.sh, доступен на чтение, запись и выполнение - пользователем, только для чтения - группой, для чтения - другим;
  • test_dir, является директорией и имеет следующие права доступа, для пользователя: чтение, запись, выполнение; для группы: чтение, выполнение; для других: чтение, выполнение;
  • r ( Read ) - чтение. Соответствующий пользователь ( процесс ), имеет права на чтение содержимого данного файла, и копирования этого файла.
  • w ( Write ) - запись. Соответствующий пользователь ( процесс ), имеет права редактировать, изменять, удалять содержимое файла, добавлять в него что-либо ( например содержимое другого файла ). Однако, это не дает прав на удаление или переименование самого файла, это определяется правами доступа на директорию, в которой этот файл находится.
  • x ( eXecute ) - выполнение. Дает право, соответствующему пользователю ( процессу ), запускать данный файл, при условии что он является исполняемой программой или скриптом.
  • r ( Read ) - чтение. Разрешает получение списка содержимого данной директории ( файлов, поддиректорий ), однако, это еще не означает, что можно получить доступ к содержимому данной директории, читать, изменять или запускать файлы, находящиеся в ней, даже при условии, что права на самих файлах это разрешают. Как правило, данный атрибут устанавливается совместно с правами доступа на запуск, "x" ( eXecute ).
  • w ( Write ) - запись. Атрибут, позволяющий менять содержимое директории, то есть, создавать в ней новые файлы, копировать в нее файлы из других директорий, переименовывать и удалять файлы.
  • x ( eXecute ) - выполнение. Данный атрибут, в контексте директории, означает, что соответствующий пользователь, может зайти в директорию, получив доступ к файлам и поддиректориям и выполнять с ними какие-либо действия, при условии что права на самих файлах, это позволяют.

Важно помнить, что система полностью проверяет путь до конкретной поддиректории или файла, на наличие прав доступа, к каждому участку данного пути, и если на кокой-либо участок пути, не установлен соответствующий бит прав доступа ( x ), пользователю будет отказано в доступе. Проще говоря, есть путь: /usr/home/vds-admin/public_html/, даже если пользователь имеет достаточные права на поддиректории public_html, но на вышестоящую директорию, home, бит x не установлен, при попытке зайти в поддиректорию, ему будет отказано в доступе.

Читайте также: