Avec la commande Ulimit, Il est possible de définir pour un certain nombre de ressources (nombre de fichiers ouverts, taille des fichiers, nombre de processus instanciés, temps CPU, etc), une limite “souple” (soft limit) qui peut être augmentée par l’utilisateur jusqu’à une limite maximale qualifiée de limite “dure” (hard limit). Cela peut-être très utile pour se prémunir contre des attaques Fork Bomb.
Linux permet de limiter les ressources allouées aux utilisateurs, ou aux groupes d’utilisateurs, via le fichier “/etc/security/limits.conf” chargé par PAM à chaque ouverture de session.
Libre à nous, ensuite d’adapter les ressources dont il dispose à ses besoins via la commande “ulimit”.
Pour voir toutes les valeurs:
ulimit -a
Pour voir la limite Hard de toutes les valeurs:
ulimit -aH
Pour voir le nombre de processus maximum autorisé:
ulimit -u
Pour savoir jusqu’à combien la limite peut être augmentée:
ulimit -Hu
Passer à 200 le nombre de processus autorisés :
ulimit -Su 200
Utiliser la valeur maximale :
ulimit -u $(ulimit -Hu)
Temps UC (secondes): ulimit -t unlimited
Taille de fichier (blocs): ulimit -f unlimited
Taille de mémoire maximale (ko): ulimit -m unlimited
Nombre maximal de processus utilisateur: ulimit -u unlimited
Fichiers ouverts: ulimit -n 8192 (valeur minimale)
Taille de pile (ko): ulimit -s unlimited
Mémoire virtuelle (ko): ulimit -v unlimited
Le fichier “/etc/security/limits.conf” ressemble à ça:
<domain> <type> <item> <valeur>
@starworld soft nproc 100
@starworld hard nproc 200
starmate hard nproc 300
- ligne 1 : les utilisateurs du groupe “starworld” ne pourront pas, par défaut, créer plus de 100 processus.
- ligne 2 : en cas de besoin, les membres du groupe “starworld” pourront monter cette limite à 200 via “ulimit -u 200″.
- ligne 3 : l’utilisateur “starmate” appartient au groupe “starworld”, donc il dispose d’un maximum de 100 processus par défaut, mais, contrairement aux membres de son groupe, il peut augmenter cette limite jusqu’à 300.
Mise en place dans PAM
Le fichier “/etc/security/limits.conf” est chargé par PAM à chaque connexion d’utilisateur. Pour cela, le module “pam_limits.so” est chargé par une ligne du type :
cat /etc/pam.d/login
...
# Sets up user limits according to /etc/security/limits.conf
session required pam_limits.so
...