Как изменить владельца файла в Linux?

«Как изменить владельца файла в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Изменение владельца (ownership) — базовая, но критически важная операция при настройке прав доступа для сервисов и скриптов в DevOps. Использую команду chown (change owner).

Базовый синтаксис:

chown [OPTIONS] NEW_OWNER:NEW_GROUP FILE

Практические примеры из работы:

  1. Настройка веб-сервера: После деплоя кода от пользователя deploy, нужно отдать файлы пользователю www-data, от которого работает Nginx/Apache.

    sudo chown -R www-data:www-data /var/www/my-app/

    Ключ -R рекурсивно меняет владельца для всей директории и её содержимого.

  2. Настройка Docker volume или конфигурации: Если контейнер записывает логи в смонтированный volume от root, а анализировать их нужно другому пользователю.

    sudo chown -R 1000:1000 /host/path/logs/  # 1000 — UID обычного пользователя в контейнере
  3. Смена только владельца или только группы:

    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: Почти всегда требуется для изменения владельца, если вы не являетесь текущим владельцем файла.