#Что означает ошибка
chmod: changing permissions of ... : Operation not permitted
chmod: changing permissions of 'file': Operation not permitted значит, что вы не владелец файла (менять права может только владелец и root), либо файл лежит на файловой системе без поддержки прав Unix (NTFS, FAT, exFAT, сетевые шары), либо у него установлен атрибут immutable.
Сначала узнайте, кто владелец и на какой ФС лежит файл.
От этого зависит решение.
Ошибка возникает, когда вы не владелец файла, файловая система не поддерживает права (NTFS, FAT, сетевые диски) или у файла установлен атрибут неизменяемости.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Вы не владелец файла | Нужны права суперпользователя. | Используйте sudo. |
| Файловая система без прав Unix | Диск NTFS или FAT. | Измените параметры монтирования. |
| Установлен атрибут immutable | lsattr показывает i. | Снимите атрибут (chattr -i). |
| Смонтировано только для чтения | Ошибка read-only. | Перемонтируйте. |
#Пошаговое решение
- Проверьте владельца файлаВ терминале сервера выполните
ls -ld ПУТЬ_К_КАТАЛОГУиls -l ПУТЬ_К_ФАЙЛУ, подставив пути из сообщения об ошибке. В выводе посмотрите владельца, группу и разрешения. Затем уточните, от какого пользователя работает служба (systemctl show ИМЯ_СЛУЖБЫ -p Userдля службы systemd). Изменяйте владельца или права только после определения правильного значения; не выставляйте777ради обхода ошибки. - Используйте sudo или смените владельцаСначала в терминале выполните
id,ls -ld "/реальный/путь"иfindmnt -T "/реальный/путь", подставив существующий файл или каталог вместо примера. Если каталог принадлежит другому пользователю или находится на NTFS/exFAT либо сетевом ресурсе,chmodможет быть недоступен или бессмысленен. Менять владельца черезsudo chownвправе только администратор и только после проверки правильности объекта и последствий для службы. Не запускайте рекурсивныйchown -Rна/usr,/etc, домашнем каталоге другого пользователя или каталоге сайта ради одной ошибки. - Проверьте тип файловой системыВ терминале выполните
findmnt -T /путь/к/файлу -o SOURCE,FSTYPE,OPTIONS, подставив фактический путь из ошибки. Если это NTFS/exFAT, обычныйchmodможет не поддерживать UNIX-права, а доступ определяется параметрами монтирования. Если указаноro, раздел смонтирован только для чтения. Не применяйтеchmod -R 777: это не устраняет отсутствие поддержки прав или аппаратную неисправность. - Для NTFS/exFAT задайте uid/umask при монтированииНа NTFS и exFAT нет обычной модели прав Linux для каждого файла, поэтому
chmodможет ничего не менять. Сначала определите файловую систему сfindmnt -T /реальный/файли проверьте параметры её монтирования. Для таких томов доступ задаётся через параметры монтирования uid/gid/umask; менять их нужно в настройке конкретного тома, а не рекурсивным chmod. - Проверьте атрибут immutableНа ext4 и некоторых других Linux-файловых системах проверьте атрибуты командой
lsattr -- /фактический/файл. Букваiозначает запрет изменений, который может быть намеренно выставлен администратором или системой защиты. Не снимайте его автоматически. Если файл действительно ваш и атрибут установлен ошибочно, согласуйте изменение с администратором; после исправления проверьте запись и восстановите требуемые ограничения.Linux · Терминал (Bash)КомандаПоказать атрибуты.lsattr имя_файла
#Владелец
Проверьте: ls -l файл и id. Если владелец другой, используйте sudo chmod 644 файл или смените владельца: sudo chown $USER файл. Для множества файлов: sudo chown -R $USER:$USER каталог. Меняйте права отдельно для каталогов и файлов: find . -type d -exec chmod 755 {} + и find . -type f -exec chmod 644 {} +. Не делайте chmod -R 777.
#Файловая система
Выполните df -T файл или mount | grep .... На NTFS/exFAT/FAT права задаются при монтировании: mount -o uid=1000,gid=1000,umask=022 /dev/sdb1 /mnt/data или в /etc/fstab (uid=1000,gid=1000,umask=022). В WSL файлы Windows (/mnt/c) требуют опции metadata в /etc/wsl.conf: [automount] options = "metadata". На SMB/NFS права определяет сервер: смотрите cifs-опции file_mode, dir_mode.
#Атрибуты и SELinux
Проверьте lsattr файл: флаг i (immutable) или a блокирует изменения даже root. Снимите: sudo chattr -i файл. Для SELinux посмотрите ls -Z и журнал аудита. В контейнерах Docker права на примонтированные тома определяются UID хоста: используйте --user "$(id -u):$(id -g)" или chown на хосте. Для ключей SSH нужны chmod 600, а для папки .ssh — 700.
ls -l filedf -T filelsattr filesudo chown "$USER":"$USER" file