xattr(7) Miscellaneous Information Manual xattr(7)

xattr - atrybuty rozszerzone

Atrybuty rozszerzone są parami nazwa:wartość związanymi na stałe z plikami i katalogami, podobnie jak zmienne środowiskowe są powiązane z procesami. Atrybut może być zdefiniowany lub niezdefiniowany. Jeśli jest zdefiniowany, jego wartość może być pusta lub niepusta.

Atrybuty rozszerzone są rozszerzeniem zwykłych atrybutów, które są związane z wszystkimi i-węzłami w systemie (tj. danymi stat(2)). Są często używane do zapewnienia dodatkowych funkcji w systemie plików — przy użyciu atrybutów rozszerzonych mogą być zaimplementowane na przykład dodatkowe funkcje związanych z bezpieczeństwem, takie jak listy kontroli dostępu (Access Control Lists - ACLs).

Użytkownicy z prawem przeszukiwania do pliku lub katalogu mogą użyć listxattr(2) do pobrania listy nazw atrybutów zdefiniowanych dla danego pliku lub katalogu.

Dostęp do atrybutów rozszerzonych następuje jako do obiektów niepodzielnych. Odczytanie (getxattr(2)) pobiera całą wartość atrybutu i przechowuje go w buforze. Zapis (setxattr(2)) zastępuje poprzednią wartość nową wartością.

Przestrzeń zajęta przez atrybuty rozszerzone może liczyć się do przydziałów dyskowych właściciela pliku i grupy pliku.

Nazwy atrybutów są łańcuchami ograniczonymi znakiem null. Nazwę atrybutu określa się zawsze jako nazwę w pełni kwalifikowalną w postaci przestrzeń-nazw.atrybut, np. user.mime_type, trusted.md5sum, system.posix_acl_access lub security.selinux.

Mechanizm przestrzeni nazw służy do definiowania różnych klas atrybutów rozszerzonych. Klasy te istnieją z wielu powodów m.in uprawnienia i przywileje wymagane do zmiany atrybutów rozszerzonych mogą różnić się między klasami.

Obecnie zdefiniowano (opisane poniżej) następujące klasy atrybutów rozszerzonych: bezpieczeństwasecurity, systemowesystem, zaufaniatrusted i użytkownikauser. W przyszłości mogą być dodane kolejne klasy.

Przestrzeń nazw atrybutów rozszerzonych bezpieczeństwa jest wykorzystywana przez moduły bezpieczeństwa jądra, takie jak Security Enhanced Linux oraz do zaimplementowania przywilejów pliku (zob. capabilities(7)). Uprawnienia do odczytu i zapisu atrybutów bezpieczeństwa zależą od zasad zaimplementowanych dla każdego z atrybutów przez moduł bezpieczeństwa. Jeśli moduł bezpieczeństwa nie jest załadowany, to wszystkie procesy mają prawo odczytu atrybutów rozszerzonych bezpieczeństwa, a prawo do zapisu jest ograniczone do procesów z przywilejem CAP_SYS_ADMIN.

Systemowe atrybuty rozszerzone są używane przez jądro do przechowywania obiektów systemowych takich jak listy kontroli dostępu (ACL). Uprawnienia do odczytu i zapisu atrybutów systemowych zależą od zasad zaimplementowanych dla każdego z atrybutów przez systemy plików w jądrze.

Atrybuty rozszerzone zaufania są widoczne i dostępne tylko dla procesów z przywilejem CAP_SYS_ADMIN. Atrybuty w tej klasie służą do implementowania mechanizmów w przestrzeni użytkownika (tj. poza jądrem), które przechowują informacje w atrybutach rozszerzonych, do których zwykłe procesy nie powinny mieć dostępu.

Atrybuty rozszerzone użytkownika mogą być przypisane plikom i katalogom w celu przechowywania dowolnych informacji, takich jak: typ mime, zestaw znaków lub kodowanie pliku. Uprawnienia do dostępu do atrybutów użytkownika są zdefiniowane w bitach uprawnień pliku: do pobrania atrybutu potrzebne jest uprawnienie do odczytu, a do jego zmiany wymagane jest uprawnienie do zapisu.

