Команда Chmod в Linux (права доступа к файлам)

В 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 .
Когда для исполняемого файла setgid флаги 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 флаг 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

Скорее всего, вместо смены целевого владельца вы получите ошибку «Нет доступа к 'символической ссылке': в разрешении отказано».

Ошибка возникает из-за того, что по умолчанию в большинстве дистрибутивов 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 .

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Оставьте комментарий

Ваш адрес email не будет опубликован.