Linux

Команда chmod в Linux: полное руководство по правам доступа

Это руководство объясняет, как управлять правами доступа к файлам и каталогам в Linux с помощью команды chmod. Вы научитесь использовать как числовой, так и символьный синтаксис для настройки прав для владельца, группы и остальных пользователей.

Обновлено 16 февраля 2026 г.
10-15 мин
Низкая
FixPedia Team
Применимо к:Ubuntu 22.04+Debian 11+CentOS 7+Any Linux distribution

Введение / Зачем это нужно

Команда chmod (change mode) — это фундаментальный инструмент управления безопасностью в Linux. Она определяет, кто может читать, изменять или запускать файлы и каталоги. Понимание chmod критически важно для:

  • Безопасности системы: Предотвращение несанкционированного доступа к конфигурационным файлам, паролям или скриптам.
  • Корректной работы программ: Многие сервисы и скрипты требуют определенных прав для выполнения (например, +x).
  • Совместной работы: Настройка доступа для разных групп пользователей в многопользовательской среде.

Это руководство превратит вас из новичка, который пишет chmod 777 наобум, в уверенного пользователя, понимающего систему прав.

Требования / Подготовка

Перед началом убедитесь, что:

  1. У вас есть доступ к терминалу Linux (локально или через SSH).
  2. Вы знаете абсолютный или относительный путь к целевому файлу или каталогу.
  3. У вас есть права на изменение атрибутов этого файла. Обычно это требует, чтобы вы были владельцем файла или пользователем с повышенными привилегиями (root/sudo).
  4. Вы понимаете базовую структуру вывода команды ls -l (например, -rwxr-xr--).

Пошаговая инструкция

Шаг 1: Понимание системы прав (rwx)

Права доступа в Linux делятся на три категории пользователей:

  • u (user/owner) — владелец файла.
  • g (group) — группа, которой принадлежит файл.
  • o (others) — все остальные пользователи системы.
  • a (all) — все три категории (все пользователи).

Для каждой категории есть три типа прав:

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

Пример: -rwxr-xr--

  • Владелец (u): rwx (все права)
  • Группа (g): r-x (чтение и выполнение, без записи)
  • Остальные (o): r-- (только чтение)

Шаг 2: Два основных способа задания прав

Способ A: Символьный (буквенный) режим

Удобен для добавления/снятия конкретных прав без перезаписи всех. Синтаксис: chmod [категория][оператор][права] файл

  • Категория: u, g, o, a (необязательно, по умолчанию a).
  • Оператор: + (добавить), - (убрать), = (установить точно).
  • Права: r, w, x.

Примеры:

# Дать право на выполнение ВСЕМ (u, g, o)
chmod +x script.sh

# Владельцу дать право на запись, группе и остальным убрать
chmod u+w,g-w,o-w important.conf

# Установить права ТОЛЬКО для владельца: rw, для группы и остальных: r
chmod u=rw,g=r,o=r document.txt

Способ B: Числовой (октальный) режим

Более компактный, используется для установки полного набора прав за раз. Каждому типу прав (rwx) соответствует цифра:

  • r = 4
  • w = 2
  • x = 1
  • Нет права = 0

Сумма этих цифр для каждой категории (u, g, o) дает итоговый трехзначный код.

Примеры:

  • rwx = 4+2+1 = 7
  • rw- = 4+2+0 = 6
  • r-x = 4+0+1 = 5
  • r-- = 4+0+0 = 4

Распространенные коды:

  • 755 — Владелец: полные права (rwx). Группа и остальные: чтение и выполнение (r-x). Стандарт для исполняемых файлов и публичных каталогов.
  • 644 — Владелец: чтение/запись (rw-). Группа и остальные: только чтение (r--). Стандарт для обычных текстовых файлов (конфиги, HTML).
  • 700 — Только владелец имеет полные права. Максимальная изоляция.
  • 777 — Полные права для ВСЕХ. Опасно! Используйте только в крайних случаях (например, общий временный каталог).

Как использовать:

chmod 755 script.sh     # Установить права rwxr-xr-x
chmod 644 config.ini    # Установить права rw-r--r--
chmod 700 .ssh/         # Закрыть доступ к папке .ssh для всех, кроме владельца

Шаг 3: Работа с каталогами и рекурсия

По умолчанию chmod меняет права только на указанный файл. Для каталогов и вложенных файлов используйте флаг -R (рекурсивно).

Важно: Рекурсивное применение chmod к сложным структурам (например, /var/www или /home) может сломать систему, если вы установите слишком строгие или слишком открытые права. Всегда проверяйте путь.

# Рекурсивно дать права на чтение и выполнение для всех в каталоге /opt/app
chmod -R 755 /opt/app

