Dlaczego Chown zgłasza komunikat „Operacja niedozwolona” w systemie OS X?

64

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

sudo chown myusername:wheel ./entries

ale Unix / Mac zwraca komunikat „Operacja niedozwolona”. Kiedy mam ls -lashplik winowajcy, wygląda on następująco:

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

Próbowałem sudoi sudo su; nic nie działa. Jakieś pomysły, co słychać?

Próbuję chmodskopiować pliki z mojego starego systemu Ubuntu. Większość plików została z powodzeniem chmodedytowana rekurencyjnie; tylko ten utknął i nie rozumiem dlaczego.

josef.van.niekerk
źródło
1
Próbowałeś sudo chgrp wheel ./entries?
squircle
1
Wykonaj kontrolę systemu plików. Otwórz Narzędzie dyskowe, wybierz wolumin i kliknij opcję Zweryfikuj dysk , a następnie w razie potrzeby napraw dysk .
Daniel Beck
Upewnij się, że plik nie jest zablokowany w Finderze (brak znaczka blokady na ikonie). Aby to zmienić, otwórz okno dialogowe Uzyskaj informacje i odznacz Zablokowane .
Daniel Beck
Jeśli jest to wolumin „zewnętrzny” (tj. Nie wolumin systemowy), może być konieczne usunięcie opcji „Ignoruj ​​własność tego woluminu”. (Zobacz sam dół woluminu w dolnej części okna Uzyskaj informacje).
mivk 16.12.12

Odpowiedzi:

84

Tak, Mac ma wiele ulepszeń do Uniksa w obszarze plików. Ignorując cały problem związany z rozwidlaniem zasobów , który nie jest już często używany, istnieją:

  • te standardowe uprawnienia Unix ugo rwx i tak dalej. Obowiązują normalne narzędzia uniksowe.
  • Listy ACL , widoczne ls -lei zmieniane za pomocą chmod [ -a | +a | =a ].
  • flagi plików widoczne za pomocą ls -lO(Kapitał och, nie zero) i zmieniane za pomocą chflags.
  • rozszerzone atrybuty , widoczne za pomocą ls -l@(tylko klucze atrybutów) oraz widoczne i zmieniane za pomocą xattr. (Skorzystaj xattr -hz pomocy, jeśli man xattrnic ci nie da.)
  • Począwszy od systemu OS X 10.11 „El Capitan”, ochrona integralności systemu (SIP) dodatkowo chroni niektóre pliki przed zmianami ze zwykłych procesów, nawet podczas używania sudojako root. Pliki chronione przez SIP zostaną wyświetlone ls -lOjako oznaczone restrictedflagą i / lub wymienione ls -l@jako posiadające com.apple.rootlessatrybut.

Możesz odmówić operacji na pliku z powodu uprawnień uniksowych, list ACL, flag plików 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 Protection System Integrity (SIP) jest włączona, sudo chflags norestricteda sudo xattr -d com.apple.rootlesstakże zwrócić "Operation not permitted" błąd. Aby usunąć flagę i / lub atrybutów trzeba uruchomić w MacOS Odzysk i albo uruchamiać polecenia z terminala (może być pierwszym użyciem Disk Utility, aby odblokować i zamontować dysk startowy, po czym pamiętać pliki będą pod /Volumes/Macintosh HDlub niezależnie od bagażnika dysk ma nazwę) lub całkowicie wyłącz SIP, a następnie uruchom ponownie komputer, a następnie polecenia powinny działać. Należy jednak pamiętać, że przyszłe aktualizacje systemu operacyjnego prawdopodobnie przywrócą restrictedflagę i com.apple.rootlessprzypiszą wszystkie pliki, z których je usunąłeś.

Wyłączenie SIP nie jest zalecane, ponieważ usuwa dużą ochronę przed złośliwym oprogramowaniem i przypadkowymi uszkodzeniami, a ponadto nie jest konieczne, gdy można po prostu usunąć ochronę dla poszczególnych plików. Jeśli wyłączysz SIP, włącz go ponownie po zakończeniu wprowadzania zmian.

Zauważ, że jeśli ls -lOpokazuje, że schgflaga jest ustawiona, musisz przejść do trybu jednego użytkownika, aby ją rozbroić. Nie zamierzam się tutaj zajmować, ponieważ istnieją większe pytania dotyczące tego, dlaczego plik ma ustawioną flagę i dlaczego próbujesz z tym popsuć i jakie będą tego konsekwencje.

Old Pro
źródło
7
Dodając do tego, inne flagi mogą uniemożliwić zmianę plików. W swoim skrypcie umieściłemsudo chflags -R nouchg,noschg,nouappnd,nosappnd,noopaque,dump .
djjeck
1
Uwaga: jeśli coś ma flagę „niezmienną”, pole wyboru Zablokowane w Get Info zostanie zaznaczone i wyszarzone. „sudo chflags nouchg” naprawia to.
Foo Bar
1
Nie mogłem zrobić -Ni ugo+rwoba na raz (mam Failed to clear ACL on file ugo+rw: No such file or directory), ale ich prowadzenie indywidualnie pracował w porządku. Jeśli pożądana jest rekurencja, -Rmusi to być pierwszy argument.
owenfi
3
Należy pamiętać, że ochrona integralności systemu (bez rootowania) może również powodować to na El Capitan i nowszych. Aby rozwiązać ten problem, uruchom system w trybie odzyskiwania ( Cmd-R), otwórz Terminal i uruchom csrutil disable, a następnie uruchom ponownie (aby ponownie włączyć, użyj csrutil enable).
Erwin Wessels,
Dziękuję ... Nie miałem pojęcia o flagach plików. Teraz rozumiem, dlaczego to powiedziałoverride rwxrwxrwx huttarl/staff uchg for green.html?
LarsH
18

