Введение / Зачем это нужно
Команда chmod (change mode) — это фундаментальный инструмент управления безопасностью в Linux. Она определяет, кто может читать, изменять или запускать файлы и каталоги. Понимание chmod критически важно для:
- Безопасности системы: Предотвращение несанкционированного доступа к конфигурационным файлам, паролям или скриптам.
- Корректной работы программ: Многие сервисы и скрипты требуют определенных прав для выполнения (например,
+x). - Совместной работы: Настройка доступа для разных групп пользователей в многопользовательской среде.
Это руководство превратит вас из новичка, который пишет chmod 777 наобум, в уверенного пользователя, понимающего систему прав.
Требования / Подготовка
Перед началом убедитесь, что:
- У вас есть доступ к терминалу Linux (локально или через SSH).
- Вы знаете абсолютный или относительный путь к целевому файлу или каталогу.
- У вас есть права на изменение атрибутов этого файла. Обычно это требует, чтобы вы были владельцем файла или пользователем с повышенными привилегиями (root/sudo).
- Вы понимаете базовую структуру вывода команды
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= 4w= 2x= 1- Нет права = 0
Сумма этих цифр для каждой категории (u, g, o) дает итоговый трехзначный код.
Примеры:
rwx= 4+2+1 = 7rw-= 4+2+0 = 6r-x= 4+0+1 = 5r--= 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 Bit —
1xxx(например,1777). В каталоге с sticky bit (/tmp— классический пример) пользователь может удалять или переименовывать только свои файлы, даже если имеет право на запись в каталог.chmod 1777 /tmp # Или символьный: chmod o+t /tmp
Шаг 5: Практические примеры и сценарии
- Сделать скрипт исполняемым:
chmod +x deploy.sh - Запретить другим пользователям читать приватный файл:
chmod 600 ~/.ssh/id_rsa - Разрешить группе
developersзапись в общий каталог проекта:chmod 775 /var/projects/myapp # Убедитесь, что группа каталога — developers: chgrp developers /var/projects/myapp - Быстро открыть доступ на чтение и выполнение для всех (например, для публичного веб-контента):
chmod -R a+rX /var/www/html # Флаг `X` (заглавная) устанавливает `x` только на каталоги и на файлы, у которых уже есть хотя бы один `x`. - Удалить право на выполнение у всех исполняемых файлов в папке
bin:chmod a-x /home/user/bin/*
Проверка результата
После применения chmod всегда проверяйте результат:
ls -l [файл_или_каталог]
Что смотреть:
- Строка прав (например,
-rwxr-xr--). - Количество ссылок (второй столбец) для каталогов — при рекурсивном изменении оно не должно измениться кардинально, если вы не меняли sticky/SGID.
- Убедитесь, что владелец (
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.