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

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

chown (change owner) — команда Linux для смены владельца и группы файла или каталога. Парная к chmod: chown управляет тем, **кому** принадлежит файл, chmod — тем, что **можно с ним делать**. Базовая команда деплоя: дать сервисному пользователю доступ к каталогу приложения.

chown (change owner) — команда Linux для смены владельца и группы файла или каталога. Парная к chmod: chown управляет тем, кому принадлежит файл, chmod — тем, что можно с ним делать. Базовая команда деплоя: дать сервисному пользователю доступ к каталогу приложения.

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

В Linux у каждого файла два метаданных-«хозяина»: пользователь-владелец и группа. По умолчанию это тот, кто файл создал. Когда вы разворачиваете на сервере приложение под отдельным юзером (www-data для nginx, postgres для PostgreSQL, свой myapp для своего сервиса), нужно отдать каталог этому пользователю — иначе он не сможет в него писать. Именно эту задачу решает chown.

sudo chown alice:alice file.txt          # сменить и владельца, и группу на alice
sudo chown www-data /var/www/html        # сменить только владельца
sudo chown :developers shared.log        # сменить только группу (двоеточие в начале)
sudo chown -R www-data:www-data /var/www # рекурсивно для всего содержимого

В отличие от chmod, обычный пользователь не может «отдать» свой файл другому — только root может менять владельца. Поэтому chown почти всегда идёт с sudo.

Синтаксис

Базовая форма: chown <владелец>[:<группа>] <файл>....

Варианты:

  • alice — сменить только владельца, группу не трогать.
  • alice:devs — сменить и владельца на alice, и группу на devs.
  • alice: — сменить владельца на alice, группу — на основную группу alice (берётся из /etc/passwd).
  • :devs — сменить только группу.

Полезные флаги:

  • -R — рекурсивно, со всем содержимым каталога.
  • -h — менять владельца самого симлинка, а не файла, на который он указывает (по умолчанию chown идёт по симлинкам).
  • --from=oldowner — менять только если текущий владелец совпадает. Полезно при пакетной правке: «всё, что было у deploy, передать myapp».

Посмотреть текущего владельца — через ls -l:

$ ls -l /var/www/myapp
-rw-r--r--  1 www-data www-data  1234 May  4 10:00 index.html

Третья и четвёртая колонки — владелец и группа.

Типичные сценарии на Ubuntu

1. Развернули код приложения, надо отдать сервисному юзеру.

sudo chown -R myapp:myapp /opt/myapp

После этого systemd-сервис, который работает под User=myapp, сможет читать и писать в свой каталог.

2. Скопировали сайт в /var/www/, надо отдать nginx.

sudo chown -R www-data:www-data /var/www/site

Без этого nginx ловит «Permission denied» при попытке прочитать index.html.

3. Пользователь deploy в группе www-data, общий каталог.

sudo chown -R deploy:www-data /var/www/site
sudo chmod -R u=rwX,g=rX,o= /var/www/site
sudo chmod g+s /var/www/site                # SGID на каталог

chown deploy:www-data + chmod g+s означает: владелец deploy (он деплоит), группа www-data (nginx читает). SGID-бит на каталоге заставит новые файлы внутри наследовать группу www-data автоматически.

4. Откат после случайного chown -R на /usr.

К сожалению, без бэкапа точно вернуть оригинальные владельцы нельзя. На свежей системе Ubuntu эту проблему «лечат» через переустановку всех пакетов с восстановлением прав, но это отдельная боль. Поэтому никогда не запускайте chown -R на корень или /usr — всегда дважды проверяйте путь.

chown vs chmod — что когда

Задача Команда
«Сделать файл исполняемым» chmod +x
«Никто кроме меня не должен читать» chmod 600
«Этот каталог должен принадлежать nginx» chown www-data
«Сервис должен писать в /var/log/myapp/» chown myapp + chmod 750
«Папка с SSH-ключами на сервере» chmod 700 (владелец уже правильный)

Они дополняющие, не альтернативные. На деплое почти всегда идут парой:

