ServerAID
Найти гайд, команду, тег… ⌘ K
Глоссарий  ·  термин

chmod — что это и зачем

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

chmod

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

Что это в одном абзаце

В UNIX у каждого файла есть три категории доступа: владелец (user), группа (group), все остальные (other). Для каждой категории — три типа разрешений: чтение (r), запись (w), выполнение (x). chmod — команда, которая эти разрешения меняет.

chmod 644 config.txt          # rw для владельца, r для группы и остальных
chmod +x script.sh            # добавить право на выполнение всем
chmod u+w,go-w report.pdf     # +write владельцу, -write группе и остальным
chmod -R 755 /opt/myapp       # рекурсивно для каталога и всего внутри

Посмотреть текущие права — через ls -l:

-rw-r--r--  1 user  user  1234 May  4 10:00 config.txt
drwxr-xr-x  2 user  user  4096 May  4 10:00 myapp/

Первая колонка — это «режим» (mode), который и меняет chmod.

Как читать вывод ls -l

Слева от размера файла десять символов:

-rw-r--r--
│└┬┘└┬┘└┬┘
│ │  │  └─ права для остальных (other) — r--
│ │  └──── права для группы (group)   — r--
│ └─────── права для владельца (user) — rw-
└────────── тип файла: '-' (обычный), 'd' (каталог), 'l' (симлинк)

r — read, w — write, x — execute. Прочерк - — права нет.

Для каталогов биты значат немного другое:

  • r — можно листинговать содержимое (ls).
  • w — можно создавать и удалять файлы внутри.
  • x — можно «войти» в каталог (cd) и обращаться к файлам по имени.

Поэтому, например, для папки ~/.ssh/ нужны rwx (700) — чтобы вы могли заходить и видеть содержимое, но никто другой не мог даже прочитать список файлов с приватными ключами.

Восьмеричная нотация

Самый частый способ задать права — через число из трёх (или четырёх) цифр:

Цифра Биты Что значит
0 --- ничего
1 --x только выполнение
2 -w- только запись
3 -wx запись + выполнение
4 r-- только чтение
5 r-x чтение + выполнение
6 rw- чтение + запись
7 rwx всё

Три цифры — это разрешения для владельца / группы / остальных:

chmod 755 script.sh   # rwx / r-x / r-x — стандарт для исполняемых
chmod 644 README.md   # rw- / r-- / r-- — стандарт для текстовых
chmod 600 ~/.ssh/id_ed25519  # rw- / --- / --- — приватный ключ
chmod 700 ~/.ssh/             # rwx / --- / --- — каталог с ключами
chmod 750 /var/log/myapp/    # rwx / r-x / --- — папка лога для группы

Запомните три ключевых пресета:

  • 644 — обычный файл, читать может любой, писать только владелец.
  • 755 — исполняемый файл или папка, доступная для входа всем.
  • 600 / 700 — приватные данные владельца (SSH-ключи, секреты, домашние папки).

Символьная нотация

Альтернатива числам — изменения «дельтой»:

chmod u+x script.sh           # владельцу +x
chmod g-w shared.log          # группе убрать запись
chmod o=r public.txt          # остальным = только чтение
chmod a+r,a-w report.pdf      # всем (a=all) +read, -write

Кому: u (user), g (group), o (other), a (all = u+g+o).
Действие: + (добавить), - (убрать), = (установить ровно).
Что: r, w, x (плюс специальные s, t, X).

Когда удобнее символьная: «добавить +x скрипту» — короче, чем считать 755. Когда удобнее восьмеричная: «дать стандартный пресет» — chmod 755 понятнее.

Рекурсивный chmod и -X

Для каталогов часто нужно применить права ко всему содержимому:

sudo chmod -R 755 /var/www/myapp

Грабли: -R 755 поставит x-бит на все файлы, в том числе на текстовые. Это не страшно, но «грязно». Чище — использовать заглавный X, который ставит x только если файл уже исполняемый или это каталог:

sudo chmod -R u=rwX,go=rX /var/www/myapp

Альтернатива — раздельные команды для файлов и каталогов:

sudo find /var/www/myapp -type d -exec chmod 755 {} +
sudo find /var/www/myapp -type f -exec chmod 644 {} +

Это идеоматический паттерн при разворачивании сайта на сервер.

chmod и владелец vs группа

chmod не меняет владельца файла — только права. Чтобы поменять владельца, нужен chown:

sudo chown www-data:www-data /var/www/myapp/         # сменить user и group
sudo chown -R deploy:deploy /opt/myapp               # рекурсивно

Поэтому стандартный «деплой-чанк» это два шага: сначала chown, потом chmod.

SUID, SGID, sticky-bit

