Linux EPERMСредняя

Ошибка chmod: operation not permitted в Linux: причины и решение

Статья объясняет, почему в Linux возникает ошибка 'chmod: operation not permitted', и предлагает пошаговые решения: от простого использования sudo до изменения параметров монтирования и атрибутов файлов.

Обновлено 17 февраля 2026 г.
5-10 мин
Низкая
FixPedia Team
Применимо к:Linux (любой дистрибутив)chmod (coreutils 8.32+)

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

Ошибка chmod: changing permissions of '<файл>': Operation not permitted (код EPERM) возникает, когда команда chmod не может изменить атрибуты доступа (права) файла или каталога. В Linux это системная ошибка, означающая, что операция запрещена текущим пользователем или файловой системой.

Полный текст ошибки обычно выглядит так:

chmod: changing permissions of 'example.txt': Operation not permitted

Ошибка блокирует выполнение команды chmod и не позволяет задать новые права (например, 755, 644 или специальные биты вроде setuid).

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

  1. Недостаточно прав — вы не являетесь владельцем файла и не суперпользователем (root). Только владелец файла или root могут менять его права.
  2. Файловая система с ограничениями — файл расположен на разделе, смонтированном с опциями noexec (запрет выполнения), nosuid (запрет setuid/setgid) или ro (только чтение). Типично для USB-накопителей, сетевых (NFS) или защищённых разделов.
  3. Атрибут immutable или append-only — файл защищён флагами chattr +i (неизменяемый) или chattr +a (дозапись). Эти флаги блокируют любые изменения, включая права, даже для root.
  4. Некорректное использование setuid/setgid — попытка установить бит s (setuid/setgid) на:
    • неисполняемый файл (отсутствует x для владельца/группы);
    • каталог (setuid/setgid на каталогах игнорируется или запрещён).
  5. Попытка изменить права на символическую ссылку — если вы не root, chmod по умолчанию пытается изменить права на целевом файле ссылки, а не на самой ссылке. Если целевой файл вам не принадлежит, возникнет EPERM.

Способ 1: Использование sudo (если вы не владелец)

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

  1. Проверьте владельца файла:
    ls -l /путь/к/файлу
    

    Пример вывода:
    -rw-r--r-- 1 root root 1024 Feb 17 10:00 example.txt
    

    Здесь владелец — root.
  2. Выполните chmod с sudo:
    sudo chmod 644 /путь/к/файлу
    

    или, для установки setuid (если нужно):
    sudo chmod u+s /путь/к/исполняемому_файлу
    

⚠️ Важно: Используйте sudo только для доверенных файлов. Изменение прав на системные файлы может нарушить работу ОС.

Способ 2: Смена владельца файла (если у вас есть права sudo)

Если вы администратор и хотите, чтобы пользователь мог менять права самостоятельно, смените владельца файла.

  1. Смените владельца на нужного пользователя (например, alex):
    sudo chown alex /путь/к/файлу
    

    Можно одновременно сменить группу:
    sudo chown alex:developers /путь/к/файлу
    
  2. Теперь пользователь alex может изменять права без sudo:
    chmod 755 /путь/к/файлу
    

Способ 3: Проверка и изменение параметров монтирования

Если файл находится на внешнем носителе (USB, сетевой диск) или отдельном разделе, проверьте, как смонтирована файловая система.

  1. Найдите точку монтирования файла:
    findmnt /путь/к/файлу
    

    Пример вывода:
    TARGET SOURCE    FSTYPE OPTIONS
    /mnt/usb /dev/sdb1 vfat   rw,noexec,nosuid,nodev,relatime,uid=1000,gid=1000,...
    
  2. Если в колонке OPTIONS есть noexec, nosuid или ro (только чтение), нужно перемонтировать раздел:
    sudo mount -o remount,rw,exec /dev/sdb1 /mnt/usb
    

    Для постоянного решения отредактируйте /etc/fstab и удалите noexec/nosuid из опций для соответствующего раздела.

Способ 4: Снятие атрибутов immutable/append-only

Если файл защищён флагами chattr, снимите их перед изменением прав.

  1. Проверьте атрибуты:
    lsattr /путь/к/файлу
    

    Пример вывода:
    ----i--------e-- /путь/к/файлу
    

    Буква i означает immutable.
  2. Снимите атрибут (требует sudo):
    sudo chattr -i /путь/к/файлу
    

    Для append-only (a):
    sudo chattr -a /путь/к/файлу
    
  3. Теперь измените права:
    sudo chmod 644 /путь/к/файлу
    

💡 Совет: Флаги chattr часто используются для защиты критических системных файлов (например, /etc/passwd, /etc/shadow). Будьте осторожны при их снятии.

Способ 5: Проверка setuid/setgid и исполняемости

Если ошибка возникает при установке специальных битов (s или S), проверьте исполняемость файла.

  1. Убедитесь, что файл исполняем (имеет x для владельца):
    ls -l /путь/к/файлу
    

    Пример правильного вывода для setuid:
    -rwsr-xr-x 1 root root 12345 Feb 17 10:00 program
    

    Буква s в позиции владельца (вместо x) означает setuid.
  2. Если x отсутствует, добавьте его:
    sudo chmod u+x /путь/к/файлу
    

    Затем установите setuid:
    sudo chmod u+s /путь/к/файлу
    
  3. Для setgid (бит s в группе) аналогично:
    sudo chmod g+x /путь/к/файлу
    sudo chmod g+s /путь/к/файлу
    

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

  • Избегайте изменения прав на системные файлы без явной необходимости. Используйте sudo осознанно.
  • При работе с внешними носителями монтируйте их с опциями rw,exec (если нужно выполнять файлы) и без nosuid, если не требуется setuid.
  • Не устанавливайте атрибут immutable (chattr +i) на файлы, которые могут потребовать изменения прав в будущем.
  • Проверяйте исполняемость перед установкой setuid/setgid. Запомните: setuid/setgid требуют, чтобы файл был исполняемым для соответствующей категории (владелец/группа).
  • Регулярно проверяйте владельца файлов, особенно в каталогах, где работают несколько пользователей. Используйте ls -l для аудита.

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

Почему возникает ошибка 'chmod: operation not permitted' в Linux?
Как исправить ошибку 'chmod: operation not permitted' без sudo?
Может ли ошибка 'operation not permitted' возникать при установке setuid?
Что делать, если файл на внешнем USB-накопителе и chmod не работает?

Полезное

Определите текущего владельца и права файла
Используйте sudo для изменения прав (если вы не владелец)
Проверьте атрибуты файла (immutable, append-only)
Проверьте параметры монтирования файловой системы
Убедитесь в корректности setuid/setgid битов

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