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

Команда Linux Chmod

В 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 .

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

терминал chmod

Связанные руководства

Источник

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *