
В 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-- ).
Каждый из трех триплетов разрешений может быть составлен из следующих символов и иметь различные эффекты в зависимости от того, установлены ли они для файла или для каталога:
Влияние разрешений на файлы
| Разрешение | Характер | Значение в файле |
|---|---|---|
| Читать | - |
Файл не читается. Вы не можете просмотреть его содержимое. |
r |
Файл доступен для чтения. | |
| Писать | - |
Файл не может быть изменен или модифицирован. |
w |
Файл может быть изменен или модифицирован. | |
| Выполнять | - |
Файл не может быть выполнен. |
x |
Файл может быть выполнен. | |
s |
Если найдено в user триплете, устанавливается бит setuid . Если найдено в group триплете, устанавливается бит setgid . Это также означает, что установлен флаг x .Если для исполняемого файла установлены флаги setuid или setgid , файл выполняется с привилегиями владельца файла и/или группы. |
|
S |
То же, что и s , но флаг x не установлен. Этот флаг редко используется для файлов. |
|
t |
Если он обнаружен в others триплетах, он устанавливает sticky бит.Это также означает, что установлен флаг x Этот флаг бесполезен для файлов. |
|
T |
То же, что и t , но флаг x не установлен. Этот флаг бесполезен для файлов. |
Влияние разрешений на каталоги (папки)
В Linux каталоги — это особые типы файлов, содержащие другие файлы и каталоги.
| Разрешение | Характер | Значение в справочнике |
|---|---|---|
| Читать | - |
Содержимое каталога не может быть отображено. |
r |
Содержимое каталога можно отобразить. (например, вы можете вывести список файлов внутри каталога с помощью ls .) |
|
| Писать | - |
Содержимое каталога не может быть изменено. |
w |
Содержимое каталога можно изменить. (например, вы можете создавать новые файлы , удалять файлы и т. д.) |
|
| Выполнять | - |
Невозможно изменить каталог. |
x |
Перемещаться по каталогу можно с помощью cd . |
|
s |
Если он найден в триплете user , он устанавливает бит setuid . Если он найден в триплете group , он устанавливает бит setgid . Это также означает, что установлен флаг x . Когда флаг setgid установлен для каталога, новые файлы, создаваемые в нём, наследуют идентификатор группы каталога (GID) вместо основного идентификатора группы пользователя, создавшего файл.setuid не влияет на каталоги. |
|
S |
То же, что и s , но флаг x не установлен. Этот флаг бесполезен для каталогов. |
|
t |
Если он обнаружен в others триплетах, он устанавливает sticky бит.Это также означает, что установлен флаг x Когда для каталога установлен бит фиксации, удалять или переименовывать файлы в нём может только владелец файла, владелец каталога или администратор. |
|
T |
То же, что и t , но флаг x не установлен. Этот флаг бесполезен для каталогов. |
Использование 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(чтение) = 4 -
w(писать) = 2 -
x(выполнить) = 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
Скорее всего, вместо смены владельца цели вы получите ошибку «невозможно получить доступ к '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 изменяет права доступа к файлу. Права доступа можно задать как в символьном, так и в числовом режиме.
Более подробную информацию о chmod можно найти на странице руководства chmod .
Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.
Связанные руководства