.\" -*- coding: UTF-8 -*-
.\" Copyright (c) 2002 by Michael Kerrisk <mtk.manpages@gmail.com>
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.\" 6 Aug 2002 - Initial Creation
.\" Modified 2003-05-23, Michael Kerrisk, <mtk.manpages@gmail.com>
.\" Modified 2004-05-27, Michael Kerrisk, <mtk.manpages@gmail.com>
.\" 2004-12-08, mtk Added O_NOATIME for CAP_FOWNER
.\" 2005-08-16, mtk, Added CAP_AUDIT_CONTROL and CAP_AUDIT_WRITE
.\" 2008-07-15, Serge Hallyn <serue@us.bbm.com>
.\"     Document file capabilities, per-process capability
.\"     bounding set, changed semantics for CAP_SETPCAP,
.\"     and other changes in Linux 2.6.2[45].
.\"     Add CAP_MAC_ADMIN, CAP_MAC_OVERRIDE, CAP_SETFCAP.
.\" 2008-07-15, mtk
.\"     Add text describing circumstances in which CAP_SETPCAP
.\"     (theoretically) permits a thread to change the
.\"     capability sets of another thread.
.\"     Add section describing rules for programmatically
.\"     adjusting thread capability sets.
.\"     Describe rationale for capability bounding set.
.\"     Document "securebits" flags.
.\"     Add text noting that if we set the effective flag for one file
.\"     capability, then we must also set the effective flag for all
.\"     other capabilities where the permitted or inheritable bit is set.
.\" 2011-09-07, mtk/Serge hallyn: Add CAP_SYSLOG
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH Capabilities 7 "3 maja 2023 r." "Linux man\-pages 6.05.01" 
.SH NAZWA
capabilities \- przegląd przywilejów linuksowych
.SH OPIS
Ze względu na sprawdzanie uprawnień, tradycyjna uniksowa implementacja
rozróżnia dwie kategorie procesów: procesy \fIuprzywilejowane\fP (których
efektywny identyfikator użytkownika wynosi 0, zwane superużytkownikiem lub
rootem, rzadziej administratorem), oraz procesy \fInieuprzywilejowane\fP (z
niezerowym efektywnym ID użytkownika). Procesy uprzywilejowane mogą pominąć
wszelką kontrolę uprawnień jądra, natomiast procesy nieuprzywilejowane są
przedmiotem pełnej kontroli uprawnień w oparciu o referencje procesu
(zwykle: efektywne identyfikatory użytkownika oraz grupy, oraz uzupełniającą
listę grup).
.PP
.\"
Począwszy od Linuksa 2.2, Linux dzieli uprawnienia tradycyjnie właściwe
superużytkownikowi na odrębne jednostki, zwane \fIprzywilejami\fP
(ang. capabilities), które można niezależnie włączać i wyłączać. Przywileje
są atrybutem przypisanym wątkowi.
.SS "Lista przywilejów"
Poniżej przedstawiono listę ukazującą przywileje zaimplementowane w Linuksie
oraz operacje lub zachowania, na które pozwala każdy z przywilejów:
.TP 
\fBCAP_AUDIT_CONTROL\fP (od Linuksa 2.6.11)
Włączanie i wyłączanie audytu jądra; zmiana reguł filtrowania audytu;
pobieranie statusu audytu i reguł filtrowania.
.TP 
\fBCAP_AUDIT_READ\fP (od Linuksa 3.16)
.\" commit a29b694aa1739f9d76538e34ae25524f9c549d59
.\" commit 3a101b8de0d39403b2c7e5c23fd0b005668acf48
Zezwala na odczyt dziennika audytu za pomocą gniazda multicastowego netlink.
.TP 
\fBCAP_AUDIT_WRITE\fP (od Linuksa 2.6.11)
.\" FIXME Add FAN_ENABLE_AUDIT
Zapisywanie rekordu do dziennika audytu jądra
.TP 
\fBCAP_BLOCK_SUSPEND\fP (od Linuksa 3.5)
Włączanie funkcji zdolnych powstrzymać wstrzymanie systemu (\fBEPOLLWAKEUP\fP
\fBepoll\fP(7), \fI/proc/sys/wake_lock\fP).
.TP 
\fBCAP_BPF\fP (od Linuksa 5.8)
Wykorzystywanie uprzywilejowanych operacji BPF (filtrowania pakietów
Berkeley \- przyp. tłum.), zob. \fBbpf\fP(2) i \fBbpf\-helpers\fP(7).
.IP
Ten przywilej dodano w Linuksie 5.8, aby wydzielić funkcjonalność BPF z
przeładowanego przywileju \fBCAP_SYS_ADMIN\fP.
.TP 
\fBCAP_CHECKPOINT_RESTORE\fP (od Linuksa 5.9)
.\" commit 124ea650d3072b005457faed69909221c2905a1f
.PD 0
.RS
.IP \[bu] 3
Aktualizowanie \fI/proc/sys/kernel/ns_last_pid\fP (zob. \fBpid_namespaces\fP(7));
.IP \[bu]
.\" FIXME There is also some use case relating to
.\" prctl_set_mm_exe_file(); in the 5.9 sources, see
.\" prctl_set_mm_map().
wykorzystywanie funkcji \fIset_tid\fP \fBclone3\fP(2);
.IP \[bu]
odczytywanie zawartości dowiązań symbolicznych \fI/proc/\fPpid\fI/map_files\fP w
przypadku innych procesów.
.RE
.PD
.IP
Ten przywilej dodano w Linuksie 5.9, aby wydzielić funkcjonalność punktów
kontrolnych/przywracania z przeładowanego przywileju \fBCAP_SYS_ADMIN\fP.
.TP 
\fBCAP_CHOWN\fP
Czynienie dowolnych zmian w stosunku do identyfikatorów użytkownika i grupy
(zob. \fBchown\fP(2)).
.TP 
\fBCAP_DAC_OVERRIDE\fP
Pomijanie sprawdzeń uprawnień odczytu, zapisu i wykonania. (DAC jest skrótem
od ang. \[Bq]discretionary access control\[rq] \- tj. uznaniowa kontrola
dostępu.)
.TP 
\fBCAP_DAC_READ_SEARCH\fP
.PD 0
.RS
.IP \[bu] 3
Pomijanie sprawdzenia uprawnień odczytu pliku oraz sprawdzenia uprawnień
odczytu i wykonania (a właściwie przeszukania \- przyp. tłum.) katalogu;
.IP \[bu]
wywoływanie \fBopen_by_handle_at\fP(2);
.IP \[bu]
używanie znacznika \fBAT_EMPTY_PATH\fP \fBlinkat\fP(2) do utworzenia linku do
pliku opisanego deskryptorem pliku.
.RE
.PD
.TP 
\fBCAP_FOWNER\fP
.PD 0
.RS
.IP \[bu] 3
Pomijanie sprawdzenia uprawnień w przypadku operacji wymagających zwykle,
aby identyfikator użytkownika procesu pasował do identyfikatora użytkownika
pliku (np. \fBchmod\fP(2), \fButime\fP(2)), z wyłączeniem operacji objętych
przywilejami \fBCAP_DAC_OVERRIDE\fP i \fBCAP_DAC_READ_SEARCH\fP;
.IP \[bu]
ustawianie znaczników i\-węzłów (zob. \fBioctl_iflags\fP(2)) dla dowolnych
plików;
.IP \[bu]
ustawianie list kontroli dostępu do plików (ang. Access Control Lists \- ACL)
dla dowolnych plików;
.IP \[bu]
ignorowanie bitu lepkości katalogu przy usuwaniu pliku;
.IP \[bu]
modyfikowanie atrybutów rozszerzonych \fIużytkownika\fP w przypadku katalogu z
bitem lepkości, będącego własnością dowolnego użytkownika;
.IP \[bu]
określanie \fBO_NOATIME\fP do dowolnych plików w \fBopen\fP(2) i \fBfcntl\fP(2).
.RE
.PD
.TP 
\fBCAP_FSETID\fP
.PD 0
.RS
.IP \[bu] 3
Brak czyszczenia bitów: ustawiania ID użytkownika lub ID grupy podczas
wykonania (suid/sgid), w momencie modyfikowania pliku;
.IP \[bu]
ustawianie bitu ustawiania ID grupy podczas wykonania (sgid) w przypadku
plików, dla których identyfikator grupy nie pasuje do systemu plików lub do
jakiegokolwiek z dodatkowych identyfikatorów grupy procesu wywołującego.
.RE
.PD
.TP 
\fBCAP_IPC_LOCK\fP
.\" FIXME . As at Linux 3.2, there are some strange uses of this capability
.\" in other places; they probably should be replaced with something else.
.PD 0
.RS
.IP \[bu] 3
Blokowanie pamięci (\fBmlock\fP(2), \fBmlockall\fP(2), \fBmmap\fP(2), \fBshmctl\fP(2));
.IP \[bu]
Przydzielanie pamięci za pomocą dużych (ang. huge) stron
(\fBmemfd_create\fP(2), \fBmmap\fP(2), \fBshmctl\fP(2)).
.RE
.PD
.TP 
\fBCAP_IPC_OWNER\fP
Pomijanie sprawdzania uprawnień w przypadku operacji na obiektach IPC
Systemu V
.TP 
\fBCAP_KILL\fP
.\" FIXME . CAP_KILL also has an effect for threads + setting child
.\"       termination signal to other than SIGCHLD: without this
.\"       capability, the termination signal reverts to SIGCHLD
.\"       if the child does an exec().  What is the rationale
.\"       for this?
Pominięcie sprawdzenia uprawnień przy wysyłaniu sygnałów
(zob. \fBkill\fP(2)). Obejmuje to operację \fBKDSIGACCEPT\fP \fBioctl\fP(2).
.TP 
\fBCAP_LEASE\fP (od Linuksa 2.4)
Dokonywanie dzierżaw na dowolnych plikach (zob. \fBfcntl\fP(2)).
.TP 
\fBCAP_LINUX_IMMUTABLE\fP
Ustawianie znaczników i\-węzłów \fBFS_APPEND_FL\fP i \fBFS_IMMUTABLE_FL\fP
(zob. \fBioctl_iflags\fP(2)).
.TP 
\fBCAP_MAC_ADMIN\fP (od Linuksa 2.6.25)
Zezwala na zmianę statusu lub konfiguracji MAC. Zaimplementowane do modułu
Smack Linux Security Module (LSM).
.TP 
\fBCAP_MAC_OVERRIDE\fP (od Linuksa 2.6.25)
Przesłanianie obowiązkowej kontroli dostępu (ang. Mandatory Access Control \-
MAC). Zaimplementowane do modułu Smack LSM.
.TP 
\fBCAP_MKNOD\fP (od Linuksa 2.4)
Tworzenie plików specjalnych za pomocą \fBmknod\fP(2).
.TP 
\fBCAP_NET_ADMIN\fP
Przeprowadzanie wielu operacji związanych z siecią:
.PD 0
.RS
.IP \[bu] 3
konfigurowanie interfejsu;
.IP \[bu]
administrowanie zaporą sieciową IP, maskaradowaniem oraz rozliczeniami;
.IP \[bu]
modyfikowanie tabel trasowania
.IP \[bu]
przypisywanie do dowolnego adresu w celu uzyskania przezroczystego proxy
.IP \[bu]
ustawianie typu usługi (ang. type\-of\-service \- TOS);
.IP \[bu]
czyszczenie statystyk sterownika
.IP \[bu]
ustawianie trybu nasłuchiwania;
.IP \[bu]
włączanie multicastingu;
.IP \[bu]
używanie \fBsetsockopt\fP(2) do ustawiania następujących opcji gniazd:
\fBSO_DEBUG\fP, \fBSO_MARK\fP, \fBSO_PRIORITY\fP (na priorytet spoza zakresu od 0 do
6), \fBSO_RCVBUFFORCE\fP i \fBSO_SNDBUFFORCE\fP.
.RE
.PD
.TP 
\fBCAP_NET_BIND_SERVICE\fP
Kojarzenie gniazda z portami z uprzywilejowanej domeny internetowej (porty o
numerach poniżej 1024).
.TP 
\fBCAP_NET_BROADCAST\fP
.\" FIXME Since Linux 4.2, there are use cases for netlink sockets
.\"    commit 59324cf35aba5336b611074028777838a963d03b
(Nieużywane)  Tworzenie gniazd rozgłoszeniowych oraz nasłuchiwanie
multicastu.
.TP 
\fBCAP_NET_RAW\fP
.PD 0
.RS
.IP \[bu] 3
Używanie gniazd RAW i PACKET
.IP \[bu]
przypisywanie do dowolnego adresu w celu uzyskania przezroczystego proxy.
.RE
.PD
.\" Also various IP options and setsockopt(SO_BINDTODEVICE)
.TP 
\fBCAP_PERFMON\fP (od Linuksa 5.8)
Używanie wielu mechanizmów monitorowania wydajności, w tym:
.RS
.IP \[bu] 3
.PD 0
wywoływanie \fBperf_event_open\fP(2);
.IP \[bu]
wykonywanie wielu operacji BPF (filtrowania pakietów Berkeley \-
przyp. tłum.), które wpływają na wydajność.
.RE
.PD
.IP
Ten przywilej dodano w Linuksie 5.8, aby wydzielić funkcjonalność
monitorowania z przeładowanego przywileju \fBCAP_SYS_ADMIN\fP. Więcej
szczegółów w pliku źródeł jądra
\fIDocumentation/admin\-guide/perf\-security.rst\fP.
.TP 
\fBCAP_SETGID\fP
.RS
.PD 0
.IP \[bu] 3
Czynienie dowolnych zmian wobec identyfikatora grupy procesu oraz listy
uzupełniających identyfikatorów grup;
.IP \[bu]
fałszowanie identyfikatora grupy przy przekazywaniu referencji gniazd za
pomocą gniazd domeny uniksowej;
.IP \[bu]
zapisywanie przypisania identyfikatora grupy w przestrzeni nazw użytkownika
(zob. \fBuser_namespaces\fP(7)).
.PD
.RE
.TP 
\fBCAP_SETFCAP\fP (od Linuksa 2.6.24)
Ustawianie dowolnych przywilejów na pliku.
.IP
.\" commit db2e718a47984b9d71ed890eb2ea36ecf150de18
Od Linuksa 5.12 przywilej ten jest konieczny do przypisania identyfikatora
użytkownika 0 w nowej przestrzeni nazw; więcej szczegółów w podręczniku
\fBuser_namespaces\fP(7).
.TP 
\fBCAP_SETPCAP\fP
Jeśli obsługiwane są przywileje pliku (tj. od Linuksa 2.6.24): dodawanie
dowolnych przywilejów ze zbioru ograniczonego wywołującego wątku do jego
zbioru dziedzicznego; porzucanie przywilejów ze zbioru ograniczonego (za
pomocą \fBPR_CAPBSET_DROP\fP \fBprctl\fP(2)); dokonywanie zmian w znacznikach
\fIsecurebits\fP.
.IP
Jeśli przywileje pliku nie są obsługiwane (tj. przed Linuksem 2.6.24):
przyznawanie lub usuwanie dowolnych przywilejów w zbiorze przywilejów
dozwolonych wywołującego lub z dowolnych innych procesów (ta własność
\fBCAP_SETPCAP\fP jest niedostępna gdy jądro skonfigurowano w celu obsługi
przywilejów pliku, ponieważ \fBCAP_SETPCAP\fP ma dla takich jąder zupełnie
odmienną semantykę).
.TP 
\fBCAP_SETUID\fP
.RS
.PD 0
.IP \[bu] 3
Czynienie dowolnych zmian wobec identyfikatorów użytkownika procesów
(\fBsetuid\fP(2), \fBsetreuid\fP(2), \fBsetresuid\fP(2), \fBsetfsuid\fP(2));
.IP \[bu]
fałszowanie identyfikatora użytkownika przy przekazywaniu referencji gniazd
za pomocą gniazd domeny uniksowej;
.IP \[bu]
zapisywanie przypisania identyfikatora użytkownika w przestrzeni nazw
użytkownika (zob. \fBuser_namespaces\fP(7)).
.PD
.RE
.\" FIXME CAP_SETUID also an effect in exec(); document this.
.TP 
\fBCAP_SYS_ADMIN\fP
\fIUwaga\fP: niniejszy przywilej jest przeładowany, zob. \fIUwagi do deweloperów jądra\fP poniżej.
.IP
.PD 0
.RS
.IP \[bu] 3
Wykonywanie wielu operacji z zakresu administracji systemem, w tym:
\fBquotactl\fP(2), \fBmount\fP(2), \fBumount\fP(2), \fBpivot_root\fP(2), \fBswapon\fP(2),
\fBswapoff\fP(2), \fBsethostname\fP(2) i \fBsetdomainname\fP(2);
.IP \[bu]
wykonywanie uprzywilejowanych operacji \fBsyslog\fP(2) (od Linuksa 2.6.37 do
zezwolenia na takie operacje powinno się używać \fBCAP_SYSLOG\fP);
.IP \[bu]
wykonywanie polecenia \fBvm86\fP(2) \fBVM86_REQUEST_IRQ\fP;
.IP \[bu]
dostęp do takiej samej funkcjonalności punktów kontrolnych/przywracania jak
ta zarządzana przywilejem \fBCAP_CHECKPOINT_RESTORE\fP (jednak ten ostatni jest
preferowany do uzyskiwania dostępu do tej funkcjonalności, ponieważ jest
bardziej ograniczony).
.IP \[bu]
przeprowadzanie takich samych operacji BPF (filtrowania pakietów Berkeley \-
przyp. tłum.) jak te zarządzane przywilejem \fBCAP_BPF\fP (jednak ten ostatni
jest preferowany do uzyskiwania dostępu do tej funkcjonalności, ponieważ
jest bardziej ograniczony).
.IP \[bu]
korzystanie z takich samych mechanizmów monitorowania wydajności, jak te
zarządzane przywilejem \fBCAP_PERFMON\fP (jednak ten ostatni jest preferowany
do uzyskiwania dostępu do tej funkcjonalności, ponieważ jest bardziej
ograniczony).
.IP \[bu]
przeprowadzanie operacji \fBIPC_SET\fP i \fBIPC_RMID\fP na dowolnych obiektach IPC
Systemu V;
.IP \[bu]
przesłanianie limitu zasobów \fBRLIMIT_NPROC\fP;
.IP \[bu]
przeprowadzanie operacji na atrybutach rozszerzonych: \fIzaufanych\fP i
\fIbezpieczeństwa\fP (zob. \fBxattr\fP(7));
.IP \[bu]
używanie \fBlookup_dcookie\fP(2);
.IP \[bu]
używanie \fBioprio_set\fP(2) do przypisania klas harmonogramu wejścia/wyjścia
\fBIOPRIO_CLASS_RT\fP i (przed Linuksem 2.6.25) \fBIOPRIO_CLASS_IDLE\fP;
.IP \[bu]
fałszowanie identyfikatora procesu przy przekazywaniu referencji gniazd za
pomocą gniazd domeny uniksowej;
.IP \[bu]
wykraczanie poza określony w \fI/proc/sys/fs/file\-max\fP systemowy limit
otwartych plików, w wywołaniach systemowych otwierających pliki
(np. \fBaccept\fP(2), \fBexecve\fP(2), \fBopen\fP(2), \fBpipe\fP(2));
.IP \[bu]
używanie znaczników \fBCLONE_*\fP tworzących nowe przestrzenie nazw za pomocą
\fBclone\fP(2) i \fBunshare\fP(2) (lecz, od Linuksa 3.8, tworzenie przestrzeni
nazw użytkownika nie wymaga jakiegokolwiek przywileju);
.IP \[bu]
dostęp do uprzywilejowanych informacji o zdarzeniach \fIperf\fP;
.IP \[bu]
wywoływanie \fBsetns\fP(2)  (wymaga \fBCAP_SYS_ADMIN\fP w \fIdocelowej\fP przestrzeni
nazw);
.IP \[bu]
wywoływanie \fBfanotify_init\fP(2);
.IP \[bu]
przeprowadzanie uprzywilejowanych operacji \fBKEYCTL_CHOWN\fP i
\fBKEYCTL_SETPERM\fP \fBkeyctl\fP(2);
.IP \[bu]
przeprowadzanie operacji \fBMADV_HWPOISON\fP \fBmadvise\fP(2);
.IP \[bu]
wykorzystywanie \fBTIOCSTI\fP \fBioctl\fP(2) do umieszczania znaków w kolejce
wejściowej terminala innego, niż terminal kontrolujący wywołującego;
.IP \[bu]
wykorzystywanie przestarzałego wywołania systemowego \fBnfsservctl\fP(2);
.IP \[bu]
wykorzystywanie przestarzałego wywołania systemowego \fBbdflush\fP(2);
.IP \[bu]
wykonywanie różnych operacji uprzywilejowanych \fBioctl\fP(2) na urządzeniu
blokowym;
.IP \[bu]
wykonywanie różnych operacji uprzywilejowanych \fBioctl\fP(2) na systemie
plików;
.IP \[bu]
wykonywanie operacji uprzywilejowanych \fBioctl\fP(2) na urządzeniu
\fI/dev/random\fP (zob. \fBrandom\fP(4));
.IP \[bu]
instalowanie filtru \fBseccomp\fP(2) bez uprzedniej konieczności ustawienia
atrybutu wątku \fIno_new_privs\fP;
.IP \[bu]
modyfikowanie reguł zezwalających/zabraniających w grupach kontroli
urządzenia;
.IP \[bu]
wykorzystywanie operacji \fBPTRACE_SECCOMP_GET_FILTER\fP \fBptrace\fP(2) do
zrzucania filtrów seccomp śledzącego;
.IP \[bu]
wykorzystywanie operacji \fBPTRACE_SETOPTIONS\fP \fBptrace\fP(2) do zawieszania
zabezpieczeń seccomp śledzącego (np. znacznik \fBPTRACE_O_SUSPEND_SECCOMP\fP);
.IP \[bu]
dokonywanie operacji administracyjnych na wielu sterownikach urządzeń;
.IP \[bu]
modyfikacja wartości priorytetów nice autogrupy, za pomocą zapisu do
\fI/proc/\fPpid\fI/autogroup\fP (zob. \fBsched\fP(7)).
.RE
.PD
.TP 
\fBCAP_SYS_BOOT\fP
Używanie \fBreboot\fP(2) i \fBkexec_load\fP(2).
.TP 
\fBCAP_SYS_CHROOT\fP
.RS
.PD 0
.IP \[bu] 3
Używanie \fBchroot\fP(2);
.IP \[bu]
zmienianie przestrzeni nazw montowań za pomocą \fBsetns\fP(2)
.PD
.RE
.TP 
\fBCAP_SYS_MODULE\fP
.RS
.PD 0
.IP \[bu] 3
Ładowanie i usuwanie modułów jądra (zob. \fBinit_module\fP(2) i
\fBdelete_module\fP(2));
.IP \[bu]
przed Linuksem 2.6.25: porzucanie przywilejów z systemowego, ograniczonego
zbioru przywilejów.
.PD
.RE
.TP 
\fBCAP_SYS_NICE\fP
.PD 0
.RS
.IP \[bu] 3
Zmniejszanie wartości nice procesu (\fBnice\fP(2), \fBsetpriority\fP(2)) oraz
zmienianie wartości nice dowolnych procesów;
.IP \[bu]
ustawianie zasad planowania czasu rzeczywistego procesu wywołującego oraz
ustawianie zasad planowania i priorytetów dowolnych procesów
(\fBsched_setscheduler\fP(2), \fBsched_setparam\fP(2), \fBsched_setattr\fP(2));
.IP \[bu]
ustawianie koligacji procesorów (ang. affinity) dla dowolnych procesów
(\fBsched_setaffinity\fP(2));
.IP \[bu]
ustawianie klasy i priorytetu planowania wejścia/wyjścia dowolnych procesów
(\fBioprio_set\fP(2));
.IP \[bu]
.\" FIXME CAP_SYS_NICE also has the following effect for
.\" migrate_pages(2):
.\"     do_migrate_pages(mm, &old, &new,
.\"         capable(CAP_SYS_NICE) ? MPOL_MF_MOVE_ALL : MPOL_MF_MOVE);
.\"
.\" Document this.
stosowanie \fBmigrate_pages\fP(2) do dowolnych procesów oraz możliwość
migrowania procesów do dowolnych węzłów;
.IP \[bu]
stosowanie \fBmove_pages\fP(2) do dowolnych procesów;
.IP \[bu]
używanie znaczniku \fBMPOL_MF_MOVE_ALL\fP z \fBmbind\fP(2) i \fBmove_pages\fP(2).
.RE
.PD
.TP 
\fBCAP_SYS_PACCT\fP
Używanie \fBacct\fP(2).
.TP 
\fBCAP_SYS_PTRACE\fP
.PD 0
.RS
.IP \[bu] 3
Śledzenie dowolnych procesów za pomocą \fBptrace\fP(2);
.IP \[bu]
stosowanie \fBget_robust_list\fP(2) do dowolnych procesów;
.IP \[bu]
transferowanie danych do i z pamięci, w przypadku dowolnych procesów, za
pomocą \fBprocess_vm_readv\fP(2) i \fBprocess_vm_writev\fP(2);
.IP \[bu]
dokonywanie inspekcji procesów za pomocą \fBkcmp\fP(2).
.RE
.PD
.TP 
\fBCAP_SYS_RAWIO\fP
.PD 0
.RS
.IP \[bu] 3
Dokonywanie operacji wejścia/wyjścia na portach (\fBiopl\fP(2) i \fBioperm\fP(2));
.IP \[bu]
uzyskiwanie dostępu do \fI/proc/kcore\fP;
.IP \[bu]
wykonywanie operacji \fBFIBMAP\fP \fBioctl\fP(2);
.IP \[bu]
otwieranie urządzeń w celu dostępu do rejestrów charakterystycznych dla
danego modelu x86 (ang. model\-specific register \- MSR, zob. \fBmsr\fP(4));
.IP \[bu]
aktualizowanie \fI/proc/sys/vm/mmap_min_addr\fP;
.IP \[bu]
tworzenie przypisań pamięci do adresów poniżej wartości określonej przez
\fI/proc/sys/vm/mmap_min_addr\fP;
.IP \[bu]
przypisywanie plików w \fI/proc/bus/pci\fP;
.IP \[bu]
otwieranie \fI/dev/mem\fP i \fI/dev/kmem\fP;
.IP \[bu]
wykonywanie rożnych poleceń w stosunku do urządzeń SCSI;
.IP \[bu]
wykonywanie określonych operacji na urządzeniach \fBhpsa\fP(4) i \fBcciss\fP(4);
.IP \[bu]
wykonywanie wielu charakterystycznych dla urządzenia operacji na innych
urządzeniach.
.RE
.PD
.TP 
\fBCAP_SYS_RESOURCE\fP
.PD 0
.RS
.IP \[bu] 3
Używanie zarezerwowanej przestrzeni w systemach plików ext2;
.IP \[bu]
tworzenie wywołań \fBioctl\fP(2) kontrolujących działanie dziennika ext3;
.IP \[bu]
przesłanianie limitów przydziałów dyskowych;
.IP \[bu]
zwiększanie limitów zasobów (zob. \fBsetrlimit\fP(2));
.IP \[bu]
przesłanianie limitu zasobów \fBRLIMIT_NPROC\fP;
.IP \[bu]
przesłanianie maksymalnej liczby konsol, przy przydzielaniu konsol;
.IP \[bu]
przesłanianie maksymalnej liczby mapowań klawiszy;
.IP \[bu]
zezwalanie na więcej niż 64hz przerwań z zegara czasu rzeczywistego;
.IP \[bu]
podnoszenie limitu \fImsg_qbytes\fP kolejki komunikatów Systemu V ponad limit
określony w \fI/proc/sys/kernel/msgmnb\fP (zob. \fBmsgop\fP(2) i \fBmsgctl\fP(2));
.IP \[bu]
możliwość pominięcia limitu zasobów \fBRLIMIT_NOFILE\fP, dotyczącego
deskryptorów plików \[Bq]w locie\[rq], przy przekazywaniu deskryptorów pliku
do innego procesu za pomocą gniazd domeny uniksowej (zob. \fBunix\fP(7));
.IP \[bu]
przesłanianie limitu \fI/proc/sys/fs/pipe\-size\-max\fP przy ustawianiu
pojemności potoku za pomocą polecenia \fBF_SETPIPE_SZ\fP \fBfcntl\fP(2);
.IP \[bu]
korzystanie z \fBF_SETPIPE_SZ\fP do zwiększania pojemności potoku ponad limit
określony w \fI/proc/sys/fs/pipe\-max\-size\fP;
.IP \[bu]
przesłanianie limitów \fI/proc/sys/fs/mqueue/queues_max\fP,
\fI/proc/sys/fs/mqueue/msg_max\fP, i \fI/proc/sys/fs/mqueue/msgsize_max\fP przy
tworzeniu kolejek komunikatów POSIX (zob. \fBmq_overview\fP(7));
.IP \[bu]
korzystanie z operacji \fBPR_SET_MM\fP \fBprctl\fP(2);
.IP \[bu]
ustawianie \fI/proc/\fPpid\fI/oom_score_adj\fP na wartość niższą niż ostatnio
ustawioną przez proces z przywilejem \fBCAP_SYS_RESOURCE\fP.
.RE
.PD
.TP 
\fBCAP_SYS_TIME\fP
Ustawianie zegara systemowego (\fBsettimeofday\fP(2), \fBstime\fP(2),
\fBadjtimex\fP(2)); ustawianie zegara czasu rzeczywistego (sprzętowego).
.TP 
\fBCAP_SYS_TTY_CONFIG\fP
Używanie \fBvhangup\fP(2); korzystanie z wielu uprzywilejowanych operacji
\fBioctl\fP(2) na terminalach wirtualnych.
.TP 
\fBCAP_SYSLOG\fP (od Linuksa 2.6.37)
.RS
.PD 0
.IP \[bu] 3
Wykonywanie uprzywilejowanych operacji \fBsyslog\fP(2). Opis operacji
wymagających uprzywilejowania zawiera podręcznik systemowy \fBsyslog\fP(2).
.IP \[bu]
Przeglądanie adresów ujawnionych w \fI/proc\fP i innych interfejsach, gdy
\fI/proc/sys/kernel/kptr_restrict\fP ma wartość 1 (zob. opis \fIkptr_restrict\fP w
\fBproc\fP(5)).
.PD
.RE
.TP 
\fBCAP_WAKE_ALARM\fP (od Linuksa 3.0)
.\"
Wyzwalanie czegoś, co wybudzi system (ustawienie budzików
\fBCLOCK_REALTIME_ALARM\fP i \fBCLOCK_BOOTTIME_ALARM\fP).
.SS "Przeszła i obecna implementacja"
Pełna implementacja przywilejów wymaga aby:
.IP \[bu] 3
W przypadku wszystkich operacji uprzywilejowanych jądro sprawdzało, czy
wątek ma odpowiedni przywilej w swoim zbiorze efektywnym.
.IP \[bu]
Jądro zapewniało wywołania systemowe pozwalające na zmianę i pobranie
przywilejów wątku.
.IP \[bu]
System plików obsługiwał dołączanie przywilejów do pliku wykonywalnego, aby
proces mógł zyskiwać te przywileje przy wykonywaniu pliku.
.PP
.\"
Przed Linuksem 2.6.24 jedynie dwa pierwsze warunki były spełnione, Linux od
wersji 2.6.24 wypełnia wszystkie trzy wymagania.
.SS "Uwagi do deweloperów jądra"
Przy dodawaniu nowej funkcji, która powinna być zarządzania przywilejami,
należy rozważyć poniższe punkty.
.IP \[bu] 3
Celem przywilejów jest podzielenie uprawnień superużytkownika na fragmenty,
dzięki czemu program, którego jeden lub kilka przywilejów zostało
przejętych, ma mniejsze możliwości uczynienia szkód w systemie, niż ten sam
program działający z uprawnieniami roota.
.IP \[bu]
Deweloper ma wybór: utworzyć nowy przywilej dla swojej nowej funkcji lub
przypisanie funkcji do jednego z istniejących. Aby zestaw przywilejów miał
rozsądny rozmiar, zaleca się to drugie podejście, chyba że istnieją
przekonujące powody do tworzenia nowego przywileju (istnieje również limit
techniczny: zestaw przywilejów jest obecnie ograniczony do 64 bitów).
.IP \[bu]
Aby dowiedzieć się, który przywilej będzie najlepiej pasował do
opracowywanej nowej funkcji, należy sprawdzić powyższą listę przywilejów w
kolejności, aby znaleźć \[Bq]koszyk\[rq], w którym nowa funkcja najlepiej
się odnajdzie. Jednym ze sposobów jest sprawdzenie, czy inne funkcje
wymagające jakiegoś przywileju będą zawsze używane z nową funkcją. Jeśli
nowa funkcja jest bezużyteczna bez tych innych funkcji, należy użyć tego
samego przywileju jak one.
.IP \[bu]
\fINie\fP należy wybierać \fBCAP_SYS_ADMIN\fP, jeśli tylko uda się tego uniknąć!
Wiele istniejących sprawdzeń przywilejów jest z nim związanych
(zob. częściową listę powyżej). Można go już przekonująco nazwać \[Bq]nowym
rootem\[rq], jako że, z jednej strony obejmuje cały szereg uprawnień, a z
drugiej ze względu na szerokie spektrum wymagany jest również przez wiele
uprzywilejowanych programów. Nie należy pogłębiać tego problemu. Jedynymi
funkcjami, które należy wiązać z \fBCAP_SYS_ADMIN\fP są te \fIściśle\fP pasujące
do istniejących funkcji tego koszyka.
.IP \[bu]
.\"
Jeśli okaże się, że istnieje jednak konieczność utworzenia nowego przywileju
dla opracowywanej funkcji, nie należy tworzyć go lub nazywać jako przywileju
\[Bq]jednorazowego\[rq]. Z tego względu na przykład, dodanie bardzo
specjalistycznego przywileju \fBCAP_SYS_PACCT\fP było najprawdopodobniej
błędne. Zamiast tego należy zidentyfikować i nazwać swój nowy przywilej jako
szerszy koszyk, do którego pasować mogą w przyszłości inne związane funkcje.
.SS "Zbiory przywilejów wątku"
Każdy wątek ma następujący zbiór przywilejów zawierający zero lub więcej z
przywilejów opisanych wyżej:
.TP 
\fIDozwolony\fP (ang. permitted)
Jest to ograniczający nadzbiór przywilejów efektywnych, jakie może przyjąć
wątek. Jest to również ograniczający nadzbiór przywilejów, jakie można dodać
do zbioru dziedzicznego, w przypadku przywilejów które można dodać do zbioru
dziedzicznego przez wątek nieposiadający przywileju \fBCAP_SETPCAP\fP w swoim
zbiorze efektywnym.
.IP
Jeśli wątek porzuci przywilej ze swojego zbioru dozwolonego, nigdy nie może
pozyskać tego przywileju ponownie (chyba że \fBexecve\fP(2) wykona program z
set\-user\-ID\-root lub program, którego powiązane przywileje pliku dają taki
przywilej).
.TP 
\fIDziedziczny\fP (ang. inheritable)
Jest to zbiór przywilejów zachowywany na przestrzeni całego
\fBexecve\fP(2). Przywileje dziedziczne pozostają dziedziczone przy wykonywaniu
dowolnego programu oraz są dodawane do zbioru dozwolonego przy wykonywaniu
programu, który ma ustawione odpowiadające bity w zbiorze dziedzicznym
pliku.
.IP
Ze względu na to, że przywileje dziedziczne nie są zwykle zachowywane na
przestrzeni \fBexecve\fP(2) przy działaniu jako użytkownik nieuprzywilejowany
(nie root), programy które chciałyby wykonać swoje programy pomocnicze z
podniesionymi przywilejami, powinny rozważyć korzystanie z przywilejów tła,
opisanych poniżej.
.TP 
\fIEfektywny\fP (ang. effective)
Jest to zbiór przywilejów używany przez jądro do sprawdzenia uprawnień
wątku.
.TP 
\fIOgraniczający\fP (ang. bounding; na wątek od Linuksa 2.6.25)
Zbiór przywilejów ograniczających jest mechanizmem używanym do ograniczenia
przywilejów pozyskiwanych w trakcie \fBexecve\fP(2).
.IP
Od Linuksa 2.6.25, jest to zbiór przywilejów przypisywany do wątku. W
starszych jądrach, zbiór przywilejów ograniczających był systemowy i
dzielony przez wszystkie wątki systemu.
.IP
Więcej szczegółów opisano w rozdziale \fIZbiór przywilejów ograniczających\fP
poniżej.
.TP 
\fITła\fP (ang. ambient; od Linuksa 4.3)
.\" commit 58319057b7847667f0c9585b9de0e8932b0fdb08
Jest to zbiór przywilejów zachowywany na przestrzeni \fBexecve\fP(2)
nieuprzywilejowanego programu. Przywileje tła przestrzegają zasady, że żaden
przywilej nie może zostać przywilejem tła, jeśli nie jest zarówno dozwolony
jak i dziedziczny.
.IP
Zbiór przywilejów tła można modyfikować bezpośrednio za pomocą
\fBprctl\fP(2). Przywileje tła są automatycznie zmniejszane, jeśli zmniejszony
zostanie odpowiadający przywilej dozwolony lub dziedziczny.
.IP
Wykonanie programu zmieniającego identyfikator użytkownika lub grupy ze
względu na bity ustawienia ID użytkownika lub grupy podczas wykonania
(suid/sgid) albo programu, który ma jakiekolwiek przywileje plikowe,
wyczyści zbiór przywilejów tła. Przywileje tła są dodawane do zbioru
dozwolonego i przypisywane do zbioru efektywnego przy wywołaniu
\fBexecve\fP(2). Jeśli przywilej tła spowoduje zwiększenie przywilejów
dozwolonych i efektywnych procesu podczas \fBexecve\fP(2), nie wyzwoli to trybu
bezpiecznego wykonania opisanego w \fBld.so\fP(8).
.PP
Wątek potomny utworzony za pomocą \fBfork\fP(2) dziedziczy kopie zbioru
przywilejów swojego rodzica. Szczegóły wpływu \fBexecve\fP(2) na przywileje
opisano w rozdziale \fITransformacja przywilejów podczas execve()\fP poniżej.
.PP
Za pomocą \fBcapset\fP(2), wątek może zmieniać swój zbiór przywilejów,
zob. rozdział \fIProgramowe dostosowywanie zbioru przywilejów\fP poniżej.
.PP
.\" commit 73efc0394e148d0e15583e13712637831f926720
.\"
Od Linuksa 3.2, plik \fI/proc/sys/kernel/cap_last_cap\fP ujawnia wartość
numeryczną najwyższego przywileju obsługiwanego przez działające jądro;
można to wykorzystać do określenia najwyższego bitu, jaki można ustawić w
zbiorze przywilejów.
.SS "Przywileje pliku"
Od Linuksa 2.6.24 jądro obsługuje powiązanie zbioru przywilejów z plikiem
wykonywalnym za pomocą \fBsetcap\fP(8). Zbiory przywilejów pliku są
przechowywane w atrybucie rozszerzonym (zob. \fBsetxattr\fP(2) i \fBxattr\fP(7)) o
nazwie \fIsecurity.capability\fP. Zapis do tego atrybutu rozszerzonego wymaga
przywileju \fBCAP_SETFCAP\fP. Zbiory przywilejów pliku, razem ze zbiorem
przywilejów wątku, określają przywileje wątku po \fBexecve\fP(2).
.PP
Istnieją trzy zbiory przywilejów pliku:
.TP 
\fIDozwolone\fP (ang. permitted; wcześniej znane jako \fIwymuszone\fP \- ang. forced):
Te przywileje są automatycznie dozwolone dla wątku, niezależnie od
przywilejów dziedzicznych wątku.
.TP 
\fIDziedziczne\fP (ang. inheritable; wcześniej znane jako \fIdozwolone\fP \- ang. allowed):
Na tym zbiorze wykonywana jest operacja AND ze zbiorem dziedzicznym wątku, w
celu określenia które przywileje dziedziczne są włączone w zbiorze
dozwolonym wątku, po \fBexecve\fP(2).
.TP 
\fIEfektywne\fP (ang. effective)
Nie jest to zbiór, lecz pojedynczy bit. Jeśli jest ustawiony, to podczas
\fBexecve\fP(2) wszystkie nowo dozwolone przywileje wątku są również podnoszone
w zbiorze efektywnym. Jeśli bit jest nieustawiony, to po \fBexecve\fP(2), żaden
z nowo dozwolonych przywilejów nie trafia do nowego zbioru efektywnego.
.IP
.\"
Włączenie efektywnego bitu przywilejów pliku wymusza sytuację, że przywilej
dozwolony lub dziedziczny dowolnego pliku, który powoduje pozyskanie przez
wątek odpowiadającego przywileju podczas \fBexecve\fP(2) (zob. \fITransformacja przywilejów podczas execve()\fP poniżej) pozyska również ten przywilej w swoim
zbiorze efektywnym. Z tego względu przy przypisywaniu przywilejów do pliku
(\fBcap_set_file\fP(3), \fBcap_set_fd\fP(3), \fBsetcap\fP(8)), jeśli poda się
znacznik przywileju efektywnego, jako mającą być włączoną dla dowolnego
przywileju, to znacznik efektywny musi być również podany jako włączony dla
wszystkich innych przywilejów, dla których odpowiadający znacznik dozwolony
lub dziedziczny jest włączony.
.SS "Wersjonowanie atrybutu rozszerzonego przywilejów pliku"
W celu zachowania przyszłej rozszerzalności, jądro obsługuje sposób
kodowania numeru wersji wewnątrz atrybutu rozszerzonego
\fIsecurity.capability\fP, który jest używany do implementacji przywilejów
pliku. Poniższe numery wersji są wewnętrzne i niewidoczne wprost dla
aplikacji w przestrzeni użytkownika. Do tej pory obsługiwane są następujące
wersje:
.TP 
\fBVFS_CAP_REVISION_1\fP
Była to oryginalna implementacja przywilejów pliku, obsługująca 32\-bitowe
maski przywilejów pliku.
.TP 
\fBVFS_CAP_REVISION_2\fP (od Linuksa 2.6.25)
.\" commit e338d263a76af78fe8f38a72131188b58fceb591
Ta wersja pozwalała na maski przywilejów pliku o rozmiarze 64 bitów oraz
była konieczna wobec przekroczenia przez przywileje liczby 32. Jądro
kontynuuje obsługę plików, które mają 32\-bitową maskę przywilejów w wersji
1, w sposób przezroczysty, lecz przy dodawaniu przywilejów do plików, które
uprzednio ich nie posiadały oraz przy modyfikacji przywilejów istniejących
plików, automatycznie użyje wersji 2 (lub wersji 3, zgodnie z opisem
poniżej).
.TP 
\fBVFS_CAP_REVISION_3\fP (od Linuksa 4.14)
.\" commit 8db6c34f1dbc8e06aa016a9b829b06902c3e1340
Wersja 3 przywilejów plików zapewnia przywileje przestrzeni nazw plików
(opisanych niżej).
.IP
Podobnie jak w wersji 2 przywilejów pliku, maski przywilejów w wersji 3 mają
rozmiar 64 bitów. Jednak oprócz tego, w atrybucie rozszerzonym
\fIsecurity.capability\fP zakodowano przestrzeń nazw identyfikatora użytkownika
root (jest to wartość, którą użytkownik o identyfikatorze 0 wewnątrz tej
przestrzeni nazw przypisuje początkowej przestrzeni nazw użytkownika).
.IP
Przywileje pliku w wersji 3 są zaprojektowane do wspólnej egzystencji z
przywilejami pliku w wersji 2 tj. we współczesnym systemie Linux część
plików może mieć przywileje w wersji 2, a inne w wersji 3.
.PP
Przed Linuksem 4.14, jedynym rodzajem atrybutu rozszerzonego przywileju
pliku, jaki mógł być dołączony do pliku, był atrybut
\fBVFS_CAP_REVISION_2\fP. Od jądra Linux 4.14, wersja atrybutu rozszerzonego
\fIsecurity.capability\fP dołączonego do pliku zależy od okoliczności, w jakich
utworzono atrybut.
.PP
Od Linuksa 4.14, atrybut rozszerzony \fIsecurity.capability\fP jest tworzony
(lub przekształcany) automatycznie na atrybut w wersji 3
(\fBVFS_CAP_REVISION_3\fP) jeśli spełnione są oba poniższe warunki:
.IP \[bu] 3
Wątek zapisujący do atrybutu rezyduje w niepierwotnej przestrzeni nazw
użytkownika (ściślej mówiąc: wątek rezydujący w przestrzeni nazw użytkownika
innej niż ta, z której zamontowano zasadniczy system plików.)
.IP \[bu]
Wątek ma przywilej \fBCAP_SETFCAP\fP wobec i\-węzła pliku, co oznacza, że (a)
wątek ma przywilej \fBCAP_SETFCAP\fP wobec swojej przestrzeni nazw użytkownika
oraz (b) identyfikatory użytkownika i grupy i\-węzła pliku mają przypisania w
przestrzeni nazw użytkownika zapisującego.
.PP
Gdy tworzony jest atrybut rozszerzony \fIsecurity.capability\fP
\fBVFS_CAP_REVISION_3\fP, identyfikator użytkownika root tworzącego wątku w
przestrzeni nazw użytkownika jest zapisywany w atrybucie rozszerzonym.
.PP
Odmiennie, przy tworzeniu lub modyfikacji atrybutu rozszerzonego
\fIsecurity.capability\fP z uprzywilejowanego (\fBCAP_SETFCAP\fP) wątku
rezydującego w przestrzeni nazw, w której zamontowano zasadniczy system
plików (zwykle oznacza to pierwotną przestrzeń nazw użytkownika), atrybut
zostanie automatycznie utworzony w wersji 2 (\fBVFS_CAP_REVISION_2\fP).
.PP
Proszę zauważyć, że utworzenie wersji 3 atrybutu rozszerzonego
\fIsecurity.capability\fP jest automatyczne. Oznacza to, że jeśli program w
przestrzeni użytkownika dokonuje zapisu (\fBsetxattr\fP(2)) atrybutu
\fIsecurity.capability\fP w wersji 2, jądro automatycznie utworzy atrybut w
wersji 3, jeśli atrybut jest utworzony w okolicznościach opisach
powyżej. Odpowiednio, gdy pobierany jest atrybut \fIsecurity.capability\fP w
wersji 3 (\fBgetxattr\fP(2)) przez proces rezydujący w przestrzeni nazw
użytkownika, który został utworzony przez identyfikator użytkownika roota
(lub potomek tej przestrzeni nazw użytkownika), zwracany atrybut jest
(automatycznie) upraszczany, aby wyglądał na atrybut w wersji 2
(tzn. wartość zwracana ma rozmiar atrybutu w wersji 2 oraz nie zawiera
identyfikatora użytkownika root). To tłumaczenie w locie oznacza, że w
narzędziach przestrzeni użytkownika (np. \fBsetcap\fP(1) i \fBgetcap\fP(1)) nie są
konieczne zmiany aby używać tych narzędzi do tworzenia i pobierania
atrybutów \fIsecurity.capability\fP w wersji 3.
.PP
.\"
Proszę zwrócić uwagę, że plik może posiadać powiązany z nim atrybut
rozszerzony \fIsecurity.capability\fP w wersji 2 albo w wersji 3, ale nie obu:
utworzenie albo modyfikacja atrybutu rozszerzonego \fIsecurity.capability\fP
automatycznie zmodyfikuje wersję, w zależności od okoliczności, w jakich
utworzono lub zmodyfikowano atrybut rozszerzony.
.SS "Transformacja przywilejów podczas execve()"
Podczas \fBexecve\fP(2), jądro oblicza nowe przywileje procesu za pomocą
poniższego algorytmu:
.PP
.in +4n
.EX
P'(tła)     = (plik jest uprzywilejowany) ? 0 : P(tła)
\&
P'(dozwolony)   = (P(dziedziczny) & F(dziedziczny)) |
                  (F(dozwolony) & P(ograniczający)) | P'(tła)
