Linux EACCESСредняя

Git permission denied на Linux: 5 способов исправить права доступа

Статья объясняет, почему в Git на Linux возникает ошибка 'permission denied' и как её устранить. Вы узнаете, как правильно настроить права доступа к файлам и папкам репозитория с помощью chmod, chown и других инструментов.

Обновлено 16 февраля 2026 г.
5-10 мин
Низкая
FixPedia Team
Применимо к:Git 2.0+Любой дистрибутив Linux (Ubuntu 20.04+, Debian 10+, CentOS 8+, Fedora 35+)

Что означает ошибка EACCES

Ошибка permission denied (или EACCES в Linux) возникает, когда процесс Git не имеет достаточных прав операционной системы для чтения, записи или выполнения операции с файлом или директорией. Типичные сообщения Git:

fatal: could not create work tree dir 'project' : Permission denied
error: unable to create file (Permission denied)

Эта ошибка блокирует все операции Git: клонирование, коммиты, создание веток, проверку статуса. Симптом всегда один — Git сообщает о недостатке прав, но не уточняет, какие именно права отсутствуют.

Причины возникновения

  1. Неправильные права на файлы/папки репозитория — у вашего пользователя нет прав на запись (w) в директорию репозитория или на изменение файлов.
  2. Файлы принадлежат другому пользователю — например, вы клонировали репозиторий через sudo, и все файлы теперь принадлежат root.
  3. Родительские каталоги недоступны — у вас нет прав на выполнение (x) в одной из родительских папок пути к репозиторию.
  4. Файл заблокирован другим процессом — другой экземпляр Git или программа удерживает файл (редко, но возможно).
  5. Попытка записи в системную/защищённую папку — например, попытка создать репозиторий в /usr/share без прав администратора.
  6. Некорректные права на .git-каталог — особенно после сбоев или переноса репозитория.

Способ 1: Изменение прав доступа (chmod)

Самый частый случай — у вашего пользователя нет прав на запись в папку репозитория.

  1. Определите проблемную папку из текста ошибки. Допустим, это /home/user/projects/myapp.
  2. Проверьте текущие права:
    ls -la /home/user/projects/myapp
    

    Пример вывода:
    drwxr--r-- 2 root root 4096 Feb 16 10:00 myapp
    

    Здесь видно, что владелец — root, а у группы и остальных нет прав на запись.
  3. Добавьте права для вашего пользователя (предположим, ваш пользователь — user):
    chmod -R u+rwx /home/user/projects/myapp
    

    Флаг -R применяет изменения рекурсивно ко всем вложенным файлам и папкам.
    • u+rwx — даёт владельцу права на чтение, запись и выполнение.
    • Если вы работаете в группе, можно добавить g+rwx.
  4. Проверьте результат:
    ls -la /home/user/projects/myapp
    

    Теперь владелец должен иметь rwx.

⚠️ Важно: Не давайте права 777 (всем полный доступ) — это угроза безопасности. Всегда ограничивайте права только необходимыми пользователями.

Способ 2: Смена владельца файлов (chown)

Если файлы репозитория принадлежат другому пользователю (например, root), нужно сменить владельца на текущего.

  1. Определите текущего владельца:
    ls -la /путь/к/репозиторию
    
  2. Измените владельца рекурсивно:
    sudo chown -R $USER:$USER /путь/к/репозиторию
    
    • $USER — автоматически подставляет ваше имя пользователя.
    • :$USER — аналогично для группы.
    • Если нужно указать явно: sudo chown -R username:groupname /path.
  3. Проверьте:
    ls -la /путь/к/репозиторию
    

    Владельцем должен стать ваш пользователь.

Способ 3: Проверка и исправление прав на родительских каталогах

