2011-05-04 20:42:49 +0000 2011-05-04 20:42:49 +0000
69
69

Dlaczego chown zgłasza "Operacja niedozwolona" na OS X?

Próbuję wykonać następujące czynności na moim Macu (10.6.7):

sudo chown myusername:wheel ./entries

ale Unix/Mac zwraca “Operacja niedozwolona”. Kiedy ls -lash plik winowajcy, wygląda to następująco:

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

Próbowałem sudo i sudo su; nic nie działa. Jakieś pomysły co jest grane?

Próbuję chmod plików, które skopiowałem z mojego starego Ubuntu. Większość plików pomyślnie chmod‘ed rekursywnie; tylko ten jeden utknął i nie rozumiem dlaczego.

Odpowiedzi (7)

91
91
91
2012-12-12 21:58:23 +0000

Tak, Mac ma wiele ulepszeń w stosunku do Uniksa w obszarze plików. Ignorując całą rzecz resource fork , która nie jest już zbytnio używana, są:

  • standardowe uprawnienia uniksowe ugo rwx i tak dalej. Stosuje się zwykłe narzędzia uniksowe.
  • ACL‘s, widoczne z ls -le i możliwe do zmiany z chmod [-a | +a | =a].
  • flagi plików, widoczne za pomocą ls -lO (duże o, nie zero) i możliwe do zmiany za pomocą chflags.
  • rozszerzone atrybuty , widoczne z ls -l@ (tylko klucze atrybutów) i możliwe do oglądania i zmiany z xattr. (Użyj xattr -h, aby uzyskać pomoc, jeśli man xattr nic ci nie daje).
  • Począwszy od OS X 10.11 “El Capitan”, * System Integrity Protection ** (SIP) dodatkowo chroni niektóre pliki przed zmianami wprowadzanymi przez zwykłe procesy, nawet jeśli używasz sudo do uruchamiania jako root. Pliki chronione przez SIP będą wymienione przez ls -lO jako posiadające flagę restricted i/lub będą wymienione przez ls -l@ jako posiadające atrybut com.apple.rootless.

Możesz spotkać się z odmową wykonania operacji na pliku z powodu uprawnień uniksowych, ACL, flag pliku lub SIP. Aby w pełni odblokować plik:

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

Jeśli włączona jest ochrona integralności systemu (SIP), sudo chflags norestricted i sudo xattr -d com.apple.rootless również zwrócą błąd “Operacja niedozwolona”. Aby wyczyścić flagę i/lub atrybut, musisz uruchomić komputer w trybie macOS Recovery i albo uruchomić polecenia z Terminala (być może będziesz musiał najpierw użyć Disk Utility, aby odblokować i zamontować dysk startowy, a następnie pamiętać, że twoje pliki będą pod /Volumes/Macintosh HD lub jakkolwiek nazwany jest twój dysk startowy) lub disable SIP altogether i zrestartować komputer, a polecenia powinny zadziałać. Pamiętaj jednak, że przyszłe aktualizacje systemu operacyjnego prawdopodobnie przywrócą flagę restricted i atrybut com.apple.rootless do wszystkich plików, z których je usunąłeś.

_ Wyłączenie SIP nie jest zalecane _ ponieważ usuwa wiele zabezpieczeń przed złośliwym oprogramowaniem i przypadkowymi uszkodzeniami, a ponadto nie jest konieczne, gdy można po prostu usunąć ochronę na podstawie pojedynczego pliku. Jeśli wyłączysz SIP, włącz go ponownie po zakończeniu wprowadzania zmian.

Zauważ, że jeśli ls -lO pokazuje, że flaga schg jest ustawiona, musisz przejść do trybu pojedynczego użytkownika, aby ją wyłączyć. Nie będę się tutaj w to zagłębiał, ponieważ są większe pytania o to, dlaczego plik ma ustawioną tę flagę i dlaczego próbujesz z nią zadzierać i jakie będą tego konsekwencje.

18
18
18
2011-06-08 17:47:37 +0000

