Linux

Ошибка 'permission denied' в Git на Linux: причины и 5 способов исправления

Эта статья поможет решить распространённую ошибку 'permission denied' при работе с Git на Linux. Вы узнаете, как правильно управлять правами доступа к файлам и папкам репозитория, настроить безопасные директории и избежать конфликтов с sudo.

Обновлено 8 апреля 2026 г.
10-15 мин
Низкая
FixPedia Team
Применимо к:Ubuntu 20.04+Debian 11+Fedora 35+Arch LinuxGit 2.30+

Введение / Зачем это нужно

Ошибка permission denied (отказ в доступе) — одна из самых частых проблем при работе с Git на Linux. Она возникает, когда у текущего пользователя нет прав на чтение/запись файлов в директории репозитория или при обращении к удалённому серверу. Эта инструкция поможет быстро диагностировать и исправить проблему, восстановив работоспособность Git без потери данных.

Требования / Подготовка

Перед началом убедитесь, что:

  • У вас есть доступ к терминалу Linux (Ubuntu, Debian, Fedora и т.д.)
  • Установлен Git (версия 2.30 или новее). Проверить: git --version
  • Вы знаете полный путь к локальному репозиторию, где возникает ошибка
  • Для некоторых шагов могут потребоваться права sudo (если репозиторий в системной директории)

Причины ошибки 'permission denied' в Git

Ошибка обычно вызвана одной из следующих причин:

  1. Несовпадение владельца файлов: Файлы репозитория принадлежат другому пользователю (например, root), а вы работаете под своей учётной записью.
  2. Системные директории: Попытка разместить репозиторий в защищённой папке (/usr, /opt, /var).
  3. Некорректные права: У файлов или папок репозитория отсутствуют флаги чтения/записи для вашего пользователя.
  4. Проблемы с удалённым доступом: Неверные права на SSH-ключ или недостаточно прав на удалённом сервере.

Шаг 1: Определите точную причину ошибки

Сначала посмотрите полный текст ошибки в терминале. Он укажет, какая операция (clone, pull, push, fetch) и в каком пути вызвала проблему.

# Пример ошибки при попытке клонирования
git clone https://github.com/user/repo.git
# fatal: could not create work tree dir 'repo': Permission denied

# Пример ошибки при pull
git pull origin main
# error: unable to create file path/to/file.txt: Permission denied

Запишите полный путь к репозиторию, упомянутый в ошибке.

Шаг 2: Исправьте права доступа к файлам репозитория

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

# Замените /path/to/repo на фактический путь к вашей папке репозитория
sudo chown -R $USER:$USER /path/to/repo

Затем установите корректные права доступа:

# Дать владельцу полные права (чтение, запись, выполнение для папок)
find /path/to/repo -type d -exec chmod 755 {} \;

# Дать владельцу права на чтение и запись для файлов
find /path/to/repo -type f -exec chmod 644 {} \;

# Особые права для исполняемых файлов (если есть)
find /path/to/repo -type f -name "*.sh" -exec chmod +x {} \;

⚠️ Важно: Не используйте chmod 777 — это серьёзная уязвимость безопасности.

Шаг 3: Настройте безопасные директории в Git

Если репозиторий находится в системной или общей директории, добавьте его в список безопасных:

# Добавить конкретный путь в глобальную конфигурацию
git config --global --add safe.directory /path/to/repo

# Или разрешить все директории (не рекомендуется для безопасности)
git config --global --add safe.directory '*'

Проверьте текущий список безопасных директорий:

git config --global --get-all safe.directory

Шаг 4: Используйте правильный протокол доступа (SSH вместо HTTPS)

Если ошибка возникает при работе с удалённым репозиторием (clone, pull, push), возможно, проблема в аутентификации. Переключитесь с HTTPS на SSH:

  1. Сгенерируйте SSH-ключ (если ещё нет):
    ssh-keygen -t ed25519 -C "your_email@example.com"
    
  2. Добавьте публичный ключ на GitHub/GitLab/Bitbucket:
    cat ~/.ssh/id_ed25519.pub
    
    Скопируйте вывод и вставьте в настройках аккаунта на хостинге.
  3. Измените URL репозитория на SSH-формат:
    git remote set-url origin git@github.com:user/repo.git
    

Проверьте подключение:

ssh -T git@github.com

Шаг 5: Переклонируйте репозиторий в правильную директорию

Если предыдущие шаги не помогли, переместите репозиторий в домашнюю директорию пользователя (~/), где нет ограничений:

# Создайте папку для проектов (если нет)
mkdir -p ~/projects

# Переместите репозиторий
mv /path/to/repo ~/projects/

# Или удалите и клонируйте заново
rm -rf /path/to/repo
git clone https://github.com/user/repo.git ~/projects/repo

После перемещения перейдите в директорию репозитория и проверьте статус:

cd ~/projects/repo
git status

Проверка результата

Убедитесь, что ошибка устранена, выполнив основные операции:

# 1. Проверка статуса (должна работать без ошибок)
git status

# 2. Получение изменений с удалённого репозитория
git pull

# 3. Если есть незакоммиченные изменения — создайте тестовый коммит
echo "test" >> test.txt
git add test.txt
git commit -m "test commit"
git push

Если все команды выполняются без ошибок permission denied, проблема решена.

Возможные проблемы

Проблема: Ошибка persists после chown

Решение: Убедитесь, что вы указали правильный путь. Проверьте владельца командой:

ls -la /path/to/repo

Первые столбцы покажут владельца и группу. Должен отображаться ваш пользователь.

Проблема: Ошибка при работе с git submodule

Решение: Для подмодулей нужно исправить права в каждой их папке:

git submodule foreach --recursive 'sudo chown -R $USER:$USER .'

Проблема: Ошибка detected dubious ownership после настройки safe.directory

Решение: Убедитесь, что путь в safe.directory точно совпадает с реальным путём репозитория. Используйте абсолютный путь.

Проблема: Нет прав sudo для выполнения chown

Решение: Обратитесь к администратору системы или переместите репозиторий в домашнюю директорию, где chown не требуется.

Проблема: Ошибка возникает только при push/pull

Решение: Проверьте права на .git-папку внутри репозитория:

sudo chown -R $USER:$USER /path/to/repo/.git

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

Почему возникает ошибка 'permission denied' в Git на Linux?
Можно ли использовать sudo с Git? Это безопасно?
Как предотвратить ошибку 'permission denied' в будущем?
Что такое safe.directory в Git и как его настроить?

Полезное

Определите точную причину ошибки
Исправьте права доступа к файлам репозитория
Настройте безопасные директории в Git
Используйте правильный протокол доступа (SSH вместо HTTPS)
Переклонируйте репозиторий в правильную директорию

Эта статья помогла вам решить проблему?