\&
P'(efektywny)   = F(efektywny) ? P'(dozwolony) : P'(tła)
\&
P'(dziedziczny) = P(dziedziczny)    [tzn. bez zmian]
\&
P'(ograniczający)    = P(ograniczający)       [tzn. bez zmian]
.EE
.in
.PP
gdzie:
.RS 4
.TP 
P()
oznacza wartość zbioru przywilejów wątku przed \fBexecve\fP(2)
.TP 
P'()
oznacza wartość zbioru przywilejów wątku po \fBexecve\fP(2)
.TP 
F()
oznacza zbiór przywilejów pliku
.RE
.PP
Proszę zwrócić uwagę na detale odnoszące się do powyższych reguł
transformacji przywilejów:
.IP \[bu] 3
Zbiór przywilejów tła jest obecny jedynie od Linuksa 4.3. Przy określaniu
transformacji zbioru tła podczas \fBexecve\fP(2), plikiem uprzywilejowanym jest
plik posiadający przywileje lub ustawiony bit ustawienia ID użytkownika lub
grupy podczas wykonania (suid/sgid).
.IP \[bu]
Przed Linuksem 2.6.25, zbiór ograniczający był atrybutem systemowym
dzielonym przez wszystkie wątki. Ta wartość systemowa była używana do
obliczania podczas \fBexecve\fP(2) nowego zbioru dozwolonego w ten sam sposób
jak pokazano powyżej dla \fIP(ograniczającego)\fP.
.PP
\fIUwaga\fP: podczas przekształceń przywilejów opisanych powyżej, przywileje
plików mogą zostać zignorowane (potraktowane jako puste) z tych samych
powodów jak ignorowane są bity ustawienia ID użytkownika lub grupy podczas
wykonania (suid/sgid); zob. \fBexecve\fP(2). Przywileje pliku są ignorowane w
podobny sposób, jeśli rozruch jądra nastąpił z opcją \fIno_file_caps\fP.
.PP
.\"
\fIUwaga\fP: zgodnie z powyższymi regułami, jeśli proces z niezerowym
identyfikatorem użytkownika wykona \fBexecve\fP(2), to wszystkie przywileje
obecne w jego zbiorze dozwolonym i efektywnym zostaną wyczyszczone. Sposób
traktowania przywilejów, gdy proces z identyfikatorem użytkownika równym
zero wykonuje \fBexecve\fP(2), opisano w rozdziale \fIPrzywileje i wykonanie programów przez roota\fP poniżej.
.SS "Kontrola bezpieczeństwa plików binarnych ślepych na przywileje"
Plikiem binarnym ślepym na przywileje (ang. capability\-dumb) jest program
oznaczony jako posiadający przywileje pliku, ale który nie został zmieniony
w celu używania API \fBlibcap\fP(3) do modyfikacji swoich przywilejów (innymi
słowy jest to program korzystający z tradycyjnego bitu ustawienia ID roota
podczas wykonania (suid), który został przełączony do korzystania z
przywilejów pliku, ale którego kodu nie zmodyfikowano w celu rozumienia
przywilejów). W przypadku takich programów bit przywilejów efektywnych jest
ustawiany na pliku, dzięki czemu przywileje dozwolone pliku są automatycznie
włączone w zbiorze efektywnym procesu, gdy plik jest wykonywany. Jądro
rozpoznaje plik, który posiada ustawiony bit efektywnych przywilejów, jako
ślepego na przywileje, do celu opisywanej tu kontroli.
.PP
.\"
Przy wykonywaniu pliku binarnego ślepego na przywileje, jądro sprawdza, czy
proces pozyskał wszelkie przywileje dozwolone, które zostały podane w
zbiorze dozwolonym pliku, po transformacji przywilejów opisanej wyżej
(typowym powodem, dla którego może to \fInie\fP nastąpić, jest zamaskowanie
przez zbiór ograniczający przywilejów niektórych przywilejów ze zbioru
dozwolonego pliku). Jeśli proces nie pobierze pełnego zbioru przywilejów
dozwolonych, to \fBexecve\fP(2) nie powiedzie się z błędem \fBEPERM\fP. Zapobiega
się w ten sposób potencjalnemu zagrożeniu bezpieczeństwa, które mogłoby
wystąpić, gdyby aplikacja ślepa na przywileje została wykonana z mniejszymi
przywilejami niż jest to wymagane. Proszę zauważyć, że z definicji,
aplikacja nie może sama rozpoznać tego problemu, ponieważ nie korzysta z API
\fBlibcap\fP(3).
.SS "Przywileje i wykonanie programów przez roota"
.\" See cap_bprm_set_creds(), bprm_caps_from_vfs_cap() and
.\" handle_privileged_root() in security/commoncap.c (Linux 5.0 source)
Aby odtworzyć tradycyjną semantykę uniksową, jądro w sposób specjalny
traktuje przywileje pliku, gdy program jest wykonywany przez proces z UID 0
(tj. roota) lub gdy wykonywany jest program z bitem ustawienia ID roota
(suid).
.PP
Po przeprowadzeniu zmian wobec efektywnego identyfikatora procesu
wyzwolonych przez bit ustawienia ID użytkownika (suid) pliku binarnego \[em]
jak np. przełączenie efektywnego identyfikatora użytkownika na 0 (tj. root),
ponieważ wykonano program z ustawieniem ID użytkownika (suid) \[em] jądro
oblicza zbiór przywilejów pliku zgodnie z poniższymi zasadami:
.IP (1) 5
Jeśli rzeczywistym lub efektywnym identyfikatorem użytkownika jest 0
(tj. root), to zbiory dziedziczne i dozwolone pliku są ignorowane; zamiast
tego są one rozważane jako wszystkie (tzn. wszystkie przywileje
włączone). Wobec tego zachowania istnieje jeden wyjątek, opisany poniżej w
rozdziale \fIProgramy z ustawieniem ID użytkownika (suid), które posiadają przywileje pliku\fP.
.IP (2)
Jeśli proces ma identyfikator efektywny użytkownika równy 0 (tj. root) lub
włączono bit efektywny pliku, to rozważany jest bit efektywny pliku (jako
włączony).
.PP
Te rozważane wartości zbioru przywilejów pliku są następnie używane zgodnie
z opisem powyżej, do obliczenia transformacji przywilejów procesu podczas
\fBexecve\fP(2).
.PP
Dlatego, gdy proces z niezerowym UID wykonuje \fBexecve\fP(2) na programie z
ustawieniem ID roota podczas wykonania (suid), który nie posiada dołączonych
przywilejów albo gdy proces, którego rzeczywiste i efektywne identyfikatory
użytkownika wynoszą 0 i wykonuje \fBexecve\fP(2) na programie, obliczenie
nowych dozwolonych przywilejów procesu upraszcza się do:
.PP
.in +4n
.EX
P'(dozwolony)   = P(dziedziczny) | P(ograniczający)
\&
P'(efektywny)   = P'(dozwolony)
.EE
.in
.PP
W efekcie, proces zyskuje wszystkie przywileje ze swojego zbioru dozwolonego
i efektywnego, z wyjątkiem tych wyłączonych zbiorem przywilejów
ograniczających (w obliczeniu P'(dozwolonego), wyrażenie P'(tła) można
uprościć i wykreślić, ponieważ jest to z definicji prawidłowy podzbiór
P(dziedzicznych)).
.PP
.\"
.\"
Specjalne traktowanie użytkownika o identyfikatorze równym 0 (tj. roota)
opisane w niniejszym podrozdziale, można wyłączyć za pomocą mechanizmu
securebits opisanego poniżej.
.SS "Programy z ustawieniem ID roota podczas wykonania (suid), które posiadają przywileje pliku"
Istnieje jeden wyjątek wobec zachowania opisanego powyżej w rozdziale
\fIPrzywileje i wykonanie programów przez roota\fP. Jeśli (a) wykonywany plik
binarny ma dołączone przywileje oraz (b) proces ma rzeczywisty identyfikator
użytkownika, który \fInie\fP jest równy 0 (tj. nie jest rootem) oraz (c) proces
ma efektywny identyfikator użytkownika \fIrówny\fP 0 (tj. root), to bity
przywilejów pliku są honorowane (tzn. nie są rozważane jako wszystkie
włączone). Standardową sytuacją, w której może to nastąpić, jest wykonywanie
programu z ustawieniem ID roota podczas wykonania (suid), który ma również
przywileje pliku. Gdy taki program jest wykonywany, to proces zyskuje
wyłącznie przywileje nadane przez program (tzn. nie wszystkie przywileje,
jak stałoby się przy wykonaniu programu z ustawieniem ID roota podczas
wykonania (suid), który nie ma przypisanych żadnych przywilejów pliku).
.PP
.\"
Proszę zauważyć, że można przypisać zbiór pusty przywilejów do pliku
programu, zatem możliwe jest utworzenie programu z ustawieniem ID roota
podczas wykonania (suid), który zmienia efektywny i zapisany suid procesu
wykonującego program na 0, ale nie przyznaje mu żadnych przywilejów.
.SS "Zbiór przywilejów ograniczających"
Zbiór przywilejów ograniczających jest mechanizmem bezpieczeństwa, którego
można użyć do ograniczenia przywilejów, które można zyskać podczas
\fBexecve\fP(2). Zbiór ograniczający jest używany na następujące sposoby:
.IP \[bu] 3
Podczas \fBexecve\fP(2), zbiór przywilejów ograniczających jest sumowany ze
zbiorem przywilejów dozwolonych, a wynik tej operacji jest przypisywany do
zbioru przywilejów dozwolonych wątku. Zbiór przywilejów ograniczających
ogranicza zatem przywileje dozwolone, które mogą być przyznane plikowi
wykonywalnemu.
.IP \[bu]
(Od Linuksa 2.6.25)  Zbiór przywilejów ograniczających działa jako nadzbiór
ograniczający wobec przywilejów, które mogą być dodane przez wątek do
swojego zbioru dziedzicznego za pomocą \fBcapset\fP(2). Oznacza to, że jeśli
przywilej nie występuje w zbiorze ograniczającym, to wątek nie może dodać go
do swoich przywilejów dozwolonych, tym samym nie może zachować tego
przywileju swoim zbiorze dopuszczalnym, gdy wykona \fBexecve\fP(2) na pliku,
który posiada ten przywilej w swoim zbiorze dziedzicznym.
.PP
Proszę zauważyć, że zbiór ograniczający ogranicza przywileje dozwolone, ale
nie ogranicza przywilejów dziedzicznych. Jeśli wątek zachowa przywilej,
niebędący w jego zbiorze ograniczającym, w swoim zbiorze dziedzicznym, to
może wciąż zyskać ten przywilej w swoim zbiorze dozwolonym, wykonując plik,
posiadający ten przywilej w swoim zbiorze dziedzicznym.
.PP
W zależności od wersji jądra, zbiór przywilejów ograniczających jest
atrybutem albo systemowym, albo przypisanym wątkowi.
.PP
\fBZbiór przywilejów ograniczających od Linuksa 2.6.25\fP
.PP
Od Linuksa 2.6.25, \fIzbiór przywilejów ograniczających\fP jest przypisany
wątkowi (opisany niżej systemowy zbiór przywilejów ograniczających już nie
istnieje).
.PP
Zbiór ograniczający jest dziedziczony w momencie wykonania \fBfork\fP(2) od
wątku rodzicielskiego i jest zachowywany przy \fBexecve\fP(2).
.PP
Wątek może usunąć przywileje ze swojego zbioru ograniczającego za pomocą
operacji \fBPR_CAPBSET_DROP\fP \fBprctl\fP(2), zakładając że ma przywilej
\fBCAP_SETPCAP\fP. Po usunięciu przywileju ze zbioru ograniczającego, nie da
się go tam przywrócić. Wątek może sprawdzić czy przywilej znajduje się w
jego zbiorze ograniczającym, za pomocą operacji \fBPR_CAPBSET_READ\fP
\fBprctl\fP(2).
.PP
.\" commit b3a222e52e4d4be77cc4520a57af1a4a0d8222d1
Usuwanie przywilejów ze zbioru ograniczającego jest obsługiwane wyłącznie,
jeśli w jądro wkompilowano przywileje pliku. Przed Linuksem 2.6.33,
przywileje pliku były opcjonalne i konfigurowało się je opcją
\fBCONFIG_SECURITY_FILE_CAPABILITIES\fP. Od Linuksa 2.6.33 opcję tę usunięto, a
przywileje pliku są zawsze częścią jądra. Gdy przywileje pliku wkompilowano
w jądro, proces \fBinit\fP (przodek wszystkich procesów) zaczyna działanie z
pełnym zbiorem ograniczającym. Jeśli przywileje pliku nie są wkompilowane w
jądro, to \fBinit\fP rozpocznie z pełnym zbiorem ograniczającym minus
\fBCAP_SETPCAP\fP, ponieważ przywilej ten zmienia znaczenie, gdy nie występują
przywileje pliku.
.PP
Usunięcie przywileju ze zbioru ograniczającego nie usuwa go ze zbioru
dziedzicznego wątku. Uniemożliwia jednak ponowne dodanie przywileju do
zbioru dziedzicznego wątku w przyszłości.
.PP
\fBZbiór przywilejów ograniczających przed Linuksem 2.6.25\fP
.PP
Przed Linuksem 2.6.25 zbiór przywilejów ograniczających jest atrybutem
systemowym, dotyczącym wszystkich wątków w systemie. Zbiór ograniczający
jest dostępny za pośrednictwem pliku \fI/proc/sys/kernel/cap\-bound\fP (co
mylące, ten parametr maski bitowej jest w \fI/proc/sys/kernel/cap\-bound\fP
prezentowany jako liczba dziesiętna ze znakiem).
.PP
Tylko proces \fBinit\fP może ustawić przywileje w zbiorze przywilejów
ograniczających, natomiast superużytkownik (precyzyjniej: proces z
przywilejem \fBCAP_SYS_MODULE\fP) może jedynie usunąć przywileje z tego zbioru.
.PP
W standardowym systemie, maska zbioru przywilejów ograniczających zawsze
prowadzi do usunięcia przywileju \fBCAP_SETPCAP\fP. Aby usunąć to ograniczenie
(niebezpieczne!), należy zmodyfikować definicję \fBCAP_INIT_EFF_SET\fP w
\fIinclude/linux/capability.h\fP i przebudować jądro.
.PP
.\"
.\"
.\"
Funkcję systemowego zbioru przywilejów ograniczających dodano w jądrze Linux
2.2.11.
.SS "Wpływ zmian identyfikatora użytkownika na przywileje"
Aby zachować tradycyjną semantykę przejścia pomiędzy identyfikatorami
użytkowników równymi i różnymi od 0, jądro dokonuje następujących zmian w
zbiorach przywilejów wątku przy zmianach następujących identyfikatorów
użytkownika (za pomocą \fBsetuid\fP(2), \fBsetresuid\fP(2) lub podobnych):
rzeczywistego, efektywnego, zbioru zapisanego oraz systemu plików:
.IP \[bu] 3
Jeśli jeden lub kilka z identyfikatorów: rzeczywistego, efektywnego lub
zbioru zapisanego wynosił uprzednio 0, a wynikiem zmian identyfikatorów
użytkowników jest wartość niezerowa wszystkich tych identyfikatorów, to ze
zbioru przywilejów: dozwolonego, efektywnego i tła usuwane są wszystkie
przywileje.
.IP \[bu]
Jeśli efektywny identyfikator użytkownika zmienił się z 0 na wartość
niezerową, to ze zbioru efektywnego usuwane są wszystkie przywileje.
.IP \[bu]
Jeśli efektywny identyfikator użytkownika zmienił się z wartości niezerowej
na 0, to zbiór dozwolony jest kopiowany do zbioru efektywnego.
.IP \[bu]
Jeśli identyfikator użytkownika systemu plików zmienił się z 0 na wartość
niezerową (zob. \fBsetfsuid\fP(2)), to następujące przywileje są usuwane ze
zbioru efektywnego: \fBCAP_CHOWN\fP, \fBCAP_DAC_OVERRIDE\fP,
\fBCAP_DAC_READ_SEARCH\fP, \fBCAP_FOWNER\fP, \fBCAP_FSETID\fP, \fBCAP_LINUX_IMMUTABLE\fP
(od Linuksa 2.6.30), \fBCAP_MAC_OVERRIDE\fP i \fBCAP_MKNOD\fP (od Linuksa
2.6.30). Jeśli UID systemu plików zmieni się z wartości niezerowej na 0, to
przywileje włączone w zbiorze dozwolonym są włączane w zbiorze efektywnym.
.PP
.\"
Jeśli wątek posiadający wartość równą 0 dla jednego lub kilku swoich
identyfikatorów użytkownika chce zapobiec usunięciu swojego zbioru
przywilejów dozwolonych przy zresetowaniu wszystkich swoich wartości
identyfikatorów użytkownika na wartości niezerowe, może to uczynić za pomocą
znacznika securebits \fBSECBIT_KEEP_CAPS\fP opisanego niżej.
.SS "Programowe dostosowywanie zbioru przywilejów"
Wątek może pobierać i zmieniać swoje zbiory przywilejów: dozwolonych,
efektywnych i dziedzicznych za pomocą wywołań systemowych \fBcapget\fP(2) i
\fBcapset\fP(2). Zaleca się jednak stosowanie do tego celu \fBcap_get_proc\fP(3) i
\fBcap_set_proc\fP(3) z pakietu \fIlibcap\fP. Zmiany zbiorów przywilejów wątku
rządzą się następującymi prawami:
.IP \[bu] 3
Jeśli wywołujący nie posiada przywileju \fBCAP_SETPCAP\fP, to nowy zbiór
dziedziczny musi być podzbiorem kombinacji istniejących zbiorów:
dziedzicznego i dozwolonego.
.IP \[bu]
(Od Linuksa 2.6.25)  Nowy zbiór dziedziczny musi być podzbiorem kombinacji
istniejących zbiorów: dziedzicznego i ograniczającego.
.IP \[bu]
Nowy zbiór dozwolony musi być podzbiorem istniejącego zbioru dozwolonego
(tzn. nie da się zyskać nowych przywilejów dozwolonych, których wątek nie
miał do tej pory).
.IP \[bu]
Nowy zbiór efektywny musi być podzbiorem nowego zbioru dozwolonego.
.SS "Znaczniki securebits: tworzenie środowiska korzystającego wyłącznie z przywilejów"
.\" For some background:
.\"       see http://lwn.net/Articles/280279/ and
.\"       http://article.gmane.org/gmane.linux.kernel.lsm/5476/
Począwszy od Linuksa 2.6.26 i jądra, w którym włączono przywileje pliku,
Linux implementuje zbiór znaczników \fIsecurebits\fP przypisanych wątkowi,
które mogą wyłączyć specjalne traktowanie przywilejów identyfikatora
użytkownika równego 0 (tj. \fIroot\fPa). Występują znaczniki:
.TP 
\fBSECBIT_KEEP_CAPS\fP
Ustawienie tego znacznika pozwala wątkowi posiadającemu jeden lub więcej
UID\-ów równych 0 na zachowanie przywilejów w swoim zbiorze dozwolonym, po
przełączeniu wszystkich swoich UID\-ów na wartości niezerowe. Jeśli znacznik
ten nie jest ustawiony, to takie przełączenie powoduje utratę przez wątek
wszystkich przywilejów dozwolonych. Znacznik ta jest zawsze czyszczony przy
wykonaniu \fBexecve\fP(2).
.IP
Proszę zauważyć, że nawet gdy ustawiony jest znacznik \fBSECBIT_KEEP_CAPS\fP,
to przywileje efektywne wątku są usuwane przy przełączeniu swojego
efektywnego UID\-u na wartość niezerową. Jednak gdy wątek ma ten znacznik
ustawiony, jego efektywny UID ma już wartość niezerową, a wątek przełączy
następnie wszystkie inne UID\-y na wartości niezerowe, to przywileje
efektywne wątku nie zostaną usunięte.
.IP
Ustawienie znacznika \fBSECBIT_KEEP_CAPS\fP jest ignorowane, gdy ustawiony jest
znacznik \fBSECBIT_NO_SETUID_FIXUP\fP (ten ostatnia zapewnia nadzbiór efektów
pierwszego znacznika).
.IP
Znacznik zapewnia taką samą funkcjonalność, jak starsza operacja
\fBPR_SET_KEEPCAPS\fP \fBprctl\fP(2).
.TP 
\fBSECBIT_NO_SETUID_FIXUP\fP
Ustawienie tego znacznika powstrzyma jądro przed dostosowywaniem zbiorów
przywilejów procesu: dozwolonych, efektywnych i tła, w sytuacji, gdy UID\-y
wątku: efektywne i systemu plików, są przełączane między wartościami zera i
niezerowymi. Więcej informacji w rozdziale \fIWpływ zmian identyfikatora użytkownika na przywileje\fP powyżej.
.TP 
\fBSECBIT_NOROOT\fP
Jeśli bit ten jest ustawiony, jądro nie przydziela przywilejów gdy
wykonywany jest program z ustawieniem ID roota podczas wykonania (suid),
albo gdy proces z efektywnym lub rzeczywistym UID\-em równym 0 wywołuje
\fBexecve\fP(2).  (zob. rozdział \fIPrzywileje i wykonanie programów przez roota\fP powyżej.)
.TP 
\fBSECBIT_NO_CAP_AMBIENT_RAISE\fP
Ustawienie tego znacznika uniemożliwia podniesienie przywilejów tła za
pomocą operacji \fBPR_CAP_AMBIENT_RAISE\fP \fBprctl\fP(2).
.PP
Każdy z powyższych znaczników \[Bq]podstawowych\[rq] ma towarzyszący mu
znacznik \[Bq]blokujący\[rq]. Ustawienie znacznika \[Bq]blokującego\[rq]
jest nieodwracalne i zapobiega dalszym zmianom odpowiadającemu mu
znacznikowi \[Bq]podstawowemu\[rq]. Istnieją następujące znaczniki
blokujące: \fBSECBIT_KEEP_CAPS_LOCKED\fP, \fBSECBIT_NO_SETUID_FIXUP_LOCKED\fP,
\fBSECBIT_NOROOT_LOCKED\fP i \fBSECBIT_NO_CAP_AMBIENT_RAISE_LOCKED\fP.
.PP
Znaczniki \fIsecurebits\fP można zmodyfikować i pobrać za pomocą operacji
\fBPR_SET_SECUREBITS\fP i \fBPR_GET_SECUREBITS\fP \fBprctl\fP(2). Do modyfikowania
znaczników potrzebny jest przywilej \fBCAP_SETPCAP\fP. Proszę zauważyć, że
stałe \fBSECBIT_*\fP są dostępne tylko wówczas, gdy są umieszczone w pliku
nagłówkowym \fI<linux/securebits.h>\fP.
.PP
Znaczniki \fIsecurebits\fP są dziedziczone przez procesy potomne. Podczas
\fBexecve\fP(2) zachowywane są wszystkie znaczniki poza \fBSECBIT_KEEP_CAPS\fP,
który jest zawsze usuwany.
.PP
Aplikacja może użyć następującego wywołania do zablokowania siebie i
wszystkich swoich potomków w środowisku, w którym jedyną metodą zyskania
przywilejów, jest wykonanie programu z powiązanymi przywilejami plików:
.PP
.in +4n
.EX
prctl(PR_SET_SECUREBITS,
        /* SECBIT_KEEP_CAPS wyłączone */
        SECBIT_KEEP_CAPS_LOCKED |
        SECBIT_NO_SETUID_FIXUP |
        SECBIT_NO_SETUID_FIXUP_LOCKED |
        SECBIT_NOROOT |
        SECBIT_NOROOT_LOCKED);
        /* Ustawienie/zablokowanie SECBIT_NO_CAP_AMBIENT_RAISE
           nie jest wymagane */
