Tytułem wstępu

Zastanawiasz się jak ograniczyć samowolkę użytkowników w systemie? Masz dość powolnego działania systemu mimo, że zalogowanych jest tylko 5 użytkowników a maszyna teoretycznie powinna wytrzymać kolejnych minimum 10? Szukasz prostszego sposobu niż jail? Przyjrzyjmy się wbudowanym mechanizmom dostępnym "out-of-box".

Wykorzystane narzędzia

W standardowo zainstalowanym systemie wiele narzędzi korzysta z PAM - Pluggable Authentication Modules [1]. Jednym z takich narzędzi jest /etc/security/limits.conf. Aby z zacząć z niego korzystać w plikach /etc/pam.d/login (i opcjonalnie /etc/pam.d/ssh) musimy odkomentować (lub jeśli nie istnieje to dopisać) linijkę:

session required pam_limits.so

Struktura pliku /etc/security/limits.conf

Limity określa się w pliku /etc/security/limits.conf, którego budowa wygląda następująco:

Kto TypOgraniczenia NazwaOgraniczenie Wartość

Kto może przybierać jedną z trzech wartości

TypOgraniczenia - może przyjąć jedną z wartości:

NazwaOgraniczenia przyjmuje jedną z poniższych wartości:

Uwaga! Jednostką podstawową dla wielkości plików i przestrzeni dyskowej jest KB.

* - Przy ustalaniu limitu na rozmiar pliku czy dostępnej przestrzeni dyskowej należy zwrócić baczną uwagę na już istniejące pliki, i na pliki z katalogu /etc/skel, które kopiowane są podczas tworzenia nowych kont. Ustawienie maksymalnego rozmiaru pliku na 50kb podczas gdy chociaż jeden z plików konfiguracyjnych zajmuje 100k może zablokować możliwość zalogowania się na konto lub błąd podczas tworzenia konta.

Przykłady użycia.

Załóżmy, że nasza maszyna to serwer udostępnia usługi ftp,www oraz konta shellowe. Chcemy ograniczyć użytkownikom z grupy ftp i www rozmiar pliku do 1MB, przydzieloną przestrzeń dyskową do 100MB, oraz zabronić im logowania się przez ssh oraz pozwolić na otwarcie maksymalnie 2 plików.

@ftp   hard   data        102400
@ftp   hard   fsize       1024
@ftp   hard   maxlogins   0
@ftp   hard   nofile      2
@www   hard   data        102400
@www   hard   fsize       1024
@www   hard   maxlogins   0
@www   hard   nofile      2

Dla użytkownikom posiadającym konta shell chcemy pozwolić na maksymalnie 2 równoległe logowania, przydzielimy 1GB przestrzeni dyskowe i 10MB na pojedynczy plik. Dopuścimy równoczesne otwarcie 5 plików, uruchomienie 10 procesów, ograniczymy czas procesora do 15 minut, pozwolimy zająć maksymalnie 30MB pamięci a uruchamiane przez nich procesy będą miały priorytet 10

@shell   hard   data        1048576
@shell   hard   fsize       10240
@shell   hard   maxlogins   2
@shell   hard   nofile      5
@shell   hard   nproc       10
@shell   hard   priority    15
@shell   hard   cpu         15
@shell   hard   memlock     30720

Dodatkowo dla użytkownika janek zniesiemy limit rozmiaru plików, ilości otwartych plików, oraz zwiększymy liczbę logowań, procesów i czas procesora.

janek   hard   data        1048576
janek   -      fsize       10240
janek   hard   maxlogins   5
janek   -      nofile      5
janek   hard   nproc       30
janek   hard   priority    15
janek   hard   cpu         30
janek   hard   memlock     30720

Uwaga: Limity użytkowników są ważniejsze od limitów grup. Powiedzmy, że użytkownik janek z powyższego przykładu należy do grupy shell to jedyne ograniczenia jakie będą go dotyczyć to te poprzedzone jego loginem. W przypadku, gdy grupa ma ustawionych więcej ograniczeń to ustawienia użytkownika nadpisują te powtarzające się.

Niestety nie znalazłem dokładnego opisu (a te które wskazał wujek google bardzo często były sprzeczne lub nie działały) kilku zmiennych dlatego nie opisałem ich. Jak tylko znajdę uaktualnię opis.

Błędy i sugestie proszę zgłaszać na:


Przypisy:

  1. http://pl.wikipedia.org/wiki/Pluggable_Authentication_Modules