Перейти к содержанию
Innovialabs

Права доступа в Linux: chmod, chown и пользователи

Основы4 мин

Коротко

У каждого файла в Linux есть владелец, группа и три набора прав (чтение, запись, выполнение) для владельца, группы и всех остальных; chmod меняет права, chown меняет владельца.

Коротко: как Linux решает, кому что можно

У каждого файла и каталога есть владелец (пользователь), группа и три набора прав:

  • u (user) — права владельца;
  • g (group) — права участников группы;
  • o (others) — права всех остальных.

В каждом наборе три бита: r (read, чтение), w (write, запись), x (execute, выполнение). Посмотреть их можно командой ls -l:

$ ls -l
-rw-r--r-- 1 deploy www-data  512 app.conf
drwxr-x--- 2 deploy www-data 4096 storage

Первый символ — тип (- файл, d каталог), дальше три тройки: владелец, группа, остальные. deploy — владелец, www-data — группа.

Что значат r, w, x для файлов и каталогов

Для файлов и каталогов биты работают по-разному, и это главный источник путаницы.

БитФайлКаталог
rчитать содержимоевидеть список файлов
wизменять содержимоесоздавать, удалять, переименовывать файлы внутри
xзапускать как программузаходить в каталог и обращаться к файлам по имени

Важные следствия:

  • Без x на каталоге нельзя открыть файл внутри, даже если на сам файл есть права чтения.
  • Удаление файла зависит от прав на каталог (w + x), а не на сам файл.
  • Чтобы веб-сервер прочитал /var/www/app/public/index.html, ему нужен x на каждом каталоге пути.

Числовая и символьная запись

Числовая (восьмеричная) запись складывает веса битов: r = 4, w = 2, x = 1. Одна цифра на каждый набор.

ЧислоПраваТипичное применение
644rw-r--r--обычные файлы, конфиги без секретов
640rw-r-----конфиги, которые читает группа сервиса
600rw-------приватные ключи, .env
755rwxr-xr-xкаталоги, исполняемые скрипты
750rwxr-x---каталоги, закрытые от посторонних
chmod 640 .env
chmod 755 deploy.sh

Символьная запись удобна, когда нужно изменить один бит, не трогая остальные:

chmod u+x deploy.sh      # добавить владельцу выполнение
chmod g-w config.yml     # убрать запись у группы
chmod o= secret.key      # убрать все права у остальных
chmod -R g+rX storage    # X ставит x только каталогам (и уже исполняемым файлам)

Владельцы и группы: chown и chgrp

  • chown deploy file — сменить владельца;
  • chown deploy:www-data file — сменить владельца и группу;
  • chgrp www-data file — сменить только группу;
  • -R — рекурсивно для всего каталога.

Пользователя добавляют в группу так: sudo usermod -aG www-data deploy (флаг -a обязателен, иначе пользователь потеряет другие группы). Изменения групп действуют после нового входа в систему.

Типовая схема для веб-приложения

Задача: код меняет только пользователь деплоя, веб-сервер или PHP-FPM код читает, а пишет только в специальные каталоги.

# владелец — пользователь деплоя, группа — пользователь веб-сервера
sudo chown -R deploy:www-data /var/www/app

# каталоги 750, файлы 640
sudo find /var/www/app -type d -exec chmod 750 {} \;
sudo find /var/www/app -type f -exec chmod 640 {} \;

# каталоги, куда приложение пишет (загрузки, кэш, логи)
sudo chmod -R g+w /var/www/app/storage

# секреты читает только владелец и группа
sudo chmod 640 /var/www/app/.env

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

Названия пользователей зависят от дистрибутива: в Debian и Ubuntu это обычно www-data, в RHEL-подобных системах — nginx или apache.

Частые ошибки

  • chmod 777 как способ «починить» ошибку доступа. Это открывает запись всем пользователям системы. Найдите, какой процесс от какого пользователя работает, и выдайте права именно ему.
  • Рекурсивный chmod -R 755 на всё, из-за чего все файлы становятся исполняемыми. Разделяйте права для файлов и каталогов через find.
  • Деплой от root. Файлы получают владельца root, и приложение потом не может писать в кэш.
  • Приватный SSH-ключ с правами 644. OpenSSH откажется его использовать; нужно 600.
  • Забытый x на родительском каталоге, из-за которого nginx отдает 403 при корректных правах на сам файл.

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

Это маска, которая определяет права новых файлов по умолчанию. Частое значение 022 дает файлам 644 и каталогам 755; 027 закрывает новые файлы от «остальных». Текущее значение показывает команда umask.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.