Miałem ten sam problem. Okazuje się, że pliki obraźliwe zostały oznaczone jako “Zablokowane” przez system operacyjny. Znalazłem to rozwiązanie i rozwiązało problemy w kilka sekund: http://explanatorygap.net/2005/07/10/unlocking-files-recursively-from-the-command-line/

Wygląda na to, że polecenie rm zmieniło się w Tigerze tak, że jeśli użyjesz rm -Rf z podwyższonymi uprawnieniami, automatycznie odblokuje pliki.

W OS X przed Tiger: find /Volumes/Transit -flags +uchg -print0 | xargs -0 chflags nouchg

W OS X po Tiger: sudo rm -Rf foldername/

Ponadto, nawet po OS X 10.4, mogą istnieć flagi metadanych plików, takie jak uchg i uappnd, które uniemożliwiają jakąkolwiek modyfikację uprawnień lub własności plików. Polecenie chflags może usunąć te flagi. Niektóre atrybuty/metadane plików i sposób ich obsługi przez różne narzędzia do kopiowania są tutaj .

12
12
12
2015-09-30 23:09:40 +0000

W OS X 10.11 (El Capitan), może to być również spowodowane przez nową funkcję Rootless. Zobacz ta odpowiedź dla wyjaśnienia.

W skrócie, dla niektórych ważnych katalogów, nie ma możliwości ich modyfikacji - niezależnie od tego, czy używasz sudo, chown czy chmod. Dotyczy to katalogu /usr, (chociaż możesz modyfikować /usr/local).

Aby zmodyfikować katalog zabezpieczony Rootless, musisz wyłączyć Rootless . I, oczywiście, włączyć go ponownie po dokonaniu modyfikacji, ponieważ jest to ważne ulepszenie bezpieczeństwa.

12
12
12
2014-08-21 17:30:15 +0000

Miałem ten sam problem z aplikacją Crashplan.app.

Wszystkie rozwiązania wymienione tutaj nie pomogłyby mi, ale ten zrobił sztuczkę http://forums.macrumors.com/showthread.php?t=1546163

Musisz zmienić systemowe i użytkownika niezmienne flagi:

Zrób to, aby zobaczyć, które flagi są aktywne na twoim pliku/folderze:

ls -lhdO MyFile

Odpowiedź może wyglądać tak:

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

schg , uchg to te niezmienne flagi. Jedna dla systemu, druga dla użytkownika. Aby je usunąć, wykonaj następujące czynności:

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

Wtedy, przynajmniej dla mnie, plik jest odblokowany i można go usunąć!

5
5
5
2011-05-04 21:02:23 +0000

Po wielu zmaganiach, oto co musiałem zrobić, aby problem został naprawiony:

  • Przeniosłem plik do ~/Desktop
  • sudo chown myusername:staff ./entries
  • Przeniesienie pliku z powrotem do jego oryginalnej lokalizacji nie zadziałało (Operacja niedozwolona, ponownie), więc…
  • sudo rm ./entries
  • sudo mv ~/Desktop/entries ./entries
4
4
4
2013-09-19 22:49:53 +0000

Miałem ten sam problem, dotyczący mojego folderu domowego. W końcu po prostu użyłem findera w ten sposób:

Idź -> Komputer -> twój dysk -> Użytkownicy -> twoja nazwa użytkownika -> kliknij prawym przyciskiem myszy -> Get Info

Znalazłem, że był zablokowany, prawdopodobnie zrobiłem to w przeszłości i zapomniałem. Odznaczyłem zablokowane pole wyboru, problem naprawiony.

Mogę polecić użycie ‘Get Info’ z findera, aby poradzić sobie z tego typu problemami.

(OS X 10.8.3)

1
1
1
2015-03-23 15:28:32 +0000

Upewnij się, że zarówno plik, jak i jego folder nadrzędny są odblokowane

Napotkałem podobny problem, próbując usunąć plik z podpisem e-maila w programie Mac Mail. Nie mogłem go usunąć, dopóki nie odblokowałem pliku, jak również jego folderu nadrzędnego.