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

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

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

chown

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-демон откажется его читать.

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

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, которая делает работу с дисками гибкой.

Редакция