13.7. Ograniczanie użytkowników

Jeśli w naszym systemie mamy wielu użytkowników konieczne może się okazać ograniczenie ich możliwości. FreeBSD posiada kilka sposobów na ograniczenie ilość zasobów systemowych, które dana osoba może wykorzystać. Ograniczenia te są podzielone na dwie grupy: udziały dyskowe i limity innych zasobów.

Udziały dyskowe (ang. quota) ograniczają dostępną użytkownikowi przestrzeń na dysku. Umożliwiają również szybkie sprawdzenie stopnia jej wykorzystania bez konieczności każdorazowego przeliczania. Udziały dyskowe szczegółowo omawia Sekcja 17.15.

Pozostałe limity dają możliwość ograniczenia wykorzystania czasu procesora, pamięci i innych zasobów, z których może korzystać użytkownik. Definiuje się je przy wykorzystaniu klas logowania i to właśnie one zostały tutaj opisane.

Klasy logowania określane są w pliku /etc/login.conf. Szczegółowa semantyka wykracza dalece poza ramy tej sekcji. Jej pełen opis znaleźć można w podręczniku systemowym login.conf(5). W tym momencie wystarczy powiedzieć, że każdy użytkownik posiada przypisaną klasę logowania (domyślnie jest to klasa default) przy czym każda klasa logowania dysponuje zestawem uprawnień. Uprawnieniami logowania są pary nazwa=wartość, gdzie nazwa jest identyfikatorem a wartość dowolnym ciągiem przetwarzanym w sposób zależny od nazwy. Konfiguracja klas logowania i uprawnień jest stosunkowo prostym zadaniem i również została opisana na stronach podręcznika systemowego login.conf(5).

Notatka: Normalnie system nie odczytuje konfiguracji bezpośrednio z pliku /etc/login.conf, lecz odczytuje plik bazy danych /etc/login.conf.db, który umożliwia szybsze przeszukiwanie. By wygenerować plik /etc/login.conf.db z /etc/login.conf należy uruchomić następujące polecenie:

# cap_mkdb /etc/login.conf

Limity zasobów różnią się od typowych uprawnień logowania. Po pierwsze, dla każdego limitu istnieje tzw. miękki (aktualny) i twardy limit. Limit miękki może być zmieniany przez użytkownika bądź aplikację, lecz nie może być większy od twardego. Twardy natomiast może być zmniejszony przez użytkownika, lecz nie podwyższony. Po drugie, większość limitów zasobów dotyczy procesów danego użytkownika, nie użytkownika jako całości. Przy czym zauważyć należy, że różnice te wynikają ze względu na odmienne metody zarządzania limitami, nie zaś na implementację struktury uprawnień logowania (np. nie są one na prawdę specjalnym przypadkiem uprawnień logowania).

Zatem, bez dalszych wstępów, zestawione poniżej zostały najczęściej wykorzystywane limity zasobów (opis pozostałych, razem z innymi uprawnieniami logowania, odnaleźć można w podręczniku login.conf(5)).

coredumpsize

Ograniczenie rozmiaru pliku rdzenia generowanego przez program. Jest ono - z oczywistych powodów - podrzędne w stosunku do innych limitów wykorzystania przestrzeni dysku (np. filesize bądź udziałów dyskowych). Niemniej, limit ten jest powszechnie stosowany jako mniej surowa metoda kontroli wykorzystania przestrzeni na dysku: skoro użytkownicy sami nie generują plików rdzenia i często ich nie usuwają, ustawienie tego limitu może uchronić ich od utraty wolnej przestrzeni na dysku gdy duży program (np. emacs) ulegnie awarii.

cputime

Jest to maksymalny czas procesora jaki może pochłaniać proces użytkownika. Procesy przekraczające zostaną zniszczone przez jądro.

Notatka: Jest to ograniczenie ilości wykorzystywanego czasu procesora, nie procent wykorzystania jaki wyświetlany jest w niektórych polach top(1) i ps(1). Ograniczenie tego drugiego, na chwilę pisania tego tekstu, nie jest możliwe i byłoby raczej bezużyteczne: przykładowo kompilator -- pracujący jako prawdopodobnie uzasadnione zadanie -- może bardzo łatwo przez pewien czas zająć prawie 100% procesora.



filesize

Jest to maksymalny rozmiar pliku, który może posiadać użytkownik. W przeciwieństwie do udziałów dyskowych, limit ten rzutuje na wielkość poszczególnych plików, których właścicielem jest użytkownik, nie zaś na wszystkie jako całość.

maxproc

Jest to maksymalna liczba procesów, które użytkownik może uruchomić. Dotyczy to zarówno procesy pierwszoplanowe jak i pracujące w tle. Z oczywistych względów, wartość ta nie może być większa niż ograniczenia systemowe parametru sysctl(8) kern.maxproc. Warto również zwrócić uwagę, iż zbyt niska wartość może utrudnić codzienną pracę: dość często okazuje się być przydatną możliwość zalogowania się w wielu sesjach bądź wykonywania poleceń potokowo. Niektóre zadania, jak np. kompilacja dużego programu, również tworzą wiele procesów (np. make(1), cc(1) i inne preprocesory pośrednie).

memorylocked

Jest to maksymalna wielkość pamięci jakiej proces użytkownika może zablokować w pamięci głównej (np. patrz mlock(2)). Niektóre bardzo istotne dla poprawnego funkcjonowania systemu programy, jak np. amd(8), blokują się w głównej pamięci w taki sposób, że w przypadku problemów nie przykładają się do zniszczenia systemu.

memoryuse

Jest to maksymalna wielkość pamięci, którą proces może w danym czasie wykorzystać. Dotyczy to zarówno pamięci głównej jak i przestrzeni wymiany. Limit ten nie wyłapuje wszystkich potencjalnych sytuacji wymagających ograniczania wykorzystania pamięci, lecz stanowi dobry początek.

openfiles

Jest to maksymalna liczba plików, które proces może otworzyć. We FreeBSD pliki wykorzystywane są również do reprezentacji gniazd i kanałów IPC. Tym samym należy zachować ostrożność przy doborze właściwej wartości, by nie ustawić jej na zbyt niską. Ogólne ograniczenie tej wartości dla całego systemu definiowane jest przez zmienną sysctl(8) kern.maxfiles.

sbsize

Jest to ograniczenie pamięci sieciowej, w tym również mbufs, którą może wykorzystać użytkownik. Limit ten został wprowadzony jako odpowiedź na stary atak DoS polegający na stworzeniu wielu gniazd sieciowych, lecz może również być wykorzystywany jako metoda ograniczenia komunikacji sieciowej.

stacksize

Jest to maksymalny rozmiar, do którego może urosnąć stos procesu. w pamięci. Sam z siebie nie jest on wystarczający by ograniczyć ilość pamięci wykorzystywanej przez program. Powinien być stosowany w parze z innymi limitami.

Jest jeszcze kilka innych kwestii wartych pamiętania przy konfiguracji limitów zasobów. Poniżej zamieszczonych jest kilka ogólnych porad, sugestii i rozmaitych komentarzy.

Więcej informacji o limitach zasobów, klasach logowania i ogólnych uprawnieniach znaleźć można w odpowiednich podręcznikach systemowych: cap_mkdb(1), getrlimit(2), login.conf(5).

Ten i inne dokumenty można pobrać z ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

W przypadku pytań o FreeBSD prosimy przeczytać dostępną dokumentację przed kontaktem z <questions@FreeBSD.org>.
W sprawie zapytań o tę dokumentację prosimy o kontakt z <doc@FreeBSD.org>.