Содержание
Владение файлом.
Вот так, потихоньку, мы и подошли к понимаю модели владения файлами в операционной системе FreeBSD. Да и не только FreeBSD, всем операционным системам семейства UNIX присуща одна и та же структура принадлежности. Файл может принадлежать как пользователю, так и группе.
Чтение прав доступа
Для того, чтобы увидеть детали полномочий и владений для набора файлов воспользуемся командой ls с ключом -la (-l – ключ, дающий подробный листинг, -a для того, чтобы отобразить “скрытые” файлы, имена которых начинаются с точки).
Первая мысль после увиденного: “Что это?”. Хотя всё намного проще, чем кажется. Строка типа -rw-r–r– обозначает режим файла. Существует три модели прав владения файлом (каталогом): пользователь (user), группа (group) и другие (others). И три модели доступа: чтение (read), запись (write) и выполнение (execute).
Все эти позиции символов – это биты. По номерам.
- d, -. Означает “директория” и “файл” соответственно.
- r, -. Означает, может ли объект быть прочитан своим владельцем.
- w, -. Означает, может ли объект модифицироваться владельцем.
- x, -, s. Означает, может ли владелец выполнять этот файл, или (если “s”) может ли элемент выполняться в режиме setuid (об этом ниже).
- r, -. Может ли элемент быть прочитан членами той же группы, что и владелец.
- w, -. Может ли элемент быть модифицирован группой владельца.
- x, -, s. Может ли элемент выполняться группой владельца, либо выполняться в режиме setuid.
- r, -. Может ли элемент быть прочитан другим пользователем, отличным от владельца.
- w, -. Может ли элемент быть модифицирован другим пользователем, отличным от владельца.
- x, -, t. Может ли любой пользователь выполнять этот элемент, либо, (если “t”) элемент является “не поддающимся командам” (“sticky”) каталогом, в котором пользователь не может удалять файлы, если он им не владеет.
Таким образом комбинация:
drw-r–r– означает: директория, владелец может как читать, так и модифицировать, члены его группы могут только читать, любые другие пользователи могут только читать.
-rwxrwxrwx означает, что этот файл могут и читать и модифицировать абсолютно любые пользователи. И т.д.
Удобней всего представлять список прав в таком виде:
[d] [rwx], [rwx], [rwx], т.е. первый бит отдельно, а далее тройками для пользователя, группы и остальных соответственно.
Ну есть также общие правила:
Файл, который может быть удалён – можно и переименовать.
Файл, который можно прочитать – можно и скопировать.
Изменение владельца файла и прав доступа.
Будучи суперпользователем, мы можем отдавать свои файлы другим пользователям, либо менять владельца файла по своему усмотрению. Для этого служит команда chown (“change own”):
# chown user file1.txt
установит владельцем file1.txt пользователя user, но не сменит группу. Точно так же можно воспользоваться этой командой, чтобы сменить владельца у каталога:
# chown -R user /home/user
Минуточку. А что это за ключ -R? Мы о нём не говорили! Исправляюсь. Ключ -R означает рекурсивную обработку и применяется для каталогов. То есть для каждого файла в каталоге, для каждого подкаталога в каталоге и для файлов в них. И так далее. В общем применит команду для всех элементов внутри директории. Очень полезно :).
Аналогичным образом действует команда chgrp (“change group”):
# chgrp users file1.txt
изменит группу владельца на users. По умолчанию, FreeBSD создает для каждого пользователя персональную (первичную) группу с именем пользователя. Например пользователь “ivan” будет состоять в группу “ivan” и т.д.
И наконец – смена полномочий доступа. Команда chmod (“change mode”). Эта хитрая команда может работать двумя способами – численном и символическом. Какой удобней – решать вам, но знать лучше всего оба.
Числовой способ назначения режима доступа:
Самый простой способ – установить трёхразрядное восьмиричное число, которое уникально определяет полномочия для каждого типа владения. Каждый разряд относится к определённому режиму владения, соответственно для пользователя, группы и остальных. А биты таковы:
- 0 – нет полномочий;
- 1 – выполнение (поиск);
- 2 – запись;
- 4 – чтение;
Комбинация вычисляется соответственно суммой этих бит. Например 755 будет значить то же самое, что rwxr-xr-x. 777 – соответственно rwxrwxrwx, 644 – rw-r–r–и т.д. Схема понятна, надеюсь.
Таким образом может быть доступно только 3 из 4 разрядов. Четвёртый, “самый старший” разряд управляет дополнительными функциями. Биты сейчас и рассмотрим:
- 0. Обычные полномочия;
- 1. “sticky”-бит. Может быть установлен только для каталогов, превращая их в каталоги “только для добавления”, в которые файлы можно добавлять, но не удалять.
- 2. “setgid”, если этот бит установлен для исполняемого файла, то файл будет выполняться с групповыми полномочиями группы-владельца файла, а не того пользователя, кто запустил файл. Этот бит можно выставить только от имени суперпользователя.
- 4. “setuid”. Аналогично, если выставлен этот бит для исполняемого файла, то файл будет выполняться от имени владельца, независимо от того, кто запустил файл.
Таким образом назначение прав
# chmod 755 file.txt
на самом деле означает
# chmod 0755 file.txt, но старший бит можно опускать.
Символическое изменение режимов
Доступен второй способ, с указанием алфавитных флагов. Основные литеры:
- u (пользователь),
- g (группа),
- o (другие),
- a (все).
Права доступа:
- r (чтение),
- w (запись),
- x (исполнение),
- t (“липкий” бит),
- s (setuid, setgid биты).
Операции:
- + (добавление),
- – (отъем),
- = (установка)
Примеры здесь:
- g+w – добавляет полномочия на запись группе владельцу;
- +x – добавляет полномочия на исполнение для всех;
- o-r – отменяет полномочие на чтение остальным пользователям;
- ugo=rw – устанавливает для всех полномочия чтения-записи;
- a=rw – аналогично предыдущему;
Какой способ удобней – решать каждому. Но теперь мы знаем оба!
Comments: