.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2002 by Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" 6 Aug 2002 - Initial Creation .\" Modified 2003-05-23, Michael Kerrisk, .\" Modified 2004-05-27, Michael Kerrisk, .\" 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 .\" 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 "31 października 2023 r." "Linux man\-pages 6.06" .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). .P .\" 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. .P .\" 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). .P 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. .P 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. .P .\" 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). .P 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. .P 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. .P 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. .P 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. .P 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). .P 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. .P .\" 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: .P .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 .P 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 .P 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. .P \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. .P .\" \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. .P .\" 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). .P 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). .P 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). .P 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: .P .in +4n .EX P'(dozwolony) = P(dziedziczny) | P(ograniczający) \& P'(efektywny) = P'(dozwolony) .EE .in .P 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)). .P .\" .\" 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). .P .\" 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. .P 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. .P W zależności od wersji jądra, zbiór przywilejów ograniczających jest atrybutem albo systemowym, albo przypisanym wątkowi. .P \fBZbiór przywilejów ograniczających od Linuksa 2.6.25\fP .P 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). .P Zbiór ograniczający jest dziedziczony w momencie wykonania \fBfork\fP(2) od wątku rodzicielskiego i jest zachowywany przy \fBexecve\fP(2). .P 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). .P .\" 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. .P 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. .P \fBZbiór przywilejów ograniczających przed Linuksem 2.6.25\fP .P 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). .P 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. .P 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. .P .\" .\" .\" 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. .P .\" 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). .P 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. .P 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\fP. .P 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. .P 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: .P .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. .P .\" .\" 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. .P 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. .P 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. .P .\" .\" 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 \fP. Przykład: .P .in +4n .EX $ \fBsudo strace \-o trace.log \-u użytkownik ./mójprywatnyprogram\fP .EE .in .P .\" 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. .P .\" 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). .P 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 . .P 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) .P \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 . .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 .