sudo chown -R myapp:myapp /opt/myapp
sudo find /opt/myapp -type d -exec chmod 755 {} +
sudo find /opt/myapp -type f -exec chmod 644 {} +

Подробно про права (rwx, восьмеричная нотация, рекурсия) — в термине chmod.

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

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

Команда «change owner» — изменение владельца и/или группы файла. Только root может менять владельца на любого, обычный пользователь не может «отдать» свой файл. Поэтому в реальной работе chown почти всегда запускается через sudo.

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

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

Зачем нужен sudo для chown

Менять владельца файла на чужого — операция, которую может делать только root. Иначе любой юзер мог бы «свалить» свой файл на другого пользователя и подсунуть ему вредоносный скрипт. Поэтому даже изменение принадлежности своего файла на другого пользователя требует sudo.

Как сделать рекурсивный chown

sudo chown -R user:group /path/to/dir. Флаг -R (recursive) пройдётся по всему содержимому каталога. Стандартный паттерн при деплое: sudo chown -R www-data:www-data /var/www/site. Будьте осторожны с путём — chown -R на /usr или /etc может сломать систему.

Как сменить только группу, без владельца

Через chown :group <файл> (двоеточие в начале). Например, sudo chown :developers shared.log — сменит группу на developers, владельца не тронет. Альтернативный вариант — отдельная команда chgrp, она делает только это.

Что делает chown user: (с двоеточием на конце)

Сменит и владельца на user, и группу — на основную группу этого пользователя (читается из /etc/passwd). Удобно, когда у юзера и его основной группы одно имя (стандарт на Ubuntu): sudo chown -R alice: /home/alice — присвоит alice:alice всему содержимому.

Что почитать

  • chmod — парная команда для управления правами доступа. На деплое почти всегда идут вместе: chown + chmod.
  • sudo — chown почти всегда требует root, поэтому через sudo.
  • SSH-ключи на Ubuntu — пример, где владелец критичен: ~/.ssh/authorized_keys должен принадлежать вам, иначе SSH-демон откажется его читать.

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

Сроки поддержки Ubuntu LTS — на сколько хватает релиза
Глоссарий

Сроки поддержки Ubuntu LTS — на сколько хватает релиза

Ubuntu LTS — это релиз с долгой поддержкой: 5 лет бесплатных security-обновлений и 10 лет с подпиской Ubuntu Pro. Промежуточные релизы (24.10, 25.04) живут всего 9 месяцев. Разбираем, какие версии сейчас актуальны, до какой даты безопасно сидеть на 22.04 и 24.04, и когда выходит 26.04 LTS.

Редакция
Debian или Ubuntu — что выбрать
Глоссарий

Debian или Ubuntu — что выбрать

Debian и Ubuntu — две родственные операционные системы: Ubuntu сделана на базе Debian и тянет оттуда пакеты, формат `.deb` и пакетный менеджер apt. Различия — в скорости релизов, наборе из коробки и философии. Кратко: Debian Stable консервативнее и аскетичнее, Ubuntu LTS — свежее и удобнее, особенно для рабочего стола и облаков. Под прод подходят оба, выбор сводится к тому, что вам важнее: предсказуемость или новизна.

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

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

bash (Bourne Again SHell) — это командная оболочка, которая обрабатывает то, что вы вводите в терминале Linux. Запускает программы, расширяет переменные, выполняет конструкции `if` / `for`, читает скрипты из файлов с шебангом `#!/bin/bash`. На Ubuntu — оболочка по умолчанию для интерактивных пользователей; для системных скриптов используют более строгий `/bin/sh` (`dash`).

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

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

Ubuntu — самый популярный дистрибутив Linux: бесплатная операционная система на базе Debian, удобная и для серверов, и для рабочего стола. Под капотом Linux-ядро, поверх — пакетный менеджер apt, рабочий стол GNOME (на Desktop) и стек systemd-сервисов. Релизы выходят каждые полгода, LTS-версии — раз в два года и поддерживаются 5 лет.

Редакция