xattrs: problem z uprawnieniami przy atrybutach rozszerzonych
25 10.2019

Technologie, Wiedza i Proces

xattrs: problem z uprawnieniami przy atrybutach rozszerzonych

W macOS blokady plików to nie tylko chmod. Są ACL, flagi, xattr i SIP. Poniżej krótki przegląd i kroki odblokowania.

Jeśli Terminal zwraca „Operation not permitted”, zwykle blokuje Cię jedna z warstw ochrony. W macOS są cztery główne mechanizmy:

  • Standardowe uprawnienia Uniksa – klasyczne ugo rwx. Działają tu typowe narzędzia uniksowe.
  • ACL (Access Control Lists) – widać je poleceniem ls -le i zmieniasz przez chmod [ -a | +a | =a ].
  • Flagi plików – sprawdzisz ls -lO (duże „O”, nie zero), modyfikujesz chflags.
  • Atrybuty rozszerzone – podgląd przez ls -l@ i xattr (użyj xattr -h, gdy man xattr nic nie zwraca).
  • Od macOS 10.11 „El Capitan” System Integrity Protection (SIP) dodatkowo chroni część plików, nawet przy sudo. Pliki chronione przez SIP poznasz po fladze restrictedls -lO i atrybucie com.apple.rootlessls -l@.

Gdy plik jest zablokowany, przejdź po kolei:

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 System Integrity Protection (SIP) jest włączony, polecenia sudo chflags norestricted oraz sudo xattr -d com.apple.rootless zwrócą błąd „Operation not permitted”. Aby usunąć flagę lub atrybut, uruchom komputer w trybie macOS Recovery i wykonaj jedno z poniższych działań:

  • Uruchom Terminal (być może trzeba wcześniej użyć Disk Utility, aby odblokować i zamontować dysk startowy – twoje pliki będą wtedy w /Volumes/Macintosh HD lub pod inną nazwą dysku).
  • Lub całkowicie wyłącz SIP, a następnie zrestartuj system. Wtedy powyższe polecenia zadziałają.

Pamiętaj, że aktualizacje macOS mogą przywrócić flagę restricted i atrybut com.apple.rootless w plikach, z których je usunąłeś.

Wyłączenie SIP nie jest zalecane – usuwa istotne zabezpieczenia systemu. Najczęściej wystarczy zdjąć ochronę tylko z jednego pliku. Jeśli jednak wyłączysz SIP, włącz go ponownie po zakończeniu zmian.

Uwaga: jeśli ls -lO pokazuje ustawioną flagę schg, musisz uruchomić system w trybie single-user, aby ją usunąć. Autor nie rozwija tego tematu, ponieważ pojawia się pytanie, dlaczego plik ma tę flagę i jakie mogą być konsekwencje jej usunięcia.

Więcej informacji