Limites Utilisateur ?

Lors de l’utilisation d’un serveur Unix, un administrateur peut être amené à devoir gérer le contrôle des ressources systèmes via la commande ulimit.

Définition

Le contrôle des ressources qui est offert par le système est un élément important de la fiabilisation d’un système Unix. Un système qui est correctement configuré ne souffrira pas de déni de services en cas de dysfonctionnement d’un processus, ou encore d’attaques (qu’elles soient voulues ou non) par les utilisateurs (forkbombs notamment).

Celui-ci peut donc adapter les ressources dont il dispose via la commande ulimit, ou l’édition du fichier suivant en fonction des environnements :

  • AIX :/etc/security/limits
  • Solaris :/etc/system
  • Linux:/etc/security/limits.conf

Remarque : Ce fichier est chargé par le module PAM à chaque ouverture de session.

Principe d’utilisation

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 dite souple (limite soft) qui peut être augmentée par l’utilisateur, via la commande ulimit, jusqu’à une limite maximale qualifiée de limite dure (limite hard).
Le système ne dépasse pas la valeur de la limite soft. Si l’utilisateur souhaite repousser cette limite, il devra définir une nouvelle limite soft avec ulimit. Bien entendu, la limite soft est toujours inférieure ou égale à la limite hard. De manière générale, les limites appliquées à un utilisateur sont prioritaires sur celles appliquées à un groupe.

Les ressources gérées

Comme nous l’avons vu précédemment les limites sont fixées dans un fichier. La commande ulimit permet d’en modifier certaines telles que :

  • La taille des fichiers, nombre de fichiers ouverts, le nombre de processus, etc…

A contrario, d’autres limites sont imposées et seulement modifiables via le fichier, telles que :

  • Nombre de login simultanés, le nombre maximum d’utilisateurs connectés, la priorité maximale des processus utilisateur, etc…

Pour plus d’informations concernant l’utilisation des paramètres de la commande ulimit, vous pouvez vous reporter aux documentation suivantes : [AIX] [Solaris] [Linux]

Méthode d’utilisation

De manière générale, passer l’option « S » à ulimit impactera la limite effective (limite soft), et l’option « H » la limite hard (qui correspond à la valeur maximum pouvant être définie par l’utilisateur).

La commande ulimit -a retourne toutes les limites imposées au compte courant (donc les softs) :
root@testhost# ulimit -a
core file size      (blocks, -c) 0
data seg size       (kbytes, -d) unlimited
scheduling priority         (-e) 0
file size           (blocks, -f) unlimited
pending signals             (-i) 15906
max locked memory   (kbytes, -l) 64
max memory size     (kbytes, -m) unlimited
open files                  (-n) 1024
pipe size        (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority          (-r) 0
stack size          (kbytes, -s) 8192
cpu time           (seconds, -t) unlimited
max user processes          (-u) 100
virtual memory      (kbytes, -v) unlimited
file locks                  (-x) unlimited

Remarque : La commande ulimit -Ha retourne la liste des limites maximales pouvant être atteintes.

Les valeurs d’une ressource particulière sont affichées en utilisant les options qui leurs sont associées :
root@testhost# ulimit -u # nombre de processus maximum autorisé :
100
root@testhost# ulimit -Hu # la limite peut être augmentée jusqu'à :
300

Remarque : L’ordre des options à de l’importance.

  • Pour afficher les ulimit d’un user :

root@testhost# ulimit -a
time(seconds)        unlimited
file(blocks)         unlimited
data(kbytes)         524288
stack(kbytes)        131072
memory(kbytes)       unlimited
coredump(blocks)     2097151
nofiles(descriptors) 2000

  • Pour modifier les limites d’un utilisateur :

root@testhost# chuser X =Y Z
Avec :
X = le type de ressource à modifier :
time     -> cpu
file     -> fsize
data     -> data
stack    -> stack
memory   -> rss
coredump -> core
nofiles  -> nofiles
Y = la nouvelle valeur à attribuer :
unlimited -> -1
Z = l'utilisateur à modifier

Remarque : Pour les valeurs stack,data et memory -> la valeur du ulimit est en kbytes alors que celle entrée avec le chuser est en block de 512 bytes. Donc, penser à multiplier la valeur par deux pour obtenir la bonne correspondance.

Lien pour marque-pages : Permaliens.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.