/proc/sys/fs/ - zmienne jądra odnoszące się
do systemów plików
- /proc/sys/fs/
- Katalog zawierający pliki i podkatalogi do zmiennych jądra
związanych z systemami plików.
- /proc/sys/fs/aio-max-nr i /proc/sys/fs/aio-nr (od Linuksa
2.6.4)
- aio-nr jest sumą bieżącą liczby
zdarzeń określonych przez wywołania
io_setup(2), dla wszystkich aktualnie aktywnych kontekstów
AIO. Jeśli aio-nr osiągnie aio-max-nr, to
io_setup(2) zawiedzie z błędem EAGAIN.
Zwiększenie aio-max-nr nie powoduje alokacji wstępnej
ani zmiany jakichś struktur danych jądra.
- /proc/sys/fs/binfmt_misc
- Dokumentacja plików z tego katalogu znajduje się w
źródłach jądra Linux w pliku
Documentation/admin-guide/binfmt-misc.rst (lub
Documentation/binfmt_misc.txt w starszych jądrach).
- /proc/sys/fs/dentry-state (od Linuksa 2.2)
- Plik zawiera informacje o statusie bufora katalogu (dcache). Zawiera
sześć liczb: nr_dentry, nr_unused,
age_limit (wiek w sekundach), want_pages (strony
żądane przez system) i dwie nieużywane
wartości.
- •
- nr_dentry jest liczbą przydzielonych dentries (wpisów
dcache). To pole jest nieużywane w Linuksie 2.2.
- •
- nr_unused jest liczbą nieużywanych dentries.
- •
- age_limit jest wiekiem w sekundach, po którym wpisy dcache
mogą być przydzielone ponownie, gdy jest zbyt mało
pamięci.
- •
- want_pages jest niezerowa, gdy jądro wywołało
shrink_dcache_pages(), ale dcache nie zostały jeszcze
przycięte.
- /proc/sys/fs/dir-notify-enable
- Plik ten może służyć do
wyłączania lub włączania interfejsu
dnotify opisanego w fcntl(2) dla całego systemu.
Wartość 0 w tym pliku wyłącza interfejs, a
wartość 1 go włącza.
- /proc/sys/fs/dquot-max
- Zawiera maksymalną liczbę buforowanych wpisów kwot
(przydziałów) dyskowych. W niektórych (2.4) systemach
nie występuje. Gdy liczba wolnych zbuforowanych kwot dyskowych jest
bardzo mała, a jest przerażająca liczba jednoczesnych
użytkowników systemu, może istnieć potrzeba
zwiększenia tego ograniczenia.
- /proc/sys/fs/dquot-nr
- Zawiera liczbę przydzielonych wpisów kwot dyskowych oraz
liczbę wolnych wpisów kwot dyskowych.
- /proc/sys/fs/epoll/ (od Linuksa 2.6.28)
- Katalog zawiera plik max_user_watches, którego można
użyć, aby ograniczyć ilość
pamięci jądra używanej przez interfejs epoll.
Więcej szczegółów można
znaleźć w epoll(7).
- /proc/sys/fs/file-max
- Zawiera ogólnosystemowe ograniczenie liczby plików otwartych
przez wszystkie procesy. Wywołania systemowe które
zawiodą przy napotkaniu tych limitów nie powiodą
się z błędem ENFILE. (Zobacz także
setrlimit(2), które może służyć
procesom do ustawiania ograniczenia dla procesu, RLIMIT_NOFILE,
jako liczby plików, które proces może
otworzyć). Gdy otrzymuje się mnóstwo
komunikatów w dzienniku jądra o przekroczeniu liczby
uchwytów plików (opisów otwartego pliku)
(należy szukać komunikatów takich jak „VFS:
file-max limit <liczba> reached”), to można
spróbować zwiększyć tę
wartość:
-
echo 100000 > /proc/sys/fs/file-max
- Procesy uprzywilejowane (CAP_SYS_ADMIN) mogą
przesłonić limit file-max.
- /proc/sys/fs/file-nr
- Jest to plik (tylko do odczytu) zawierający trzy liczby:
liczbę przydzielonych uchwytów plików (tzn.
liczbę opisów otwartego pliku; zob. open(2)),
liczbę wolnych uchwytów plików i maksymalną
liczbę uchwytów plików (tzn. tę samą
wartość co w /proc/sys/fs/file-max). Jeśli
liczba przydzielonych uchwytów plików zbliża
się do maksimów, należy rozważyć
zwiększenie ich. Przed Linuksem 2.6 jądro dynamicznie
przydzielało uchwyty, lecz nie zwalniało ich. Wolne uchwyty
były przechowywane w liście do ponownego przydzielenia,
wartość „wolne uchwyty plików”
wskazywała na rozmiar tej listy. Duża liczba wolnych
uchwytów plików wskazywała, że w
przeszłości był moment dużego użycia
otwartych uchwytów plików. Od Linuksa 2.6 jądro
zwalnia wolne uchwyty plików, a wartość „wolne
uchwyty plików” zawsze wynosi zero.
- /proc/sys/fs/inode-max (obecny jedynie do Linuksa 2.2)
- Ten plik zawiera maksymalną liczbę
i-węzłów w pamięci. Wartość ta
powinna być 3–4 razy większa niż
wartość w file-max, gdyż stdin,
stdout i gniazda sieciowe również potrzebują
i-węzłów, aby można było na nich
operować. Gdy systematycznie brakuje i-węzłów,
istnieje potrzeba zwiększenia tej wartości.
- Od jądra Linux 2.4 nie występuje statyczny limit liczby
i-węzłów, w związku z czym usunięto ten
plik.
- /proc/sys/fs/inode-nr
- Zawiera dwie pierwsze wartości z inode-state.
- /proc/sys/fs/inode-state
- Plik zawiera siedem liczb: nr_inodes, nr_free_inodes,
preshrink i cztery nieużywane wartości
(wynoszące zawsze zero).
- nr_inodes jest liczbą przydzielonych przez system
i-węzłów. nr_free_inodes jest liczbą
wolnych i-węzłów.
- preshrink jest niezerowe, gdy nr_inodes >
inode-max i gdy system musi przyciąć listę
i-węzłów zamiast przydzielić ich
więcej; od Linuksa 2.4 to pole jest wartością -
atrapą (wynosi zawsze zero).
- /proc/sys/fs/inotify/ (od Linuksa 2.6.13)
- Ten katalog zawiera pliki max_queued_events,
max_user_instances i max_user_watches, których
można użyć, aby ograniczyć ilość
pamięci jądra używanej przez interfejs
inotify. Więcej szczegółów można
znaleźć w inotify(7).
- /proc/sys/fs/lease-break-time
- Określa okres ulgi, przez jaki jądro zapewnia procesowi
utrzymanie dzierżawy pliku (fcntl(2)), a po którym
wyśle do tego procesu sygnał zawiadamiający go,
że inny proces oczekuje na otwarcie pliku. Jeśli
utrzymujący dzierżawę nie usunie jej lub nie
ograniczy swoich praw do niej w przeciągu tego czasu, jądro
wymusi zerwanie dzierżawy.
- /proc/sys/fs/leases-enable
- Ten plik może służyć do
ogólnosystemowego włączania lub
wyłączania dzierżaw plików (fcntl(2)).
Gdy plik ten zawiera wartość 0, dzierżawy są
wyłączone. Wartość niezerowa
włącza dzierżawy.
- /proc/sys/fs/mount-max (od Linuksa 4.9)
- Wartość w tym pliku określa maksymalną
liczbę montowań, jakie mogą istnieć w
przestrzeni nazw montowań. Domyślną
wartością w tym pliku jest 100 000.
- /proc/sys/fs/mqueue/ (od Linuksa 2.6.6)
- Ten katalog zawiera pliki msg_max, msgsize_max i
queues_max, kontrolujące zasoby używane przez kolejki
komunikatów POSIX. Szczegółowe informacje
można znaleźć w mq_overview(7).
- /proc/sys/fs/nr_open (od Linuksa 2.6.25)
- Plik ten określa pułap, do którego można
podnieść limit zasobów RLIMIT_NOFILE (zob.
getrlimit(2)). Pułap ten jest wymuszany zarówno na
nieuprzywilejowanych i uprzywilejowanych procesach. Domyślną
wartością w pliku jest 1048576 (przed Linuksem 2.6.25,
pułap RLIMIT_NOFILE był zakodowany na sztywno
i wynosił tyle samo).
- /proc/sys/fs/overflowgid and /proc/sys/fs/overflowuid
- Te pliki umożliwiają zmianę wartości
ustalonego UID-u i GID-u. Wartością domyślną
jest 65534. Niektóre systemy plików wspierają jedynie
16-bitowe UID-y i GID-y, podczas gdy linuksowe UID-y i GID-y są
32-bitowe. Gdy któryś z takich systemów plików
jest zamontowany z możliwością zapisu, to wszystkie
UID-y i GID-y przekraczające 65535 są zastępowane
podanymi tu wartościami przed zapisem na dysk.
- /proc/sys/fs/pipe-max-size (od Linuksa 2.6.35)
- Patrz pipe(7).
- /proc/sys/fs/pipe-user-pages-hard (od Linuksa 4.5)
- Patrz pipe(7).
- /proc/sys/fs/pipe-user-pages-soft (od Linuksa 4.5)
- Patrz pipe(7).
- /proc/sys/fs/protected_fifos (od Linuksa 4.19)
- Wartość w tym pliku jest/może być ustawiona na
jedną z poniższych:
- 0
- Zapisywanie do FIFO jest nieograniczone.
- 1
- Nie zezwala na O_CREAT open(2) na potokach FIFO,
których wywołujący nie jest
właścicielem, w zapisywalnych dla wszystkich katalogach z
bitem lepkości, chyba że właściciel katalogu
jest też właścicielem FIFO.
- 2
- Jak przy wartości 1, lecz ograniczenie dotyczy
również zapisywalnych dla grupy katalogach z bitem
lepkości.
- Powyższe zabezpieczenia mają pomóc
uniknąć sytuacji nieoczekiwanego zapisu do potoku FIFO
kontrolowanego przez atakującego, gdy program chciał jedynie
utworzyć zwykły plik.
- /proc/sys/fs/protected_hardlinks (od Linuksa 3.6)
- Gdy w pliku zapisana jest wartość 0, to w odniesieniu do
tworzenia dowiązań zwykłych (twardych) nie wprowadza
się żadnych ograniczeń (jest to historyczne
zachowanie przed Linuksem 3.6). Gdy wartość wynosi 1, to
dowiązania zwykłe mogą być tworzone do pliku
docelowego jedynie wówczas, gdy spełniony jest jeden z
poniższych warunków:
- •
- Proces wywołujący ma przywilej CAP_FOWNER w swojej
przestrzeni nazw użytkownika, a UID pliku ma przypisanie w tej
przestrzeni nazw.
- •
- UID systemu plików dotyczący procesu tworzącego
dowiązanie pasują do właściciela (UID) pliku
docelowego (zgodnie z opisem w podręczniku credentials(7),
UID systemu plików procesu jest zwykle taki sam jak jego efektywny
UID).
- •
- Wszystkie poniższe warunki zostaną spełnione:
- •
- cel jest zwykłym plikiem,
- •
- plik docelowy nie ma ustawionego bitu set-user-ID,
- •
- plik docelowy nie ma ustawionych obu z bitów set-group-ID i bitu
wykonywalności dla grupy,
- •
- wywołujący ma uprawnienie do odczytu i zapisu pliku
docelowego (albo dzięki uprawnieniom pliku albo ze względu
na posiadane przywileje).
- Domyślną wartością w tym pliku jest 0.
Ustawienie 1 rozwiąże występujące od dawna
problemy z bezpieczeństwem wykorzystujące wyścig
między czasem sprawdzenia a czasem użycia dowiązania
zwykłego, zwykle spotykanych w katalogach dostępnych do
zapisu dla wszystkich (np. /tmp). Częstym sposobem
wykorzystywania tej wady jest skrzyżowanie ograniczeń w
uprawnieniach przy podążaniu za danym dowiązaniem
zwykłym (np. gdy proces root podąża za
dowiązaniem stałym utworzonym przez innego
użytkownika). W systemach bez wydzielonych partycji,
rozwiązuje się w ten sposób również
problem nieautoryzowanych użytkowników
„przypinających” dziurawe pliki z ustawionymi bitami
set-user-ID i set-group-ID wobec aktualizowanych przez administratora a
także dowiązywaniu do plików specjalnych.
- /proc/sys/fs/protected_regular (od Linuksa 4.19)
- Wartość w tym pliku jest/może być ustawiona na
jedną z poniższych:
- 0
- Zapis do zwykłych plików jest nieograniczony
- 1
- Nie zezwala na O_CREAT open(2) na zwykłych plikach,
których wywołujący nie jest
właścicielem, w zapisywalnych dla wszystkich katalogach z
bitem lepkości, chyba że właściciel
zwykłego pliku jest też właścicielem
FIFO.
- 2
- Jak przy wartości 1, lecz ograniczenie dotyczy
również zapisywalnych dla grupy katalogach z bitem
lepkości.
- Intencja utworzenia powyższych zabezpieczeń jest podobna do
protected_fifos, lecz w tym przypadku chodzi o uniknięcie
zapisu do zwykłego pliku kontrolowanego przez atakującego,
gdy program chciał go utworzyć.
- /proc/sys/fs/protected_symlinks (od Linuksa 3.6)
- Gdy w pliku zapisana jest wartość 0, to w odniesieniu do
tworzenia dowiązań symbolicznych nie wprowadza się
żadnych ograniczeń (jest to historyczne zachowanie przed
Linuksem 3.6). Gdy wartość wynosi 1, to dowiązania
symboliczne mogą być tworzone jedynie gdy spełnione
są następujące warunki:
- •
- UID systemu plików dotyczący procesu
podążającego za dowiązaniem pasują do
właściciela (UID) dowiązania symbolicznego (zgodnie z
opisem w podręczniku credentials(7), UID systemu
plików procesu jest zwykle taki sam jak jego efektywny UID),
- •
- dowiązanie nie znajduje się w katalogu dostępnych dla
wszystkich do zapisu z bitem lepkości lub
- •
- dowiązanie symboliczne i katalog w którym się ono
znajduje mają tego samego właściciela (UID)
- Wywołanie systemowe które nie podąży za
dowiązaniem symbolicznym ze względu na powyższe
ograniczenia zwróci w errno błąd
EACCES.
- Domyślną wartością w tym pliku jest 0.
Ustawienie 1 rozwiąże występujące od dawna
problemy z bezpieczeństwem wykorzystujących wyścig
między czasem sprawdzenia a czasem użycia przy uzyskiwaniu
dostępu do dowiązań symbolicznych.
- /proc/sys/fs/suid_dumpable (od Linuksa 2.6.13)
- Wartość w tym pliku jest przypisana do flagi
„dumpable” („zrzucalny”) w sytuacjach
opisanych w prctl(2). W konsekwencji, wartość w tym
pliku określa, czy pliki zrzutów pamięci są
tworzone dla programów mających ustawiony bit set-user-ID
albo chronionych w jakiś inny sposób. Ustawienie
„zrzucalności” wpływa również na
własność plików w katalogu /proc/pid
procesu, jak opisano wyżej.
- Można podać trzy różne wartości
liczbowe:
- 0 (domyślna)
- Jest to tradycyjne zachowanie (sprzed Linuksa 2.6.13). Zrzut
pamięci nie będzie tworzony dla procesu, który
zmienił swoje uprawnienia (wywołując
seteuid(2), setgid(2) lub podobną funkcję albo
gdy program miał ustawiony bit set-user-ID lub set-group-ID) albo
gdy uprawnienia nadane plikowi binarnemu programu zabraniają jego
odczytywania.
- 1 („debug”)
- Jeżeli jest to możliwe, to wszystkie procesy wykonują
zrzut pamięci (powody, dla których proces może mimo
wszystko nie zrzucić pamięci, opisano w podręczniku
core(5)). Właścicielem pliku zrzutu jest
użytkownik, którego uprawnienia do systemu plików ma
proces wykonujący zrzut. Nie są stosowane żadne
mechanizmy bezpieczeństwa. Jest to przeznaczone tylko do
celów debugowania: tryb ten jest niebezpieczny, ponieważ
pozwala użytkownikom nieuprzywilejowanym na sprawdzanie
zawartości pamięci procesów uprzywilejowanych.
- 2 („suidsafe”)
- Zrzut pamięci programu, dla którego w normalnej sytuacji
taki zrzut nie zostałby wykonany (patrz wyżej
„0”), może być odczytany tylko przez
administratora (root). Pozwala to użytkownikowi
usunąć plik ze zrzutem, ale nie pozwala na jego odczytanie.
Z powodów bezpieczeństwa w tym trybie pliki zrzutu nie
nadpisują istniejących plików. Ten tryb jest
odpowiedni, gdy administrator będzie chciał debugować
problemy w naturalnym środowisku.
- Dodatkowo, od Linuksa 3.6, /proc/sys/kernel/core_pattern musi
być absolutną ścieżką lub poleceniem
potokowym (zob. core(5)). Do dziennika jądra zapisane
zostaną ostrzeżenia, jeśli core_pattern nie
będzie się stosowało do tych reguł i nie
utworzy się zrzut pamięci.
- Szczegóły odnośnie wpływu ustawienia
„zrzucalności” procesu na sprawdzanie trybu
dostępu ptrace opisano w podręczniku ptrace(2).
- /proc/sys/fs/super-max
- Plik steruje maksymalną liczbą superbloków, a
więc i maksymalną liczbą systemów
plików, które jądro może zamontować.
Potrzeba zwiększenia wartości super-max
występuje tylko wtedy, gdy chce się zamontować
więcej systemów plików, niż na to pozwala
aktualna wartość super-max.
- /proc/sys/fs/super-nr
- Plik zawiera liczbę obecnie zamontowanych systemów
plików.
Tłumaczenie niniejszej strony podręcznika: Przemek
Borys <pborys@dione.ids.pl>, Robert Luberda <robert@debian.org>
i Michał Kułach <michal.kulach@gmail.com>
Niniejsze tłumaczenie jest wolną
dokumentacją. Bliższe informacje o warunkach licencji
można uzyskać zapoznając się z
GNU General
Public License w wersji 3 lub nowszej. Nie przyjmuje się
ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika
prosimy zgłaszać na adres listy dyskusyjnej
manpages-pl-list@lists.sourceforge.net.