.EE
.in
.\"
.\"
.SS "Programy z ustawieniem ID roota podczas wykonania (suid) na przestrzeń użytkownika"
Programy z ustawieniem ID roota podczas wykonania (suid), których
identyfikatory użytkownika pasują do identyfikatorów użytkownika, który
utworzył przestrzeń nazw użytkownika, będą miały przyznane przywileje w
zbiorach procesu: dozwolonym i efektywnym, przy wykonywaniu przez dowolny
proces z tej przestrzeni nazw i z każdej potomnej przestrzeni nazw.
.PP
.\"
.\"
Reguły regulujące transformację przywilejów procesu podczas \fBexecve\fP(2) są
identyczne z opisanymi w \fITransformacja przywilejów podczas execve()\fP oraz
\fIPrzywileje i wykonanie programów przez roota\fP powyżej, z jedyną różnicą,
że w drugim z podrozdziałów \[Bq]root\[rq] jest identyfikatorem użytkownika
tworzącego przestrzeń nazw użytkownika.
.SS "Przywileje pliku w przestrzeni nazw"
.\" commit 8db6c34f1dbc8e06aa016a9b829b06902c3e1340
Tradycyjne (tzn. w wersji 2) przywileje pliku wiążą jedynie zbiór masek
przywilejów z binarnym plikiem wykonywalnym. Gdy proces wykonuje plik
binarny z takimi przywilejami, zyskuje powiązane przywileje (w swojej
przestrzeni nazw) według reguł opisanych w rozdziale \fBTransformacja przywilejów podczas execve()\fP powyżej.
.PP
Ponieważ przywileje pliku w wersji 2 przyznają przywileje procesowi
wykonującemu bez względu na przestrzeń nazw, w której on rezyduje, jedynie
procesy uprzywilejowane mogą przypisywać przywileje do pliku. Tu
\[Bq]uprzywilejowany\[rq] oznacza proces, który ma przywilej \fBCAP_SETFCAP\fP
w przestrzeni nazw użytkownika, w której zamontowano system plików (zwykle
pierwotna przestrzeń nazw użytkownika). To ograniczenie czyni przywileje
pliku bezużytecznymi w niektórych zastosowaniach. Przykładowo, w kontenerach
przestrzeni nazw użytkownika przydatna może się okazać możliwość utworzenia
pliku binarnego, który przyznaje przywileje jedynie procesowi wykonywanemu
wewnątrz takiego kontenera, ale nie procesom wykonywanym na zewnątrz
kontenera.
.PP
Linux 4.14 dodał tak zwane przywileje pliku w przestrzeni nazw, w celu
obsługi takich przypadków. Są one zapisywane jako atrybuty rozszerzone
\fIsecurity.capability\fP wersji 3. (tzn. \fBVFS_CAP_REVISION_3\fP). Takie
atrybuty są tworzone automatycznie w okolicznościach opisanych w rozdziale
\fIWersjonowanie atrybutu rozszerzonego przywilejów pliku\fP powyżej. Przy
tworzeniu atrybutu rozszerzonego \fIsecurity.capability\fP w wersji 3., w
atrybucie rozszerzonym jądro zapisze nie tylko maskę przywileju, lecz także
identyfikator użytkownika root w przestrzeni nazw.
.PP
.\"
.\"
Podobnie jak z plikiem binarnym z przywilejami pliku \fBVFS_CAP_REVISION_2\fP,
plik binarny z przywilejami pliku \fBVFS_CAP_REVISION_3\fP przyznaje przywileje
procesowi podczas \fBexecve\fP(). Jednakże przywileje są przyznawane tylko gdy
plik binarny jest wykonywany przez proces rezydujący w przestrzeni nazw
użytkownika, którego identyfikator użytkownika 0 jest przypisany do
identyfikatora użytkownika root zachowywanego w atrybucie rozszerzonym lub
gdy jest wykonywany przez proces rezydujący w potomkach takiej przestrzeni
nazw.
.SS "Interakcja z przestrzeniami nazw użytkowników"
Więcej informacji o interakcji przywilejów i przestrzeni nazw użytkownika
znajduje się w podręczniku \fBuser_namespaces\fP(7).
.SH STANDARDY
Nie istnieją standardy opisujące przywileje, lecz linuksowa implementacja
przywilejów powstała w oparciu o wycofany
.UR https://archive.org\:/details\:/posix_1003.1e\-990310
szkic standardu
POSIX.1e
.UE .
.SH UWAGI
Przy próbie wykonania \fBstrace\fP(1) na plikach binarnych posiadających
przywileje (lub plikach binarnych z ustawieniem ID roota podczas wykonania
(suid)) przydatna może okazać się opcja \fI\-u <nazwa\-użytkownika>\fP. Przykład:
.PP
.in +4n
.EX
$ \fBsudo strace \-o trace.log \-u użytkownik ./mójprywatnyprogram\fP
.EE
.in
.PP
.\" commit 5915eb53861c5776cfec33ca4fcc1fd20d66dd27 removed
.\" CONFIG_SECURITY_CAPABILITIES
W jądrze Linux w wersjach od 2.5.27 do 2.6.26, przywileje były opcjonalną
częścią jądra i mogły był włączane i wyłączane opcją konfiguracji jądra
\fBCONFIG_SECURITY_CAPABILITIES\fP.
.PP
.\" 7b9a7ec565505699f503b4fcf61500dceb36e744
Aby zobaczyć zbiory przywilejów wątku można użyć pliku
\fI/proc/\fPpid\fI/task/TID/status\fP. Plik \fI/proc/\fPpid\fI/status\fP pokazuje zbiory
przywilejów głównego wątku procesu. Przed Linuksem 3.8 w tych zbiorach
pokazywane były jako włączone (1) przywileje nieistniejące. Od Linuksa 3.8,
wszystkie nieistniejące przywileje (powyżej \fBCAP_LAST_CAP\fP) są pokazywane
jako wyłączone (0).
.PP
Pakiet \fIlibcap\fP udostępnia zestaw procedur do ustawiania i pobierania
przywilejów, który jest bardziej komfortowy i mniej narażony na zmiany niż
interfejs udostępniamy przez \fBcapset\fP(2) i \fBcapget\fP(2). Pakiet ten zawiera
również programy \fBsetcap\fP(8) i \fBgetcap\fP(8). Można go znaleźć na stronie
.br
.UR https://git.kernel.org\:/pub\:/scm\:/libs\:/libcap\:/libcap.git\:/refs/
.UE .
.PP
Przed Linuksem 2.6.24, oraz w Linuksie 2.6.24 do 2.6.32 \- jeśli nie włączono
przywilejów, wątek z przywilejem \fBCAP_SETPCAP\fP może zmieniać przywileje
innego wątku. Jest to jednak wyłącznie możliwość teoretyczna, ponieważ wątek
nigdy nie posiada \fBCAP_SETPCAP\fP w żadnym z dwóch poniższych przypadków:
.IP \[bu] 3
W implementacji przed wersją 2.6.25 zbiór przywilejów ograniczających na
poziomie systemu, \fI/proc/sys/kernel/cap\-bound\fP, zawsze maskował przywilej
\fBCAP_SETPCAP\fP usuwając go i nie da się zmienić tego zachowania bez
modyfikacji źródeł jądra i przebudowania jądra.
.IP \[bu]
Jeśli przywileje pliku są wyłączone (tzn. opcja jądra
\fBCONFIG_SECURITY_FILE_CAPABILITIES\fP jest wyłączona), to \fBinit\fP uruchomi
się z przywilejem \fBCAP_SETPCAP\fP usuniętym ze swojego zbioru ograniczającego
przypisanego do procesu, a ten zbiór ograniczający jest następnie
dziedziczony przez wszystkie procesy utworzone w systemie.
.SH "ZOBACZ TAKŻE"
.\" from libcap-ng
.\" from libcap-ng
.\" from libcap-ng
.\" from libcap-ng
\fBcapsh\fP(1), \fBsetpriv\fP(1), \fBprctl\fP(2), \fBsetfsuid\fP(2), \fBcap_clear\fP(3),
\fBcap_copy_ext\fP(3), \fBcap_from_text\fP(3), \fBcap_get_file\fP(3),
\fBcap_get_proc\fP(3), \fBcap_init\fP(3), \fBcapgetp\fP(3), \fBcapsetp\fP(3),
\fBlibcap\fP(3), \fBproc\fP(5), \fBcredentials\fP(7), \fBpthreads\fP(7),
\fBuser_namespaces\fP(7), \fBcaptest\fP(8), \fBfilecap\fP(8), \fBgetcap\fP(8),
\fBgetpcaps\fP(8), \fBnetcap\fP(8), \fBpscap\fP(8), \fBsetcap\fP(8)
.PP
\fIinclude/linux/capability.h\fP w drzewie źródeł jądra Linux
.PP
.SH TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są:
Michał Kułach <michal.kulach@gmail.com>
.
.PP
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach
licencji można uzyskać zapoznając się z
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License w wersji 3
.UE
lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
.PP
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy
dyskusyjnej
.MT manpages-pl-list@lists.sourceforge.net
.ME .
