Освоение разрешений файлов Linux с помощью команды 'chmod'

Изучите chmod с символическими и числовыми режимами, безопасными значениями по умолчанию, рекурсивными изменениями и специальными битами разрешений.

Освоение прав доступа к файлам в Linux с помощью команды 'chmod'

Права доступа к файлам в Linux определяют, кто может читать, изменять или запускать файл. Когда скрипт не выполняется, веб-сервер не может прочитать файл или закрытый ключ отклоняется как слишком открытый, chmod часто является частью решения.

Команда chmod изменяет биты разрешений. Вы можете использовать читаемые символические режимы, такие как u+x, или компактные числовые режимы, например 755.

Чтение строк разрешений

Выполните ls -l, чтобы увидеть тип файла и его разрешения:

ls -l deploy.sh

Пример вывода:

-rwxr-xr-- 1 app deploy 1200 May 23 10:00 deploy.sh

Первый символ — это тип файла. Обычный файл начинается с -, каталог — с d, а символическая ссылка — с l.

Следующие девять символов — это три группы разрешений:

  • Пользователь: владелец файла.
  • Группа: члены группы файла.
  • Остальные: все остальные.

Каждая группа может иметь:

  • r: чтение содержимого файла или список имен в каталоге.
  • w: изменение файла или создание/удаление/переименование записей в каталоге.
  • x: выполнение файла или переход по каталогу.

Разрешение на выполнение для каталога имеет значение. Без x для каталога вы не сможете войти в него или получить доступ к файлам внутри по имени, даже если сможете просмотреть некоторые метаданные в другом месте.

Использование символических режимов для небольших изменений

Символический синтаксис выглядит так:

chmod [кто][оператор][разрешения] путь

кто может быть u для пользователя, g для группы, o для остальных или a для всех. Операторы: + для добавления, - для удаления и = для точной установки.

Сделайте скрипт исполняемым для владельца:

chmod u+x deploy.sh

Разрешите группе редактировать общий файл:

chmod g+w shared_document.txt

Удалите права на запись для группы и остальных:

chmod go-w config.yml

Установите для остальных только чтение, заменив все существующие разрешения для остальных:

chmod o=r project_plan.txt

Символические режимы полезны, потому что они изменяют только те биты, которые вы указываете.

Использование числовых режимов для полных наборов разрешений

Числовые режимы устанавливают разрешения для пользователя, группы и остальных одной командой. Каждое разрешение имеет значение:

  • Чтение: 4
  • Запись: 2
  • Выполнение: 1

Сложите значения для каждой группы:

Режим Значение
7 rwx
6 rw-
5 r-x
4 r--
0 ---

Установите для обычного текстового файла чтение/запись для владельца и только чтение для всех остальных:

chmod 644 important_file.txt

Установите для обычного каталога возможность управления владельцем и возможность входа и чтения для остальных:

chmod 755 public_assets

Заблокируйте закрытый ключ, чтобы только владелец мог его читать и записывать:

chmod 600 private_key.pem

Избегайте 777, если только вы не находитесь во временной тестовой среде и понимаете риск:

chmod 777 scratch

777 позволяет любому локальному пользователю читать, записывать и выполнять или переходить по пути. В общих системах это редко приемлемо.

Обработка файлов и каталогов по-разному

Файлы и каталоги обычно требуют разных режимов. Файлы часто используют 644; каталоги часто используют 755. Если вы выполните это вслепую, вы сделаете каждый файл исполняемым:

chmod -R 755 web_root/

Для веб-каталога более безопасный шаблон:

find web_root -type d -exec chmod 755 {} +
find web_root -type f -exec chmod 644 {} +

Затем добавьте разрешение на выполнение только для скриптов, которые действительно в этом нуждаются:

chmod 755 web_root/scripts/deploy.sh

Осторожное использование специальных битов разрешений

Числовые режимы могут включать четвертую ведущую цифру для специальных битов:

Значение Имя Общий эффект
4 SetUID Исполняемый файл запускается с эффективным идентификатором пользователя владельца файла.
2 SetGID Исполняемый файл запускается с эффективным идентификатором группы файла; для каталогов новые записи наследуют группу каталога.
1 Sticky bit В каталогах пользователи могут удалять только те файлы, которые они владеют, владелец каталога или root.

Установите бит SetGID для общего каталога проекта, чтобы новые файлы наследовали группу каталога:

chmod 2770 shared_group_files

Установите sticky bit для общего каталога с возможностью записи:

chmod 1777 /srv/shared-upload

Классический пример — /tmp, который доступен для записи всем, но защищен sticky bit.

Будьте осторожны с SetUID и SetGID для исполняемых файлов. Они могут создать серьезный риск повышения привилегий, если программа доступна для записи, плохо спроектирована или принимает небезопасный ввод. Многие Unix-подобные системы также игнорируют SetUID для скриптов по соображениям безопасности.

Проверка результата

После изменения разрешений проверьте их:

ls -ld web_root web_root/index.html

Используйте stat, когда вам нужен числовой режим:

stat -c '%a %n' web_root/index.html

В macOS формат stat отличается:

stat -f '%Lp %N' web_root/index.html

Вывод

Используйте символический chmod, когда хотите добавить или удалить одно разрешение. Используйте числовой chmod, когда хотите точно установить полный режим. Относитесь к рекурсивным изменениям с осторожностью, держите файлы и каталоги отдельно и проверяйте с помощью ls -l или stat, прежде чем продолжить.