proc(5)

NAZWA
proc - pseudosystem plików z informacjami o procesach, systemie i sysctl

OPIS
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.

  Opcje montowania
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.

  Przegląd
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_.

UWAGI
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'

ZOBACZ TAKŻE
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
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: 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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.