Bity uprawnień zwykłych plików i katalogów są interpretowane w odmienny sposób od bitów uprawnień plików specjalnych i dowiązań symbolicznych. W przypadku zwykłych plików i katalogów, bity uprawnień pliku definiują dostęp do zawartości pliku, natomiast w przypadku plików specjalnych urządzeń definiują dostęp do urządzenia opisanego plikiem specjalnym. Uprawnienia pliku dowiązań symbolicznych nie są używane przy sprawdzaniu dostępu. Różnice te, w przypadku katalogów i plików specjalnych dostępnych do zapisu grupom lub wszystkim, mogłyby pozwolić użytkownikom na używanie zasobów systemu plików w sposób niekontrolowany przez przydziały dyskowe.

Z tego powodu, atrybuty rozszerzone użytkownika są dozwolone tylko w przypadku zwykłych plików i katalogów, a dostęp do atrybutów rozszerzonych użytkownika jest ograniczony do właściciela oraz, w przypadku katalogów z ustawionym bitem lepkości, użytkownika z odpowiednim przywilejem (opis bitu lepkości znajduje się w podręczniku chmod(1)).

Jądro oraz system plików może nałożyć limit maksymalnej liczby oraz rozmiaru atrybutów rozszerzonych jakie można przypisać do pliku. Limitami wynikającymi z linuksowego wirtualnego systemu plików (VFS) są: w przypadku nazw atrybutów – 255 bajtów, w przypadku wartości – 64 kB. Rozmiar zwracanej listy nazw atrybutów jest natomiast ograniczony do 64 kB (zob. USTERKI w listxattr(2)).

Część systemów plików, takich jak Reiserfs (i historycznie ext2 oraz ext3) wymaga zamontowania systemu plików z opcją montowania user_xattr, aby móc korzystać z atrybutów rozszerzonych przez użytkownika.

W aktualnych implementacjach systemów plików ext2, ext3 i ext4 całkowita przestrzeń używana przez nazwy i wartości wszystkich atrybutów rozszerzonych pliku musi zmieścić się w pojedynczym bloku systemu plików (jest to wartość 1024, 2048 lub 4096 bajtów, w zależności od rozmiaru bloku podanego w momencie tworzenia systemu plików).

W implementacjach systemów plików Btrfs, XFS i Reiserfs nie istnieje praktyczny limit liczby atrybutów rozszerzonych przypisanych do pliku, a algorytmy używane do przechowywania informacji o atrybutach rozszerzonych na dysku są skalowalne.

W implementacjach systemów plików JFS, XFS i Reiserfs, ograniczenie bajtów użytych w wartości atrybutów rozszerzonych, wynika wyłącznie z limitu narzuconego przez VFS.

W implementacji systemu plików Btrfs, całkowity rozmiar w bajtach używany przez nazwę, wartość i bajty narzutu implementacji jest ograniczony do wartości rozmiaru węzła nodesize systemu plików (domyślnie 16 kB).

Atrybuty rozszerzone nie są określone normą POSIX.1, lecz niektóre inne systemy (np. systemy BSD i Solaris) udostępniają podobną funkcjonalność.

Ze względu na to, że systemy plików w których przechowywane są atrybuty systemowe, mogą być również używane na architekturach z różną kolejnością bajtów oraz z różnym rozmiarem słowa maszynowego, należy zwrócić uwagę, aby przechowywać wartości atrybutów w formacie niezależnym od architektury.

Niniejszy podręcznik nosił wcześniej nazwę attr(5).

attr(1), getfattr(1), setfattr(1), getxattr(2), ioctl_iflags(2), listxattr(2), removexattr(2), setxattr(2), acl(5), capabilities(7), selinux(8)

Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.

31 października 2023 r. Linux man-pages 6.06