Podręcznik FreeBSD
Poprzedni | Rozdział 13. Użytkownicy i podstawy zarządzania kontami | Następny

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

- Procesy uruchomione w trakcie uruchamiania systemu przez `/etc/rc` są przypisane do klasy logowania `daemon`.

- Chociaż plik `/etc/login.conf` dostarczany wraz z systemem jest dobrym źródłem rozsądnych wartości dla większości ograniczeń, jedynie my - administratorzy - możemy wiedzieć, co jest odpowiednie dla naszego systemu. Ustawienie zbyt wysokich limitów może otworzyć nasz system na nadużycia, podczas gdy ustawienie za niskich może utrudnić codzienną pracę.

- Użytkownikom Systemu okien X (X11) powinno prawdopodobnie przyznać się więcej zasobów niż innym użytkownikom. X11 samo z siebie wykorzystuje dużo zasobów systemowych, lecz również zachęca użytkowników do jednoczesnego uruchamiania większej ilości programów.

- Pamiętajmy, że wiele limitów ma zastosowanie do indywidualnych procesów, nie użytkownika jako całości. Przykładowo, ustawienie `openfiles` na 50 oznacza, że każdy proces użytkownika może otworzyć do 50 plików. Tym samym całkowita liczba plików, które może otworzyć użytkownik wynosi wartość `openfiles` pomnożona o wartość `maxproc`. To samo dotyczy konsumpcji pamięci.

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

Poprzedni | Spis treści | Następny
Modyfikacja ustawień kont | Początek rozdziału | Grupy

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