Введение
В Linux доступ к файлам управляется с помощью прав доступа к файлам, атрибутов и владельцев. Это гарантирует, что только авторизованные пользователи и процессы могут получить доступ к файлам и каталогам.
В этом руководстве показано, как использовать команду chmod для изменения прав доступа к файлам и каталогам.
Права доступа к файлам
В Linux каждый файл связан с владельцем и группой, и ему назначаются права доступа для трех разных классов пользователей:
- Владелец файла.
- Члены группы.
- Другие (все остальные).
Владельца файла можно изменить с помощью команд chown и chgrp .
Существует три типа прав доступа к файлам, применимых к каждому классу:
- Разрешение на чтение.
- Разрешение на запись.
- Разрешение на исполнение.
Эта концепция позволяет указать, каким пользователям разрешено читать файл, записывать в файл или выполнять файл.
Права доступа к файлам можно посмотреть с помощью команды ls :
ls -l filename.txt
-rw-r--r-- 12 noviello root 1239291 Aug 8 03:04 filename.log
|[-][-][-]- [------] [---]
| | | | | | |
| | | | | | +-----------> 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-- .
Каждый из трех триплетов разрешений может иметь разные эффекты в зависимости от того, установлены ли они для файла или каталога.
Использовать chmod
Общая форма команды chmod выглядит следующим образом:
chmod [OPTIONS] MODE FILE
Команда chmod позволяет вам изменить права доступа к файлу, используя символьный или числовой режим или ссылочный файл. В качестве аргументов команда может принимать один или несколько файлов и/или каталогов, разделенных пробелами.
Только root, владелец файла или пользователь с привилегиями sudo могут изменять права доступа к файлу. Будьте особенно осторожны при использовании chmod , особенно при рекурсивном изменении разрешений.
Символический метод
Синтаксис команды chmod при использовании символьного режима имеет следующий формат:
chmod [OPTIONS] [ugoa…][-+=]perms…[,…] FILE
Первый набор флагов [ugoa…] , пользовательские флаги, определяет, для каких классов пользователей изменяются права доступа к файлу.
- u - владелец файла.
- g - Пользователи, которые являются членами группы.
- или - Все остальные пользователи.
- a - Все пользователи, идентичные ugo .
Если флаг пользователя опущен, по умолчанию используется значение « a », и разрешения, установленные umask , не затрагиваются.
Второй набор флагов [- + =] , флаги операции, определяет, должны ли разрешения быть удалены, добавлены или установлены:
- - Удаляет указанные разрешения.
- + Добавить указанные разрешения.
- = Modifica i permessi correnti nei permessi specificati. Se non vengono specificati i permessi dopo il simbolo "=", tutti i permessi della classe utente specificati vengono rimossi.
Разрешения perms... могут быть явно установлены с использованием нуля или одного или нескольких из следующих флагов: r , w , x , X , s и t . Используйте одну букву из u , g и o при копировании разрешений от одного класса пользователей к другому.
При установке разрешений для более чем одного пользовательского класса [,…] используйте запятые (без пробелов) для разделения символических режимов.
Вот несколько примеров предоставления членам группы прав на чтение файла, но не на его запись и выполнение:
chmod g=r filename
Удалить права на выполнение для всех пользователей:
chmod a-x filename
Отвратительно удалить права на запись для других пользователей:
chmod -R o-w 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...
При использовании числового режима вы можете установить разрешения для всех трех классов пользователей (владелец, группа и все остальные) одновременно.
НОМЕР может быть трех- или четырехзначным числом.
Когда используется трехзначное число, первая цифра представляет права доступа владельца файла, вторая — группы файлов, а последняя — всех остальных пользователей.
Каждое разрешение на запись, чтение и выполнение имеет следующее числовое значение:
- г (чтение) = 4
- ш (запись) = 2
- х (выполнение) = 1
- нет разрешения = 0
Количество разрешений определенного класса пользователей представлено суммой значений разрешений для этой группы.
Чтобы узнать права доступа к файлам в числовом режиме, просто подсчитайте итоги для всех классов пользователей. Например, чтобы предоставить права на чтение, запись и выполнение владельцу файла, разрешения на чтение и выполнение для группы файла и разрешения на чтение только для всех остальных пользователей, выполните следующие действия:
- Владелец: rwx = 4 + 2 + 1 = 7
- Группа: гх = 4 + 0 + 1 = 5
- Другие: гх = 4 + 0 + 0 = 4
Используя описанный выше метод, мы получаем число 754 , которое представляет желаемые разрешения.
Чтобы установить флаги setuid , setgid и sticky bit , используйте четыре цифры.
Когда используется 4-значный номер, первая цифра имеет следующее значение:
- установить время = 4
- setgid = 2
- липкий = 1
- без изменений = 0
Следующие три цифры имеют то же значение, что и при использовании трехзначного числа.
Если первая цифра равна 0, ее можно опустить, а режим можно представить тремя цифрами. Числовой режим 0755 аналогичен 755 .
Для расчета числового режима можно использовать и другой метод (бинарный метод), но он немного сложнее. Большинству пользователей достаточно знать, как вычислять числовой режим с использованием 4, 2 и 1.
Вы можете проверить права доступа к файлам в числовой записи с помощью команды stat :
stat -c "%a" filename
644
Давайте посмотрим на некоторые примеры числового режима.
Предоставьте права на чтение и запись владельцу файла, а членам группы и всем остальным пользователям — только права на чтение:
chmod 644 dirname
Дайте владельцу файла права на чтение, запись и выполнение, права на чтение и выполнение для членов группы и никаких разрешений для всех остальных пользователей:
chmod 750 dirname
Дайте права на чтение, запись и выполнение и прикрепите бит к данному каталогу:
chmod 1777 dirname
Рекурсивно установить права на чтение, запись и выполнение для владельца файла и запретить права для всех остальных пользователей в данном каталоге:
chmod -R 700 dirname
Использование справочного файла
Опция --reference = ref_file позволяет вам установить права доступа к файлу такими же, как у указанного эталонного файла ref_file .
chmod --reference=REF_FILE FILE
Например, следующая команда назначит права файла1 файлу2 .
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/site , найденные с помощью команды chmod для установки разрешений.
Вывод
Команда chmod изменяет права доступа к файлу. Разрешения могут быть установлены с использованием символьного или числового режима.
Чтобы узнать больше о команде chmod , введите следующую команду:
man chmod