xattrs problem z uprawnieniami przy atrybutach rozszerzonych
25 10.2019

Technologie, Wiedza i Proces

xattrs problem z uprawnieniami przy atrybutach rozszerzonych

Tak, macOS wprowadza wiele ulepszeń do systemu Unix w zakresie obsługi plików. Pomijając całkowicie temat resource fork, który obecnie jest rzadko używany, mamy następujące możliwości:

  • Standardowe uprawnienia Uniksa – czyli klasyczne ugo rwx i podobne. Działają tu typowe narzędzia uniksowe.
  • ACL (Access Control Lists) – można je zobaczyć poleceniem ls -le oraz zmieniać przy użyciu chmod [ -a | +a | =a ].
  • Flagi plików – widoczne dzięki ls -lO (duże „O”, nie zero) i modyfikowalne przez chflags.
  • Atrybuty rozszerzone – widoczne przez ls -l@ (pokazuje tylko klucze atrybutów) oraz przeglądane i modyfikowane przy użyciu xattr. (Użyj xattr -h, jeśli man xattr nic nie zwraca.)
  • Począwszy od macOS 10.11 „El Capitan”, System Integrity Protection (SIP) dodatkowo chroni niektóre pliki przed zmianami przez zwykłe procesy – nawet przy użyciu sudo. Pliki chronione przez SIP można rozpoznać, ponieważ ls -lO pokaże flagę restricted, a ls -l@ atrybut com.apple.rootless.

Możesz nie mieć możliwości wykonania operacji na pliku z powodu uprawnień Uniksa, list ACL, flag pliku lub SIP. Aby całkowicie 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 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ą.

Należy jednak pamiętać, że przyszłe aktualizacje macOS mogą przywrócić flagę restricted oraz atrybut com.apple.rootless w plikach, z których je usunięto.

Wyłączenie SIP nie jest zalecane, ponieważ usuwa ono wiele zabezpieczeń chroniących przed złośliwym oprogramowaniem i przypadkowym uszkodzeniem systemu. Nie jest to też konieczne, ponieważ można zdjąć ochronę dla pojedynczego 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