proc - pseudosystem plików z informacjami o procesach,
systemie i sysctl
proc jest pseudosystemem plików, który
udostępnia interfejs do struktur danych jądra. Zazwyczaj jest
montowany w katalogu /proc. Zwykle jest montowany automatycznie przez
system, lecz można go zamontować również
ręcznie za pomocą polecenia takiego jak:
mount -t proc proc /proc
Większość plików w systemie
plików proc jest przeznaczonych tylko do odczytu, lecz
niektóre pliki są dostępne do zapisu,
umożliwiając modyfikacje zmiennych jądra.
System plików proc obsługuje
następujące opcje montowania:
- hidepid=n
(od Linuksa 3.3)
- Opcja kontroluje kto może uzyskać dostęp do
informacji w katalogach /proc/pid. Argument n przyjmuje
jedną z następujących wartości:
- 0
- Wszyscy mają dostęp do katalogów /proc/pid.
Jest to tradycyjne zachowanie i domyślne, jeśli nie
użyje się tej opcji montowania.
- 1
- Użytkownicy nie mogą uzyskać dostępu do
plików i podkatalogów w katalogach /proc/pid innych
niż ich własne (same katalogi /proc/pid
pozostają widoczne). Wrażliwe pliki, takie jak
/proc/pid/cmdline i /proc/pid/status są
chronione przed innymi użytkownikami. Dzięki temu
niemożliwe staje się dowiedzenie się, czy
jakiś użytkownik uruchomił konkretny program (tak
długo, jak sam program nie ujawnia tego swoim zachowaniem).
- 2
- Jak w trybie 1, lecz dodatkowo katalogi /proc/pid
przynależne innym użytkownikom pozostają niewidoczne.
Oznacza to, że wpisy /proc/pid nie mogą
dłużej służyć do poznania PID-ów
w systemie. Nie ukrywa to faktu, że proces o określonym PID
istnieje (można się tego dowiedzieć innymi sposobami,
np. poprzez „kill -0 $PID”), ale ukrywa UID i GID procesu,
które w innym przypadku można by było poznać
wykonując stat(2) na katalogu /proc/pid. To znacznie
utrudnia zadanie atakującego polegające na pozyskaniu
informacji o działających procesach (np. odkrycie czy
jakiś demon działa z większymi uprawnieniami, czy
jakiś użytkownik ma uruchomiony jakiś wrażliwy
program, czy inni użytkownicy w ogóle mają coś
uruchomione itd.).
- gid=gid (od
Linuksa 3.3)
- Określa ID grupy, której członkowie są
uprawnieni do dostępu do informacji zablokowanych innym przez
hidepid (tzn. użytkownicy w tej grupie zachowują
się tak, jakby /proc zostało zamontowane z
hidepid=0). Powinno się używać tej grupy,
zamiast innych rozwiązań, takich jak umieszczanie
użytkowników nie-root w pliku sudoers(5).
- subset=pid
(od Linuksa 5.8)
- Pokazuje jedynie określony podzestaw systemu procfs,
ukrywając wszelkie pliki i katalogi głównego poziomu,
które nie są związane z zadaniami.
W katalogu /proc występują
następujące ogólne grupy plików i
podkatalogów:
- Podkatalogi
/proc/pid
- Każdy z tych podkatalogów zawiera pliki i podkatalogi
ujawniające informacje o procesach o określonym
identyfikatorze procesu.
- W każdym z katalogów /proc/pid, znajduje się
podkatalog task, zawierający z kolei podkatalogi w postaci
task/tid, zawierający informacje o każdym z
wątków procesu, gdzie tid jest identyfikatorem
wątku przypisanym przez jądro danego wątkowi.
- Podkatalogi /proc/pid są widoczne przy odpytywaniu za
pomocą getdents(2) (zatem są widoczne gdy
użytkownik użyje ls(1) do przeglądania
zawartości /proc).
- Podkatalogi
/proc/tid
- Każdy z tych podkatalogów zawiera pliki i podkatalogi
ujawniające informacje o wątku, według jego
identyfikatora wątku. Zawartość podkatalogów
jest taka sama, jak odpowiadających im katalogów
/proc/pid/task/tid.
- Podkatalogi /proc/tid nie są widoczne, przy
odczytywaniu katalogu /proc za pomocą getdents(2) (i
co za tym idzie nie są widoczne, przy przeglądaniu
zawartości /proc za pomocą ls(1)).
- /proc/self
- Gdy proces uzyskuje dostęp do tego magicznego dowiązania
symbolicznego, jest ono tłumaczone na jego własny katalog
/proc/pid.
- /proc/thread-self
- Gdy wątek uzyskuje dostęp do tego magicznego
dowiązania symbolicznego, jest ono tłumaczone na jego
własny katalog /proc/self/task/tid.
- /proc/[a-z]*
- Różne inne pliki i podkatalogi w katalogu /proc
ujawniające informacje systemowe.
Szczegółowy opis wszystkich powyższych
pozycji znajduje się w oddzielnych stronach podręcznika
systemowego, których nazwy zaczynają się od
proc_.
Wiele plików zawiera łańcuchy (np.
środowisko czy linia poleceń), które
występują w postaci wewnętrznej, z polami
zakończonymi bajtami NUL ('\0'), Przy sprawdzaniu takich
plików, można się przekonać, że
byłyby czytelniejsze, gdyby do ich odczytu korzystać z
polecenia w następującej postaci:
$ cat file | tr '\000' '\n'
cat(1), dmesg(1), find(1), free(1),
htop(1), init(1), ps(1), pstree(1),
tr(1), uptime(1), chroot(2), mmap(2),
readlink(2), syslog(2), slabinfo(5), sysfs(5),
hier(7), namespaces(7), time(7), arp(8),
hdparm(8), ifconfig(8), lsmod(8), lspci(8),
mount(8), netstat(8), procinfo(8), route(8),
sysctl(8)
Pliki w źródłach jądra Linux:
Documentation/filesystems/proc.rst,
Documentation/admin-guide/sysctl/fs.rst,
Documentation/admin-guide/sysctl/kernel.rst,
Documentation/admin-guide/sysctl/net.rst i
Documentation/admin-guide/sysctl/vm.rst.
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.