Права на файлы и каталоги в Linux

Аватар пользователя userok


Права на файлы и каталоги в Linux

Доброго времени суток посетители сайта it-cat.biz. Если вы работаете или только начинаете работать с ОС Linux, то рано или поздно вы столкнётесь с необходимостью назначения/изменения прав пользователей на файлы и каталоги. Зачастую если в Linux «что-то не работает», всё решается просто установкой соответствующих разрешений.

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

Рассмотрим таблицу:

Чтение (Read) Изменение (Write) Исполнение (eXecute) Результат
Владелец r (4) w (2) x (1) rwx (7)
Группа r (4) w (2) x (1) rwx (7)
Остальные r (4) w (2) x (1) rwx (7)

В таблице представлены права с полным доступом для всех, которые можно кратко записать так: rwx-rwx-rwx или так: 777.

Если подобные разрешения применены к каталогу, то все пользователи имеют право входа в данный каталогу(выполнение), могут создавать, удалять и переименовывать файлы в нём (изменение) и просматривать содержимое каталога(просмотр).

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

В GNU/Linux существует три категории пользователей c точки зрения безопасности.
У каждого файла есть владелец, которому можно присвоить разрешения на запуск/чтение/изменение, группа которой тоже можно задать свои разрешения и все остальные, которым тоже в свою очередь можно назначить свои разрешения.

Для удобства разрешение на чтение может обозначаться как буквой r так и цифрой 4, на изменение - буквой w или цифрой 2 и на выполнение буквой x или цифрой 1. В чём же тут удобство? А в том, что складывая эти цифры мы получаем результат, которым очень удобно пользоваться при изменении разрешений из консоли. Давайте перечислим все возможные значения для пользователя/группы:

1 - право на исполнение файла (вход в каталог)
2 - право на изменение содержимого файла (каталога)
3 (1+2) - право на исполнение файла (или вход в каталог) и право на изменение содержимого файла(каталога)
4 - право на просмотр содержимого файла (каталога)
5 (1+4) - право на исполнение файла (вход в каталог) и просмотр содержимого файла(каталога)
6 (2+4) - право на просмотр и изменение содержимого файла (каталога)
7 (1+2+4) - право на просмотр и изменение содержимого файла (каталога), исполнение файла или вход в каталог, т. е. полные права доступа.

Т.к. в Linux предусмотрено три категории пользователей, то результирующие права записываются тремя цифрами (от 1 до 7), первая цифра — результирующие права для владельца файла/каталога, вторая — результирующие права для группы и, наконец, третья -результирующие права для всех остальных. Например: 777, 751, 700 итд. Чаще всего первая цифра это 7 т. е. полный набор прав у владельца, но не обязательно.

Итак кратко резюмируем:

Разрешение: Применительно к файлу Применительно к каталогу
Чтение read, r, 4 Просмотр содержимого файла Просмотр содержимого каталога (списка файлов и папок)
Изменение write, w, 2 Изменение содержимого файла Изменение содержимого папки (списка файлов и папок)
Исполнение execute, x, 1 Запуск файла на исполнение Права входа в каталог

Права с номерами 3,5,6,7 являются комбинациями прав с номерами 1,2 и 4. Ещё раз обратим ваше внимание на тот факт, что право №2 на изменение содержимого файла или каталога не имеет ничего общего с правом его переименования, создания или удаления, за это отвечает право №2 каталога являющегося для него родительским!

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

Примеры использования:
# chown root:user /home/user/text.txt
Эта команда задает для файла /home/user/text.txt владельца root и группу user.
# chmod 775 /home/user/text.txt
Эта команда устанавливает для файла /home/user/text.txt права 775. Это значит что суперпользователь root, а так-же пользователи, входящие в группу user будут обладать полными правами на этот файл, все остальные пользователи могут только просматривать файл (а также запускать на выполнение если файл является исполняемым).

Давайте рассмотрим это на примерах. У нас обычный пользователь это userok, в вашем случае вместо userok надо будет исользовать имя пользователя под которым Вы работаете.

Откроем любой терминал (xterm, koncole и.т.д.).
Перейдём в домашний каталог с помощью команды
$ cd~

Сменим текущего пользователя на root:
$ su root

Создадим каталог с именем test:
# mkdir test

Зададим вашего пользователя в качестве владельца:
# chown userok:userok /home/userok/test

Зададим права для этого каталога:
# chmod 555 /home/userok/test — права только чтение и вход в каталог для всех пользователей кроме суперпользователя root, который всегда имеет полный доступ к системе

Теперь в этом каталоге создадим пустой текстовый файл:
# touch /home/userok/test/file.txt

Зададим владельца и права:
# chown userok:userok /home/userok/test/file.txt
# chmod 775 /home/userok/test/file.txt

Выйдем из режима суперпользователя:
# su userok

Запишем некоторый текст в наш тестовый файл:
$ echo «some text» > /home/userok/test/file.txt

Удалим файл:
$ rm /home/userok/test/file.txt
Не получилось? Хотя текущий пользователь имеет полные права на файл, но он не может удалить этот файл, т. к. для его родительского каталога мы задали права только на просмотр.

Давайте попробуем скопировать файл в эту же папку с именем file2:
$ cp /home/userok/test/file.txt /home/userok/test/file2.txt
Опять отказано в доступе? Конечно, ведь у нас нет права записи в каталог /home/userok/test/, только чтение и вход в него.

Приберёмся за собой. Сменим текущего пользователя на root:
$ su root

Зададим полные права на каталог /home/userok/test/:
# chmod 777 /home/userok/test/

Снова выйдем из режима суперпользователя:
# su userok

Вновь попробуем удалить файл:
$ rm /home/userok/test/file.txt
Теперь имея права на изменение содержимого родительского каталога нам удалось удалить этот файл.

Удалим родительский каталог:
$ rmdir /home/userok/test/

На этом первое знакомство с правами на файлы и каталоги в Linux можно считать законченным.

Эта статья опубликована под Creative Commons Attribution ShareAlike лицензией.

Добавить комментарий