Реже встречающиеся биты — четвёртая (опциональная) цифра в восьмеричной нотации:

  • SUID (4xxx)s вместо x у владельца. Программа выполняется с правами владельца файла, а не запускающего. Так работает passwd: вы запускаете, но он внутри пишет в /etc/shadow от имени root.
  • SGID (2xxx)s у группы. Для каталогов: новые файлы внутри наследуют группу каталога. Удобно для общих папок команды.
  • Sticky-bit (1xxx)t у остальных. На каталогах: только владелец файла может удалить файл, даже если у других есть w. Так защищён /tmp от того, чтобы пользователи не удаляли чужие файлы.
chmod 4755 /usr/bin/myapp     # SUID
chmod 2775 /shared            # SGID
chmod 1777 /tmp               # sticky

В обычной серверной практике вы их редко ставите руками — они уже правильно настроены в системных файлах.

Частые вопросы

Что значит chmod в Linux

Команда «change mode» — изменение прав доступа к файлу. Управляет тем, кто из трёх категорий (владелец, группа, остальные) может читать (r), писать (w) и выполнять (x) файл. Действует только в UNIX-подобных системах с моделью POSIX-прав; в Windows права устроены принципиально иначе.

Что значат цифры 755 и 644

Восьмеричная запись прав. Три цифры — для владельца / группы / остальных. Каждая цифра — сумма: 4 (read) + 2 (write) + 1 (execute). 755 = rwxr-xr-x (владельцу всё, группе и остальным чтение и вход в каталог). 644 = rw-r--r-- (владельцу чтение и запись, всем остальным только чтение). 600 = rw------- — приватный файл.

Какие права ставить SSH-ключу

Каталог ~/.ssh/700 (только владелец видит и заходит). Приватный ключ (id_ed25519) — 600 (только владелец читает и пишет). authorized_keys на сервере — тоже 600. Если права шире, SSH-демон откажется работать с сообщением «bad ownership or modes». Подробно — в гайде по SSH-ключам.

Чем chmod отличается от chown

chmod меняет права (что можно делать с файлом). chown меняет владельца и группу (кому он принадлежит). Это две независимые оси: можно сменить владельца, не меняя прав, и наоборот. На деплое обычно делают подряд: сначала chown -R www-data:www-data, потом chmod нужного режима.

Что такое chmod -R

Флаг -R (recursive) применяет права ко всему содержимому каталога рекурсивно. chmod -R 755 /var/www/site пройдётся по всем файлам и подкаталогам и поставит им 755. Грабли: на текстовые файлы тоже навесится +x, что некрасиво. Чище — chmod -R u=rwX,go=rX <path> (заглавный X ставит execute только если он уже был или это каталог).

Почему chmod требует sudo

Менять права чужого файла — нет. Если файл ваш, chmod без sudo сработает. sudo нужен, когда вы пытаетесь поменять права файлу, у которого другой владелец (например, в /etc/, /var/, в чужих домашних папках). Поэтому для системных файлов почти всегда sudo chmod ....

Что почитать

  • SSH-ключи на Ubuntu: вход без пароля — каноничный пример, где chmod критичен: SSH откажется работать с приватным ключом, если права шире 600.
  • sudo — почему chmod чаще всего идёт через sudo при работе с системными файлами.
  • демон в Linux — типичная задача после установки демона: дать www-data или сервисному юзеру нужный доступ через chown + chmod.

Похожие материалы

grep — что это и зачем
Глоссарий

grep — что это и зачем

grep — стандартная команда Linux для поиска строк по шаблону внутри текстовых файлов и потоков. Берёт текст на вход, отдаёт строки, в которых нашлось совпадение. Базовый инструмент работы с логами, конфигами, выводом других команд через пайп.

Редакция
find — что это и зачем
Глоссарий

find — что это и зачем

find — стандартная команда Linux для поиска файлов и каталогов по имени, типу, правам, размеру, дате и десяткам других критериев. С помощью `-exec` поверх найденного можно сразу выполнять команды. Универсальный инструмент админа для массовой работы с файловой системой.

Редакция
snap — что это и зачем
Глоссарий

snap — что это и зачем

snap — система упаковки и установки приложений от Canonical, разработанная как альтернатива apt. Каждый snap — самодостаточный пакет со своими зависимостями, изолированный от системы через AppArmor. Используется на Ubuntu для Firefox, Chromium, microk8s и многих desktop-приложений.

Редакция
LVM — что это и зачем
Глоссарий

LVM — что это и зачем

LVM — слой абстракции между физическими дисками и файловыми системами в Linux. Объединяет диски в пулы (Volume Groups), нарезает их на логические тома (Logical Volumes) и позволяет изменять размер на лету. Альтернатива классическому partitioning, которая делает работу с дисками гибкой.

Редакция