Miałem ten sam problem. Okazuje się, że złośliwe pliki zostały oznaczone przez system operacyjny jako „Zablokowane”. Znalazłem to rozwiązanie, które 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 rmpolecenie zmieniło się w Tygrysie, więc jeśli użyjesz go rm -Rfz 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ą występować flagi metadanych pliku, takie jak uchgi uappnd, które uniemożliwiają modyfikację uprawnień lub własności pliku. chflagsmoże usunąć flagi. Niektóre atrybuty pliku / metadane oraz sposób ich obsługi przez różne narzędzia do kopiowania znajdują się tutaj .

Bendalton
źródło
sudo rm -Rf foldername/działa doskonale na OSX Mountain Lion
Aryo
5
@Aryo: rmusuwa katalog. Czy istnieje sposób, aby po prostu odblokować wszystko bez usuwania? Kiedy wyglądam uchgnie jest ustawiony i mogę go włączać i wyłączać zgodnie z oczekiwaniami (z chflags [no]uchg), ale nie ma to wpływu na ikonę kłódki w Finderze ani na moją zdolność chown.
orome
12

Miałem ten sam problem z Crashplan.app.

Wszystkie wymienione tutaj rozwiązania nie pomogłyby mi, ale to rozwiązało problem: http://forums.macrumors.com/showthread.php?t=1546163

Musisz zmienić system i niezmienne flagi użytkownika:

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

ls -lhdO MyFile

Odpowiedź może wyglądać następująco:

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

schg , uchg to te niezmienne flagi. Jeden dla systemu i jeden 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żesz go usunąć!

chropowaty
źródło
Wspaniale, musiałem jednak chflagsużyć sudo, ale to ma sens
Felipe,
Miałem ten sam problem z CrashPlan.app (miałem drwxrwxr-x@ 3 _BGMXPCHelper admin schg 96B 9 Jan 2018 CrashPlan.app), a to było jedyne rozwiązanie, które pozwoliło mi go usunąć, dzięki!
webeno
12

W OS X 10.11 (El Capitan) może to być również spowodowane nową funkcją rootowania . Zobacz tę odpowiedź, aby uzyskać wyjaśnienie.

Krótko mówiąc, w przypadku niektórych ważnych katalogów nie ma możliwości ich modyfikacji - czy używasz sudo, chownczy chmod. Wpływa to na /usrkatalog (chociaż możesz modyfikować /usr/local).

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

Nate
źródło
1
Łał. To doprowadzało mnie do szału. Jakoś musiałem skopiować coś do / usr / lib, którego inaczej nie znaleziono w / usr / local / lib (nie pytaj mnie dlaczego). I to załatwiło sprawę.
qwerty_so,
4
W rzeczywistości nie musisz całkowicie wyłączać Rootless, możesz po prostu uruchomić się w trybie odzyskiwania (co i tak musiałbyś zrobić, aby wyłączyć Rootless) i wprowadzić odpowiednie zmiany w Terminalu.
Old Pro
6

Po wielu zmaganiach, oto co musiałem zrobić, aby rozwiązać problem:

  • Przeniesiono plik do ~/Desktop
  • sudo chown myusername:staff ./entries
  • Przeniesienie pliku z powrotem do pierwotnej lokalizacji nie działało (Operacja niedozwolona, ​​ponownie), więc ...
  • sudo rm ./entries
  • sudo mv ~/Desktop/entries ./entries
josef.van.niekerk
źródło
4

Miałem ten sam problem dotyczący mojego folderu domowego. Na koniec użyłem wyszukiwarki w ten sposób:

Idź -> Komputer -> Twój dysk -> Użytkownicy -> Twoja nazwa użytkownika -> kliknij prawym przyciskiem myszy -> Uzyskaj informacje

Stwierdziłem, że był zamknięty, prawdopodobnie robiłem to w przeszłości i zapomniałem. Odznaczone zablokowane pole wyboru, problem naprawiony.

Mogę polecić użycie „Uzyskaj informacje” z wyszukiwarki w celu rozwiązania tego rodzaju problemów.

(OS X 10.8.3)

Danza
źródło
Pomogło mi to odblokować .isoz glitchy Virtual Box.
Nakilon
1

Upewnij się, że plik i jego folder nadrzędny są odblokowane

Napotkałem podobny problem, gdy próbowałem usunąć plik podpisu e-mail Mac. Nie mogłem go usunąć, dopóki nie odblokowałem pliku, a także jego folderu nadrzędnego.

camslice
źródło