open atlas
↑ К треку
Командная строка CLI · 05 · 02

Владение и chown

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

CLI Junior ◷ 20 min
Уровень
ОсновыJuniorMiddleSenior

Ты выставил chmod 755 на файл, а веб-сервер всё равно возвращает 403. Проверяешь права — выглядят правильно. Проблема почти всегда в владении: файл принадлежит root, а веб-сервер работает как www-data, поэтому сервер попадает под тройку «other», а не «user». Понимание того, как ядро выбирает, какую тройку rwx применить — и как менять владение — это недостающий элемент, который заставляет права работать по-настоящему.

Цель

После этого урока ты сможешь читать владельца и группу из вывода ls -l, объяснять, какую тройку rwx ядро применит для данного процесса, и менять владение файлом с помощью chown user:group file и chgrp group file.

1

У каждого файла есть владелец и группа. ls -l показывает их в третьем и четвёртом столбцах:

ls -l /etc/nginx/nginx.conf
-rw-r--r-- 1 root root 2656 Jun 10 09:00 /etc/nginx/nginx.conf

Здесь владелец — root, группа-владелец — тоже root. Девять битов прав (rw-r--r--, то есть 644) имеют смысл только тогда, когда знаешь, кто эти субъекты — потому что ядро применяет разные тройки в зависимости от того, кто спрашивает.

2

Ядро выбирает тройку по строгому правилу трёх шагов. Когда процесс пытается получить доступ к файлу, ядро проверяет по порядку:

  1. Если эффективный UID процесса совпадает с владельцем файла → применить тройку user (биты 2–4).
  2. Иначе, если эффективный GID процесса (или любая дополнительная группа) совпадает с группой файла → применить тройку group (биты 5–7).
  3. Иначе → применить тройку other (биты 8–10).

Ядро останавливается на первом совпадении. Именно поэтому файл с режимом 640, принадлежащий root:root, полностью недоступен для пользователя не-root, не входящего в группу root — он попадает в тройку «other», которая ---.

Это также означает: если ты владелец файла, твой доступ определяется исключительно тройкой user — даже если тройка group даёт больше прав.

3

chown меняет владельца, группу или обоих. Нужны права root (или sudo):

# изменить только владельца
sudo chown alice file.txt

# изменить только группу (двоеточие с пустым полем владельца)
sudo chown :devs file.txt

# изменить и владельца, и группу сразу
sudo chown alice:devs file.txt

# рекурсивно — используй осторожно
sudo chown -R alice:devs /var/www/myapp

Синтаксис user:group — наиболее распространённая форма. В старой документации встречается user.group (точка) — оба варианта работают, но двоеточие является стандартом.

4

chgrp меняет только группу. Он существует потому, что непривилегированные пользователи могут использовать его для смены группы файла на любую из своих групп (без sudo):

# alice может сделать это, если она член группы 'devs'
chgrp devs project.conf

# root может менять на любую группу
sudo chgrp www-data /var/www/html/index.html

На практике chown :group file делает то же самое, поэтому chgrp используется в основном в скриптах, где намерение очевидно.

Разбор примера

Диагностика 403 веб-сервера.

Файл /var/www/html/app.conf существует с режимом 640. Веб-сервер работает как www-data.

ls -l /var/www/html/app.conf
-rw-r----- 1 root root 1024 Jun 10 15:00 /var/www/html/app.conf

Режим 640: owner=rw-, group=r--, other=---. Веб-сервер (www-data) не является root и не входит в группу root, поэтому ядро применяет тройку «other»: ---. Нет права чтения → 403.

Исправление: меняем группу на www-data, чтобы сервер попал в тройку group (r--):

sudo chown root:www-data /var/www/html/app.conf
ls -l /var/www/html/app.conf
-rw-r----- 1 root www-data 1024 Jun 10 15:01 /var/www/html/app.conf

Теперь www-data совпадает с группой → применяется тройка group r-- → чтение разрешено. Файл остаётся с режимом 640; изменилась только группа.

Почему это работает

На macOS chown и chgrp работают так же, и трёхшаговая проверка владения ядром идентична. Одна особенность macOS: System Integrity Protection (SIP) запрещает даже root менять владение определённых системных файлов в /System и /usr. На обычном Linux-сервере этого ограничения нет — root может выполнить chown на любом файле.

Частая ошибка

Распространённая ошибка при деплое приложений — запустить chown -R root:root /var/www/myapp для «защиты» каталога, а потом удивляться, почему приложение не может писать в лог-файлы. Процесс приложения работает не от root (например, node или www-data), поэтому каждая попытка записи упирается в тройку «other» с правами ---. Исправление: установить группу на сервисного пользователя приложения и убедиться, что тройка group разрешает запись: chown -R root:www-data /var/www/myapp && chmod -R 664 /var/www/myapp/logs.

Проверь себя
Викторина

Файл принадлежит alice:devs с режимом 640. Пользователь bob входит в группу devs. Что bob может делать с этим файлом?

Итог

У каждого файла Linux есть владелец (UID) и группа (GID). Когда процесс обращается к файлу, ядро выполняет трёхшаговую проверку: UID процесса совпадает с владельцем файла? → применить тройку user. GID процесса совпадает с группой файла? → применить тройку group. Иначе → тройка other. Первое совпадение выигрывает. chown user:group file меняет владельца и группу одной командой; chgrp group file меняет только группу. Неправильное владение — а не неправильные права — является самой частой причиной неожиданных 403 и отказов в доступе на продакшне.

Практика

Начни сверху. Задачи идут от простого к сложному: вспомнить факт, применить к случаю, затем senior-уровень. Открой, попробуй, потом открой ответ.

вспомнитьприменитьуглубить0 из 4 завершено

Что-то непонятно?

Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.

хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources4
expand
  1. 01
  2. 02
  3. 03
  4. 04

Trademarks belong to their respective owners. Editorial reference only.