Ответ
Изменение владельца (ownership) — базовая, но критически важная операция при настройке прав доступа для сервисов и скриптов в DevOps. Использую команду chown (change owner).
Базовый синтаксис:
chown [OPTIONS] NEW_OWNER:NEW_GROUP FILE
Практические примеры из работы:
-
Настройка веб-сервера: После деплоя кода от пользователя
deploy, нужно отдать файлы пользователюwww-data, от которого работает Nginx/Apache.sudo chown -R www-data:www-data /var/www/my-app/Ключ
-Rрекурсивно меняет владельца для всей директории и её содержимого. -
Настройка Docker volume или конфигурации: Если контейнер записывает логи в смонтированный volume от
root, а анализировать их нужно другому пользователю.sudo chown -R 1000:1000 /host/path/logs/ # 1000 — UID обычного пользователя в контейнере -
Смена только владельца или только группы:
sudo chown jenkins /opt/backup/script.sh # Меняет только владельца sudo chown :ci-team /opt/artifacts/ # Меняет только группу
Важные нюансы для DevOps:
- Безопасность: Не давать излишних прав (
chown root:rootдля пользовательских скриптов — плохая практика). Использую принцип наименьших привилегий. - Идемпотентность в Ansible: В плейбуках для этой задачи использую модуль
file:- name: Ensure correct ownership for app directory ansible.builtin.file: path: /opt/app owner: appuser group: appgroup recurse: yes # Аналог -R - Проблемы с символическими ссылками: По умолчанию
chown -Rменяет владельца самой ссылки, а не целевого файла. Чтобы изменить владельца цели, может потребоватьсяchown -hRили обход сfind. - Права
sudo: Почти всегда требуется для изменения владельца, если вы не являетесь текущим владельцем файла.
Ответ 18+ 🔞
А, ну вот, классика жанра! Сидишь ты такой, настраиваешь очередной сервис, а он тебе в ответ — «Permission denied». И тут начинается, ёпта, священный ритуал: chown. Без этой команды в девопсе — как без рук, реально. Сейчас разжуём, что к чему.
Базовый синтаксис — проще пареной репы:
chown [OPTIONS] NEW_OWNER:NEW_GROUP FILE
А теперь, как это в жизни выглядит, на реальных костылях:
-
Веб-сервер настроить. Деплойщик (
deploy) закинул файлы, а работать-то долженwww-data(Nginx/Apache). Что делаем? Правильно, отбираем и отдаём. Иначе сервис сядет на бутылку и ничего не отдаст.sudo chown -R www-data:www-data /var/www/my-app/Ключик
-R— это святое. Он пройдётся по всем папкам и файлам внутри, чтобы ни одна сволочь не осталась со старыми правами. Без него — доверия ебать ноль, что всё настроится. -
Docker volume подружить с логированием. Контейнер от
rootнакидал логов в общую папку, а тебе их смотреть нужно. Берёшь и насильно меняешь хозяина на обычного юзера (например, с UID 1000). Просто хуй с горы — не вариант, права должны быть чёткими.sudo chown -R 1000:1000 /host/path/logs/ -
Меняем что-то одно. Иногда надо только владельца поправить, а группу оставить. Или наоборот — только группу сменить, потому что в ней уже пол-отдела сидит.
sudo chown jenkins /opt/backup/script.sh # Меняем только хозяина sudo chown :ci-team /opt/artifacts/ # А тут только группу трогаем
А теперь, блядь, важные нюансы, без которых можно влететь по полной:
-
Безопасность, мать её. Это не шутки. Навесить
root:rootна какой-нибудь левый скрипт — это пидарас шерстяной так поступит. Принцип наименьших привилегий, ёпта! Дай ровно столько прав, сколько нужно для работы, и ни капли больше. Иначе потом будет вам хиросима и нигерсраки от безопасности. -
В Ansible. Чтобы не дёргать команду каждый раз вручную, используй модуль
file. Он идемпотентный — проверит, что уже правильно, и лишний раз не станет трогать. Удобно, чих-пых тебя в сраку.- name: Ensure correct ownership for app directory ansible.builtin.file: path: /opt/app owner: appuser group: appgroup recurse: yes # Тот самый наш -R -
Симлинки — хитрая жопа. По умолчанию
chown -Rпоменяет владельца самой ссылки, а не того файла, на который она ведёт. Представляешь? Ссылка новая, а доступ к реальным данным — нуль. Иногда надоchown -hRили черезfindпройтись, чтобы не облажаться. -
Права
sudo. Тут без вариантов. Если ты не владелец файла, то безsudoкоманда тебе вежливо, но твёрдо скажет «шёл бы ты на хуй». Запомни это как «Отче наш».
В общем, инструмент простой, но терпения ноль ебать — если накосячить с правами, потом полдня ищешь, почему сервис не стартует. Делай аккуратно.