Git может не иметь доступа не к самому репозиторию, а к одной из родительских папок в пути.

  1. Проверьте полный путь:
    namei -l /полный/путь/к/репозиторию
    

    Пример вывода:
    f: /home/user/projects/myapp
     drwxr-xr-x root root /
     drwxr-xr-x root root home
     drwxr-xr-x user user user
     drwxr-xr-x root root projects
     drwxr--r-- root root myapp
    

    Здесь видно, что у папки projects владелец root и у группы/остальных нет прав на выполнение (x). Это блокирует доступ.
  2. Исправьте права на проблемный каталог (в примере — projects):
    sudo chmod 755 /home/user/projects
    

    Или, если нужно владение:
    sudo chown user:user /home/user/projects
    
  3. Повторите для всех уровней, где права некорректны.

Способ 4: Работа в правильной директории

Иногда ошибка возникает из-за попытки создать репозиторий в системной папке, требующей root-прав.

  1. Не работайте в /usr, /opt, /var и подобных без необходимости.
  2. Используйте домашнюю директорию (~/) или папки с правами на запись:
    cd ~/projects
    git clone <url>
    
  3. Если репозиторий уже создан в защищённой папке, переместите его:
    sudo mv /usr/local/repo ~/repo
    sudo chown -R $USER:$USER ~/repo
    

Способ 5: Использование sudo (с осторожностью)

Если репозиторий действительно должен находиться в системной папке и требует прав root, используйте sudo для операций Git. Но это не рекомендуется для повседневной работы, так как создаст проблемы с владельцем файлов.

  1. Выполняйте команды Git с sudo:
    sudo git commit -m "message"
    sudo git push origin main
    
  2. После этого исправьте владельца, чтобы не зависеть от sudo:
    sudo chown -R $USER:$USER /путь/к/репозиторию
    
  3. В будущем работайте без sudo.

⚠️ Важно: Регулярное использование sudo с Git опасно — вы можете случайно изменить системные файлы. Лучше настройте права правильно (Способы 1-3).

Способ 6: Настройка групповых прав для совместной работы

Если несколько пользователей работают с одним репозиторием (например, на сервере), настройте групповые права.

  1. Создайте общую группу (если нет):
    sudo groupgroup devteam
    sudo usermod -aG devteam user1
    sudo usermod -aG devteam user2
    
  2. Установите группу для репозитория:
    sudo chgrp -R devteam /путь/к/репозиторию
    
  3. Дайте группе права на чтение и запись:
    sudo chmod -R g+rwX /путь/к/репозиторию
    
  4. Установите setgid-бит на папки, чтобы новые файлы наследовали группу:
    sudo find /путь/к/репозиторию -type d -exec chmod g+s {} \;
    
  5. Проверьте:
    ls -la /путь/к/репозиторию
    
    У папок должен быть drwxrwsr-x (обратите внимание на s в группе).

Профилактика

Чтобы избежать ошибки permission denied в будущем:

  1. Всегда клонируйте репозитории в папки, где у вас есть права (домашняя директория, /tmp, /var/tmp).
  2. Никогда не используйте sudo git clone — это создаст проблемы с владельцем.
  3. Регулярно проверяйте права на важные репозитории:
    ls -la ~/projects/
    
  4. При совместной работе настройте групповые права (Способ 6) сразу после создания репозитория.
  5. Избегайте перемещения репозиториев между разными пользователями без смены владельца (chown).
  6. Используйте .gitignore для исключения системных файлов (например, IDE-конфигов), которые могут иметь странные права.
  7. Обновляйте Git — в новых версиях улучшена обработка прав доступа.

Если проблема возникает repeatedly, проверьте, не запущены ли фоновые процессы (например, антивирус или система контроля версий), которые могли заблокировать файлы. Используйте lsof | grep <файл> для поиска процессов, удерживающих файл.

Часто задаваемые вопросы

Почему в Git возникает ошибка 'permission denied' даже при использовании sudo?
Можно ли отключить проверку прав доступа в Git?
Что делать, если chmod не помогает?
Как предотвратить ошибку permission denied при совместной работе над репозиторием?

Полезное

Определите проблемный файл или папку
Проверьте текущие права доступа
Измените права доступа (chmod)
Измените владельца файлов (chown)
Проверьте родительские каталоги