# Рекурсивно убрать право на выполнение у всех файлов .txt в текущей папке
chmod -R a-x *.txt

Совет: Для каталогов право x необходимо для доступа к их содержимому. Часто нужно комбинировать: find /path -type d -exec chmod 755 {} \; (для каталогов) и find /path -type f -exec chmod 644 {} \; (для файлов).

Шаг 4: Специальные биты (SUID, SGID, Sticky)

Эти редко используемые, но мощные биты задаются четвертой цифрой в числовом режиме или через символы (s, t).

  • SUID (Set User ID)4xxx (например, 4755). Когда исполняемый файл с SUID запускается, он работает с правами своего владельца, а не того, кто его запустил. Пример: /usr/bin/passwd.
    chmod 4755 /usr/bin/some_suid_binary
    # Или символьный: chmod u+s /usr/bin/some_suid_binary
    
  • SGID (Set Group ID)2xxx (например, 2775). Для файлов: работает как SUID, но для группы. Для каталогов: новые файлы, созданные в этом каталоге, наследуют группу каталога, а не группу пользователя-создателя. Полезно для общих папок.
    chmod 2775 /shared/project_folder
    
  • Sticky Bit1xxx (например, 1777). В каталоге с sticky bit (/tmp — классический пример) пользователь может удалять или переименовывать только свои файлы, даже если имеет право на запись в каталог.
    chmod 1777 /tmp
    # Или символьный: chmod o+t /tmp
    

Шаг 5: Практические примеры и сценарии

  1. Сделать скрипт исполняемым:
    chmod +x deploy.sh
    
  2. Запретить другим пользователям читать приватный файл:
    chmod 600 ~/.ssh/id_rsa
    
  3. Разрешить группе developers запись в общий каталог проекта:
    chmod 775 /var/projects/myapp
    # Убедитесь, что группа каталога — developers: chgrp developers /var/projects/myapp
    
  4. Быстро открыть доступ на чтение и выполнение для всех (например, для публичного веб-контента):
    chmod -R a+rX /var/www/html
    # Флаг `X` (заглавная) устанавливает `x` только на каталоги и на файлы, у которых уже есть хотя бы один `x`.
    
  5. Удалить право на выполнение у всех исполняемых файлов в папке bin:
    chmod a-x /home/user/bin/*
    

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

После применения chmod всегда проверяйте результат:

ls -l [файл_или_каталог]

Что смотреть:

  1. Строка прав (например, -rwxr-xr--).
  2. Количество ссылок (второй столбец) для каталогов — при рекурсивном изменении оно не должно измениться кардинально, если вы не меняли sticky/SGID.
  3. Убедитесь, что владелец (chown) и группа не изменились случайно.

Тест на функциональность: Попробуйте выполнить действие, для которого вы давали право (например, запустить скрипт ./script.sh или записать данные в файл из-под другого пользователя, если это было целью).

Возможные проблемы

  • Operation not permitted или Permission denied: Вы не являетесь владельцем файла и не работаете от root (sudo). Используйте sudo chmod ... или смените владельца (sudo chown).
  • Файл не становится исполняемым: Вы использовали chmod +x на файл, который не является корректным исполняемым (например, это просто текстовый файл без shebang #!/bin/bash или двоичный файл). Проверьте содержимое.
  • После chmod -R система стала недоступной: Вы случайно сняли права x с критических системных каталогов (/bin, /usr, /etc). Это может привести к невозможности выполнения команд. Восстановление: Загрузитесь в режиме восстановления (recovery mode) или с LiveCD и исправьте права вручную. Для Debian/Ubuntu стандартные права можно восстановить через dpkg --get-selections | grep -E '^[^ ]+[[:space:]]+install$' | awk '{print $1}' | xargs dpkg -L | xargs chmod -c a+rX (это сложная операция, лучше искать конкретные пакеты).
  • chmod: changing permissions of ‘...’: Read-only file system: Файловая система смонтирована в режиме «только чтение» (например, из-за ошибок). Необходимо проверить и смонтировать ее заново с правами на запись (mount -o remount,rw /), возможно, потребуется fsck.
  • Не работает рекурсия (-R) на символьные ссылки: По умолчанию chmod -R не следует по символьным ссылкам. Чтобы менять права у файлов, на которые ведут ссылки, а не у самих ссылок, используйте chmod -R -h (не во всех реализациях) или обрабатывайте ссылки отдельно с помощью find.

Часто задаваемые вопросы

Что такое chmod 777 и почему это опасно?
Как дать права на выполнение скрипта?
Чем chmod отличается от chown?
Как рекурсивно изменить права на все файлы в папке?

Полезное

Проверьте текущие права доступа
Выберите способ задания прав
Примените команду chmod
Верифицируйте результат