Чому chown повідомляє "Операція не дозволена" в OS X?


64

Я намагаюся зробити наступне на своєму Mac (10.6.7):

sudo chown myusername:wheel ./entries

але Unix / Mac повертає "Операція не дозволена". Коли я ls -lashвинуватець, він виглядає так:

8 -rwxrwxrwx   1 myusername  staff   394B Apr 26 23:26 entries

Я спробував sudoі sudo su; нічого не працює. Будь-які ідеї, що відбувається?

Я намагаюся chmodфайли, скопійовані зі старої скриньки Ubuntu. Більшість файлів успішно chmodредагуються; просто цей застряг, і я не розумію, чому.


1
Ви пробували sudo chgrp wheel ./entries?
білочка

1
Зробіть перевірку файлової системи. Відкрийте утиліту Disk Utility, виберіть гучність і натисніть Підтвердити диск , після чого, якщо потрібно, відновіть диск .
Даніель Бек

Переконайтесь, що файл не заблокований у Finder (на значку немає значка блокування). Щоб змінити його, відкрийте діалогове вікно Отримати інформацію та зніміть прапорець Заблоковано .
Деніел Бек

Якщо це "зовнішній" том (тобто не системний об'єм), можливо, доведеться видалити параметр "Ігнорувати право власності на цей том". (Дивіться внизу вікна Отримати інформацію про сам том).
mivk

Відповіді:


84

Так, Mac має багато вдосконалень для Unix в області файлів. Ігноруючи всю річку з вилкою ресурсу , яка більше не використовується, є:

  • на стандартні дозволу Unix ugo rwx і так далі. Застосовуються звичайні інструменти Unix.
  • ACL , видимий з ls -leі мінливий з chmod [ -a | +a | =a ].
  • прапори файлів, які можна переглядати за допомогою " ls -lOЗаголовок о, не нуль" та змінні за допомогою chflags.
  • розширені атрибути , доступні для перегляду ls -l@(лише ключі атрибутів), а також видимі та змінні xattr. (Використовуйте xattr -hдля допомоги, якщо man xattrнічого не дає.)
  • Починаючи з OS X 10.11 "El Capitan", захист цілісності системи (SIP) додатково захищає деякі файли від змін від звичайних процесів, навіть коли використовується sudoдля запуску як root. Файли, захищені SIP, будуть перераховані ls -lOяк такі, що мають restrictedпрапор та / або будуть вказані ls -l@як com.apple.rootlessатрибути.

Ви можете відмовити в операціях над файлом через дозволи Unix, ACL, прапори файлів або SIP. Щоб повністю розблокувати файл:

sudo chmod -N file        # Remove ACLs from file
sudo chmod ugo+rw file    # Give everyone read-write permission to file
sudo chflags nouchg file  # Clear the user immutable flag from file
sudo chflags norestricted file  # Remove the SIP protection from file
sudo xattr -d com.apple.rootless file # Remove SIP protection from file

Якщо ввімкнено захист цілісності системи (SIP), sudo chflags norestrictedа sudo xattr -d com.apple.rootlessтакож поверне помилку "Операція не дозволена". Щоб очистити прапор та / або атрибут, потрібно завантажити в macOS Recovery і виконати команди з терміналу (можливо, вам спочатку доведеться скористатися Disk Utility для розблокування та монтажу завантажувального диска, а потім пам’ятайте, що ваші файли будуть знаходитися під /Volumes/Macintosh HDбудь-яким іншим завантаженням. диск названо) або відключити SIP взагалі, а потім перезавантажте і команди повинні працювати. Однак майте на увазі, що майбутні оновлення ОС, ймовірно, відновлять restrictedпрапор та com.apple.rootlessатрибут усіх файлів, з яких ви його видалили.

Вимкнення SIP не рекомендується, оскільки це знімає багато захисту від зловмисного програмного забезпечення та випадкових пошкоджень, плюс це не потрібно, коли ви можете просто зняти захист на основі файлів. Якщо ви відключите SIP, ввімкніть його знову після завершення внесення змін.

Зауважте, що якщо ls -lOпоказано, що schgпрапор встановлений, вам доведеться перейти в режим однокористувача, щоб зняти його. Я не збираюся вступати в це тут, оскільки виникають більші запитання щодо того, чому у файлі встановлений цей прапор і чому ви намагаєтеся з ним возитися і які наслідки будуть.


7
Додавши до цього, інші прапори можуть перешкодити вам змінювати файли. У своєму сценарії я поставивsudo chflags -R nouchg,noschg,nouappnd,nosappnd,noopaque,dump .
djjeck

1
Примітка: якщо щось має "незмінний" прапор, прапорець "Заблокований" у розділі Отримати інформацію буде встановлено та позначено сірим кольором. "sudo chflags nouchg" це виправляє.
Foo Bar

1
Я не міг зробити обох -Nі ugo+rwвідразу (я отримав Failed to clear ACL on file ugo+rw: No such file or directory), але запуск їх окремо працював нормально. Якщо потрібна рекурсивна, -Rпершим аргументом повинен бути аргумент.
Owenfi

3
Зауважте, що захист від цілісності системи (без коренів) може також спричинити це на El Capitan і пізніших версіях. Щоб вирішити це, завантажтесь у режим відновлення ( Cmd-R), відкрийте термінал і запустіть csrutil disable, а потім перезапустіть (для повторного використання, використання csrutil enable).
Ервін Весселс

Дякую ... Я не мав уявлення про файлові прапори. Тепер я розумію, чому це було сказаноoverride rwxrwxrwx huttarl/staff uchg for green.html?
LarsH

18

У мене була така ж проблема. Виявляється, файли, які порушили правопорушення, були позначені ОС «заблокованими». Я знайшов це рішення, і це вирішило проблеми за лічені секунди:

http://explanatorygap.net/2005/07/10/unlocking-files-recursively-from-the-command-line/

Здається, що rmкоманда в Tiger змінилася так, що якщо ви користуєтеся rm -Rfпідвищеними привілеями, вона автоматично розблокує файли.

В ОС X до Тайгра: find /Volumes/Transit -flags +uchg -print0 | xargs -0 chflags nouchg

В OS X після Тигра: sudo rm -Rf foldername/

Крім того, навіть після OS X 10.4, можуть бути прапорці метаданих файлів, такі як uchgі uappnd, які запобігають будь-якій модифікації дозволів на файли або права власності. chflagsможе зняти прапори. Деякі атрибути / метадані файлів та те, як вони обробляються різними інструментами копіювання, є тут .


sudo rm -Rf foldername/прекрасно працює над OSX Mountain Lion
Арьо

5
@Aryo: rmвидаляє каталог. Чи є спосіб просто розблокувати все, не видаляючи його? Коли я дивлюся uchg, не встановлено, і я можу ввімкнути та вимкнути його знову, як очікувалося (з chflags [no]uchg), але це не вплине на піктограму блокування у Finder або на мою здатність chown.
orome

12

У мене була така ж проблема з Crashplan.app.

Усі перераховані тут рішення не допомогли б мені, але це зробило трюк: http://forums.macrumors.com/showthread.php?t=1546163

Ви повинні змінити системні та користувальницькі непорушні прапори:

Зробіть це, щоб побачити, які прапори активні у вашому файлі / папці:

ls -lhdO MyFile

Відповідь може виглядати приблизно так:

drwxrwxr-x 3 root admin schg,uchg 102B Apr 8 2013 MyFile

schg , uchg - це ті непорушні прапори. Один для системи та один для користувача. Щоб видалити їх, виконайте наступне:

chflags noschg CrashPlan.app # this removes system immutable flag
chflags nouchg CrashPlan.app # this removes the user immutable flags

Тоді, принаймні, для мене файл розблокується, і його можна видалити!


Дивовижно, довелося chflagsкористуватися, sudoхоча це має сенс
Феліпе

У мене була drwxrwxr-x@ 3 _BGMXPCHelper admin schg 96B 9 Jan 2018 CrashPlan.appта сама проблема з CrashPlan.app (у мене була ), і це було єдиним рішенням, яке дозволило мені її видалити, дякую!
webeno

12

В OS X 10.11 (El Capitan) це також може бути спричинено новою функцією Rootless . Дивіться цю відповідь для пояснення.

Коротше кажучи, для певних важливих каталогів неможливо змінити їх - чи ви користуєтесь sudo, chownчи chmod. Це впливає на /usrкаталог, (хоча ви можете змінювати /usr/local).

Щоб змінити захищений без корів каталог, потрібно відключити Rootless . І, звичайно, знову ввімкніть це після внесення змін, оскільки це важливе підвищення безпеки.


1
Ого. Це ганяло мене. Якось мені потрібно було скопіювати щось у / usr / lib, чого інакше не було знайдено у / usr / local / lib (не запитуйте мене чому). І це зробило трюк.
qwerty_so

4
Насправді вам не потрібно взагалі відключати Rootless, ви можете просто завантажитися в режим відновлення (що вам доведеться все одно зробити, щоб відключити Rootless) і внести потрібні зміни на Термінал.
Старий Про

6

Після багатьох проблем, ось що мені довелося зробити, щоб усунути проблему:

  • Переміщено файл у ~/Desktop
  • sudo chown myusername:staff ./entries
  • Переміщення файлу до його початкового місця не спрацювало (операція знову не дозволена), тому ...
  • sudo rm ./entries
  • sudo mv ~/Desktop/entries ./entries

4

У мене була та сама проблема, що стосується моєї домашньої папки. Зрештою, я просто використовував пошук, як це:

Перейдіть -> Комп'ютер -> ваш диск -> Користувачі -> Ваше ім'я користувача -> клацніть правою кнопкою миші -> Отримати інформацію

Я виявив, що він був заблокований, напевно, я це робив у минулому і забув. Зніміть прапорець біля блокованого прапорця, проблема виправлена

Я можу порекомендувати використовувати "Отримати інформацію" від пошуку, щоб вирішити подібні проблеми.

(ОС X 10.8.3)


Це допомогло мені розблокуватись .isoвід блискучої Virtual Box.
Накілон

1

Переконайтесь, що і файл, і його батьківська папка розблоковані

Я зіткнувся з подібною проблемою при спробі видалити файл підпису електронної пошти Mac Mail. Я не міг її видалити, поки не розблокував файл, а також його батьківську папку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.