В Linux управление доступом к файлам осуществляется с помощью разрешений, атрибутов и владельцев файлов. Это гарантирует, что только авторизованные пользователи и процессы могут получить доступ к файлам и каталогам.
В этом руководстве рассказывается, как использовать команду chmod
для изменения прав доступа к файлам и каталогам.
Разрешения для файлов Linux
Прежде чем идти дальше, давайте объясним базовую модель разрешений Linux.
В Linux каждый файл связан с владельцем и группой и имеет права доступа для трех разных классов пользователей:
- Владелец файла.
- Члены группы.
- Остальные (все остальные).
Владение файлом можно изменить с помощью команд chown
и chgrp
.
К каждому классу применяются три типа прав доступа к файлам:
- Разрешение на чтение.
- Разрешение на запись.
- Разрешение на выполнение.
Эта концепция позволяет указать, каким пользователям разрешено читать файл, записывать в файл или выполнять файл.
Права доступа к файлам можно просмотреть с помощью команды ls
:
ls -l filename.txt
-rw-r--r-- 12 linuxize users 12.0K Apr 8 20:51 filename.txt
|[-][-][-]- [------] [---]
| | | | | | |
| | | | | | +-----------> 7. Group
| | | | | +-------------------> 6. Owner
| | | | +--------------------------> 5. Alternate Access Method
| | | +----------------------------> 4. Others Permissions
| | +-------------------------------> 3. Group Permissions
| +----------------------------------> 2. Owner Permissions
+------------------------------------> 1. File Type
Первый символ показывает тип файла. Это может быть обычный файл ( -
), каталог ( d
), символическая ссылка ( l
) или любой другой специальный тип файла.
Следующие девять символов представляют права доступа к файлу, три тройки по три символа каждая. Первый триплет показывает разрешения владельца, второй — разрешения группы, а последний триплет — разрешения для всех остальных. Разрешения могут иметь разное значение в зависимости от типа файла.
В приведенном выше примере ( rw-r--r--
) означает, что владелец файла имеет разрешения на чтение и запись ( rw-
), а группа и другие пользователи имеют разрешения только на чтение ( r--
).
Каждый из трех троек разрешений может состоять из следующих символов и иметь различные эффекты, в зависимости от того, установлены ли они для файла или для каталога:
Влияние разрешений на файлы
Влияние разрешений на каталоги (папки)
В Linux каталоги — это особые типы файлов, которые содержат другие файлы и каталоги.
Использование chmod
Команда chmod
имеет следующую общую форму:
chmod [OPTIONS] MODE FILE...
Команда chmod
позволяет вам изменять права доступа к файлу, используя символьный или числовой режим или справочный файл. Мы объясним режимы более подробно позже в этой статье. Команда может принимать в качестве аргументов один или несколько файлов и / или каталогов, разделенных пробелом.
Только root, владелец файла или пользователь с привилегиями sudo могут изменять права доступа к файлу. Будьте особенно осторожны при использовании chmod
, особенно при рекурсивном изменении разрешений.
Символьный (текстовый) метод
Синтаксис команды chmod
при использовании символьного режима имеет следующий формат:
chmod [OPTIONS] [ugoa…][-+=]perms…[,…] FILE...
Первый набор флагов ( [ugoa…]
), флаги пользователей, определяет, какие классы пользователей изменяют права доступа к файлу.
u
— владелец файла.g
— Пользователи, входящие в группу.o
— Все остальные пользователи.a
— Все пользователи, идентичныеugo
.
Если флаг пользователей опущен, по умолчанию используется значение a
и разрешения, установленные с помощью umask , не затрагиваются.
Второй набор флагов ( [-+=]
), флаги операции, определяет, следует ли удалить, добавить или установить разрешения:
-
Удаляет указанные разрешения.+
Добавляет указанные разрешения.=
Изменяет текущие разрешения на указанные разрешения. Если после символа=
не указаны разрешения, все разрешения из указанного класса пользователей удаляются.
Разрешения ( perms...
) могут быть явно установлены с использованием нуля или одной или нескольких следующих букв: r
, w
, x
, X
, s
и t
. Используйте одну букву из набора u
, g
и o
при копировании разрешений из одного класса пользователей в другой.
При настройке разрешений для более чем одного пользовательского класса ( [,…]
) используйте запятые (без пробелов) для разделения символьных режимов.
Ниже приведены несколько примеров использования команды chmod
в символьном режиме:
- Дайте членам группы разрешение на чтение файла, но не на его запись и выполнение:
chmod g=r filename
- Удалите разрешение на выполнение для всех пользователей:
chmod ax filename
- Отвратительно удалите разрешение на запись для других пользователей:
chmod -R ow dirname
- Удалите права на чтение, запись и выполнение для всех пользователей, кроме владельца файла:
chmod og-rwx filename
То же самое можно сделать, используя следующую форму:
chmod og= filename
- Предоставьте права на чтение, запись и выполнение владельцу файла, права на чтение для группы файла и никаких разрешений для всех остальных пользователей:
chmod u=rwx,g=r,o= filename
- Добавьте разрешения владельца файла к разрешениям, которые есть у членов группы файла:
chmod g+u filename
- Добавьте липкий бит в заданный каталог:
chmod o+t dirname
Числовой метод
Синтаксис команды chmod
при использовании числового метода имеет следующий формат:
chmod [OPTIONS] NUMBER FILE...
При использовании числового режима вы можете установить разрешения для всех трех классов пользователей (владельца, группы и всех остальных) одновременно.
NUMBER
может быть 3- или 4-значным числом.
Когда используется трехзначный номер, первая цифра представляет права владельца файла, вторая — группу файла, а последняя — всех остальных пользователей.
Каждое разрешение на запись, чтение и выполнение имеет следующее числовое значение:
r
(читать) = 4w
(написать) = 2x
(выполнить) = 1- нет разрешений = 0
Число разрешений для определенного класса пользователей представлено суммой значений разрешений для этой группы.
Чтобы узнать права доступа к файлу в числовом режиме, просто подсчитайте итоговые значения для всех классов пользователей. Например, чтобы предоставить права на чтение, запись и выполнение владельцу файла, права на чтение и выполнение для группы файла и только на чтение для всех остальных пользователей, вы должны сделать следующее:
- Владелец: rwx = 4 + 2 + 1 = 7
- Группа: rx = 4 + 0 + 1 = 5
- Другое: rx = 4 + 0 + 0 = 4
Используя метод выше, мы подходим к числу 754
, которое представляет желаемые разрешения.
Для установки флагов setuid
, setgid
и sticky bit
используйте четырехзначный номер.
Когда используется четырехзначный номер, первая цифра имеет следующее значение:
- setuid = 4
- setgid = 2
- липкий = 1
- без изменений = 0
Следующие три цифры имеют то же значение, что и при использовании трехзначного номера.
Если первая цифра равна 0, ее можно опустить, а режим можно представить тремя цифрами. Числовой режим 0755
совпадает с 755
.
Для вычисления числового режима вы также можете использовать другой метод (двоичный метод), но он немного сложнее. Знания, как вычислить числовой режим с использованием 4, 2 и 1, достаточно для большинства пользователей.
Вы можете проверить права доступа к файлу в числовом формате с помощью команды stat
:
stat -c "%a" filename
644
Вот несколько примеров того, как использовать команду chmod
в числовом режиме:
- Предоставьте владельцу файла разрешения на чтение и запись и только на чтение членам группы и всем другим пользователям:
chmod 644 dirname
- Предоставьте владельцу файла права на чтение, запись и выполнение, права на чтение и выполнение для членов группы и никаких разрешений для всех остальных пользователей:
chmod 750 dirname
- Предоставьте разрешения на чтение, запись и выполнение, а также закрепите бит для данного каталога:
chmod 1777 dirname
- Рекурсивно установить разрешения на чтение, запись и выполнение для владельца файла и отсутствие разрешений для всех других пользователей в данном каталоге:
chmod -R 700 dirname
Использование справочного файла
Параметр --reference=ref_file
позволяет вам установить права доступа к файлу такими же, как у указанного справочного файла ( ref_file
).
chmod --reference=REF_FILE FILE
Например, следующая команда назначит права доступа file1
к file2
chmod --reference=file1 file2
Рекурсивно изменить права доступа к файлу
Чтобы рекурсивно работать со всеми файлами и каталогами в данном каталоге, используйте параметр -R
( --recursive
):
chmod -R MODE DIRECTORY
Например, чтобы изменить права доступа для всех файлов и подкаталогов в каталоге /var/www
на 755
вы должны использовать:
chmod -R 755 /var/www
Работа с символическими ссылками
Символические ссылки всегда имеют 777
разрешений.
По умолчанию, при изменении разрешений символической ссылки, chmod
изменяет права доступа к файлу, на который указывает ссылка.
chmod 755 symlink
Скорее всего, вместо смены целевого владельца вы получите ошибку «Нет доступа к ‘символической ссылке’: в разрешении отказано».
Ошибка возникает из-за того, что по умолчанию в большинстве дистрибутивов Linux символические ссылки защищены, и вы не можете работать с целевыми файлами. Этот параметр указан в /proc/sys/fs/protected_symlinks
. 1
означает включен, а 0
отключен. Рекомендуется не отключать защиту символических ссылок.
Массовое изменение прав доступа к файлам
Иногда возникают ситуации, когда вам нужно массово изменить права доступа к файлам и каталогам.
Наиболее распространенный сценарий — рекурсивное изменение разрешений файла веб-сайта на 644
и разрешений каталога на 755
.
Числовым методом:
find /var/www/my_website -type d -exec chmod 755 {} ;
find /var/www/my_website -type f -exec chmod 644 {} ;
Символьным методом:
find /var/www/my_website -type d -exec chmod u=rwx,go=rx {} ;
find /var/www/my_website -type f -exec chmod u=rw,go=r {} ;
Команда find
будет искать файлы и каталоги в /var/www/my_website
и передавать каждый найденный файл и каталог команде chmod
для установки разрешений.
Выводы
Команда chmod
изменяет права доступа к файлу. Разрешения можно установить с помощью символьного или числового режима.
Добавить комментарий