Материал просмотрен 1,217 раз(а)

Владение файлом.

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

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

Для того, чтобы увидеть детали полномочий и владений для набора файлов воспользуемся командой ls с ключом -la (-l – ключ, дающий подробный листинг, -a для того, чтобы отобразить “скрытые” файлы, имена которых начинаются с точки).

Первая мысль после увиденного: “Что это?”. Хотя всё намного проще, чем кажется. Строка типа -rw-r–r– обозначает режим файла. Существует три модели прав владения файлом (каталогом): пользователь (user), группа (group) и другие (others). И три модели доступа: чтение (read), запись (write) и выполнение (execute).

Все эти позиции символов – это биты. По номерам.

  1. d, -. Означает “директория” и “файл” соответственно.
  2. r, -. Означает, может ли объект быть прочитан своим владельцем.
  3. w, -. Означает, может ли объект модифицироваться владельцем.
  4. x, -, s. Означает, может ли владелец выполнять этот файл, или (если “s”) может ли элемент выполняться в режиме setuid (об этом ниже).
  5. r, -. Может ли элемент быть прочитан членами той же группы, что и владелец.
  6. w, -. Может ли элемент быть модифицирован группой владельца.
  7. x, -, s. Может ли элемент выполняться группой владельца, либо выполняться в режиме setuid.
  8. r, -. Может ли элемент быть прочитан другим пользователем, отличным от владельца.
  9. w, -. Может ли элемент быть модифицирован другим пользователем, отличным от владельца.
  10. 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 – аналогично предыдущему;

Какой способ удобней – решать каждому. Но теперь мы знаем оба!