Зачем нужна команда chmod Команда chmod в Linux используется для управления правами доступа к файлам и папкам. С её помощью можно точно указать, кто может читать, изменять или запускать тот или иной файл. Название chmod образовано от английского change mode — «изменить режим». Проще говоря, именно эта команда определяет, что может делать каждый пользователь, например: одному разрешить только просматривать файлы, другому - редактировать или удалять их, а третьему - запускать программы. Кроме обычных прав, chmod позволяет использовать специальные флаги (SetUID, SetGID и Sticky bit), которые дают дополнительные возможности, например, запуск программы с правами её владельца или защита файлов в общей папке от удаления другими пользователями. На практике chmod — это один из ключевых инструментов системного администратора Linux. Он помогает поддерживать безопасность данных и соблюдать внутренние правила доступа к информации на сервере. Права доступа в Linux Каждый файл или папка в Linux имеет три группы пользователей и три типа прав: Группа пользователей Кто это Пример owner (u, владелец) Тот, кто создал файл Пользователь admin group (g, группа) Группа Группа developers others (o, остальные) Все остальные пользователи системы Любой другой пользователь Типы прав: Обозначение Что позволяет делать read (r, чтение) Читать содержимое файла или просматривать каталог write (w, запись) Изменять, удалять или создавать файлы execute (x, исполнение) Запускать файл как программу или входить в каталог Чтобы в Linux просмотреть права доступа к файлу необходимо воспользоваться командой ls (отображает информацию о файлах и каталогах) с флагом -l (отображает подробную информацию: права доступа, количество ссылок, владельца, группу, размер, дату и время последнего изменения). При этом права доступа отображаются в формате вида: rwxr-xr-x, drwxr-xr-x. Например: $ ls -l filename -rwxr-xr-- 1 username groupname 1024 Oct 12 09:27 filename Разберем подробнее запись -rwxr-xr-- Первый символ — тип объекта. В нашем случае – (тире) означает, что это файл, а не папка: Символ Значение - Обычный файл d Каталог l Символическая ссылка c / b Устройство (символьное / блочное) Остальные девять символов — права доступа. Они делятся на три группы по три символа: [rwx] - права владельца (user) [r-x] - права группы (group) [r--] - права остальных (others) Таким образом, эта запись означает, что: Владелец (user) может читать, изменять и запускать файл Группа (group) может читать и запускать, но не изменять Остальные (others) могут только просматривать содержимое файла Числовой (октавный) способ задания прав доступа Часто в Linux, в том числе при использовании утилиты chmod права доступа обозначаются в числовом формате. Каждому набору прав соответствует своё число: Двоичное Десятичное Символьное Описание 000 0 — Ничего не разрешено 001 1 —x Нельзя читать и писать, разрешено исполнять 010 2 -w- Нельзя читать и исполнять, разрешено писать 100 4 r— Разрешено читать, нельзя писать и исполнять Соответственно, чтобы задать комбинацию прав, складывают числа. Например: 7 = 4 + 2 + 1 - чтение, запись и выполнение 5 = 4 + 1 - чтение и выполнение 6 = 4 + 2 - чтение и запись Двоичное Десятичное Символьное Описание 011 3 -wx Нельзя читать, разрешено писать и исполнять 101 5 r-x Разрешено читать и исполнять, нельзя писать 110 6 rw- Разрешено читать и писать, нельзя исполнять 111 7 rwx Разрешено все Тогда числовой эквивалент рассмотренной выше записи -rwxr-xr-- будет: 754 Синтаксис chmod Независимо от дистрибутива Linux, команда chmod имеет одинаковый синтаксис: chmod [опции] режим имя_файла Где: Опции — дополнительные флаги, которые можно указать при необходимости; Режим — набор прав доступа, которые необходимо назначить; Имя_файла — файл или каталог, для которых эти права будут применены. Примеры опций: Опция Результат -r или --recursive Рекурсивно изменять права: если аргументом указан каталог, то действие будет применено к каталогу и ко всем его подкаталогам и файлам -v или --verbose Выводить информацию о том, какие файлы были изменены -c или --changes Аналогично verbose, но вывод только если изменения произошли -f или --silent / --quiet Не выводить сообщения об ошибках (например, когда права нельзя изменить) --reference=RFILE Взять права из файла-эталона: MODE будет установлен так, как в RFILE Режим (или MODE) определяет, какие права устанавливаются или изменяются. Как мы говорили выше, есть два основных способа задания прав: символический числовой (октавный) Символический способ имеет формат: chmod Кому Оператор Права Где: Кому – это одна или несколько букв из наборов: u (user/владелец), g (group/группа), o (others/остальные), a (all/все). Если who не указан — по умолчанию считается a. Оператор – это изменение уже установленных правил. Операторы могут быть «+», «-» и «=»: + (добавить указанные права), - (удалить указанные права), = (установить точно указанные права, убрать остальные, если не указаны). Права — набор прав или специальных флагов: r (read), w (write), x (execute/search), X (выполнять/искать только если файл является каталогом или уже существует разрешение на выполнение для некоторого пользователя), s (set-uid / set-gid), t (sticky-bit) – об этих правах далее в статье. Можно задавать несколько выражений через запятую. Например: u=rwx,g=rx,o=r или a+X и т.д. Примеры символического способа задания прав доступа: chmod g+w file - добавить группе право на запись. chmod o-rwx file - убрать для «остальных» все права Числовой (октавный) способ предусматривает задание режима одним или несколькими цифрами от 0 до 7. Его мы рассматривали также выше в этой статье. Также можно изменить владельца или группу с помощью команды chown. Базовый синтаксис команды chown выглядит следующим образом: chown [опции] Пользователь[:Группа] файл_или_каталог Ключевые опции: Команда Результат -R или --recursive Рекурсивно изменять владельца и группу для содержимого каталогов -v или --verbose Выводить диагностическую информацию для каждого обработанного файла --reference=reference_file Использовать атрибуты владения файла reference_file в качестве образца Примеры: Команда Результат chown root myfile.txt сделать пользователя root владельцем файла myfile.txt chown user1:users myfile.txt сделать user1 владельцем и users группой файла myfile.txt chown -R webadmin:www-data /var/www/html рекурсивно сделать webadmin владельцем и www-data группой всех файлов и папок в /var/www/html chown :backup_group myfile.txt сменить только группу файла на backup_group, не меняя пользователя-владельца Специальные биты (SetUID, SetGID, Sticky bit) В Linux помимо обычных прав (rwx) есть три специальных бита, которые влияют на то, как выполняются файлы и как работают каталоги. SetUID (Set User ID), SetGID (Set Group ID) также часто обозначают как разрешения SUID и SGID. Поэтому команда chmod в числовом виде может содержать четыре цифры: chmod [спецбит][права владельца][права группы][права остальных] Бит Символ Числовое значение Назначение Пример 0 Отсутствие специальных флагов chmod 777 /tmp drwxrwxrwx Sticky bit t (в поле others) 1 Обычно применяется к каталогам, чтобы ограничить удаление файлов. Если sticky-bit установлен, удалить или переименовать файл в каталоге может только его владелец, владелец каталога или root. chmod 1777 /tmp drwxr-xr-t SetGID s (в поле группы) 2 Для исполняемого файла: процесс выполняется от имени группы, которой принадлежит файл. Для каталога: все новые файлы, созданные внутри, наследуют группу этого каталога. chmod 2755 dir drwxr-sr-x SetUID s (в поле владельца) 4 Программа запускается с правами её владельца, а не пользователя, который её запустил. chmod 4755 file -rwsr-xr-x SetUID + SetGID s (в поле владельца) и s (в поле группы) 6 Комбинация SetUID и SetGID chmod 6755 file -rwsr-sr-x SetUID + SetGID + Sticky bit s (в поле владельца), s (в поле группы) и t (в поле others) 7 Все флаги chmod 7777 file -rwsrwsrwt Примеры использования chmod Команда Что делает chmod 755 script.sh Владелец может читать, изменять и запускать; остальные — только читать и запускать chmod g+w file Добавить группе право на запись chmod o-rwx file Убрать для «остальных» все права chmod u=rw,go=r file Установить владельцу rw, группе r, остальным r chmod a+X directory Дать право execute (поиск) всем, но только если это каталог или уже есть execute chmod 644 file.txt Владелец может читать и изменять; остальные — только читать chmod 700 backup/ Только владелец имеет полный доступ к каталогу chmod +x program.sh Добавляет право на выполнение для всех chmod g+w shared.txt Разрешает группе изменять файл chmod o-r secret.txt Убирает право чтения у «остальных» chmod a+X /var/www Добавляет право на выполнение только если это каталог или у файла уже есть флаг x. Полезно при массовом изменении прав в папках. chmod 777 file.txt Всем всё разрешено (чтение, запись, выполнение) chmod 700 private.txt Только владелец имеет полный доступ chmod 644 document.txt Владелец может читать и писать, остальные — только читать (типично для файлов) chmod 600 key.pem Только владелец может читать и изменять (часто для конфиденциальных данных) chmod 444 readme.txt Файл только для чтения для всех chmod 000 file.txt Никому ничего нельзя (даже владельцу без sudo не открыть) chmod 2755 /var/www/html Новые файлы и каталоги наследуют группу родительского каталога (часто www-data) chmod 4755 /usr/bin/passwd При запуске программа работает с правами владельца (обычно root). Так реализуется смена пароля пользователем. chmod 1755 /tmp/mydir Только владелец может удалять файлы внутри этого каталога (как в /tmp) chmod 6755 /srv/script Файл выполняется от имени владельца и группы; наследует оба идентификатора chmod 1777 /tmp Классический пример sticky bit — общий каталог /tmp: все могут писать, но удалять — только свои файлы chmod 2750 shared_dir Все новые файлы внутри наследуют группу shared_dir, что удобно для совместной работы Заключение Команда chmod — мощный инструмент управления правами доступа в Linux. Она позволяет гибко настраивать уровни разрешений для владельца, группы и других пользователей, а также использовать специальные биты (setuid, setgid, sticky bit) для реализации сложных сценариев взаимодействия с файлами и каталогами. Однако с этой гибкостью приходит и ответственность. Любое неосторожное изменение прав может привести к серьёзным уязвимостям. Ошибки в использовании chmod, особенно с опцией -R (рекурсивно) или чрезмерно широкими правами (777), могут открыть доступ злоумышленникам к файлам, содержащим пароли, ключи, базы данных, позволить подменить или внедрить вредоносный код в веб-приложение или исполняемый файл, нарушить работу сервисов, если они теряют права доступа к нужным ресурсам или наоборот — приобретают избыточные. Например, частая ошибка администраторов: дать «всем всё» - chmod -R 777. В результате злоумышленник может заменить исполняемые файлы на вредоносные, украсть данные пользователей или встроить бэкдор. Еще одна частая ошибка - это использование флага SetUID для скриптов. Например, chmod 4755 script.sh. Это создаёт критическую брешь, потому что скрипт может быть изменён или подменён, после чего будет выполняться с правами root. Поэтому необходимо назначать минимально необходимые права, используя принцип least privilege. Кроме того, не применяйте setuid и setgid без полного понимания их последствий. Делайте резервные копии ACL или списков прав перед изменениями. chmod — не просто утилита, а важнейший элемент модели безопасности Linux. Её правильное использование обеспечивает надёжную изоляцию пользователей и процессов. Но при неумелом использовании открывает путь к компрометации системы. Работая с chmod, стоит помнить, что проще временно недодать права, чем потом восстанавливать взломанный сервер. Автоматическая киберзащита для вашего бизнеса Регулярный контроль чувствительных данных компании, понятные отчёты и экспертная поддержка с точными рекомендациями. запросить демо Советы по ИБ на практике Поделиться