Guillaume Fenollar DevOps et SysAdmin Freelance

Guillaume FENOLLAR

Ingénieur Linux/DevOps Indépendant

− Montpellier −

Bridez ou débridez votre système avec ulimit !

Dans un système Linux standard (), chaque processus va se voir assigner des limites variées pour éviter qu'une tant de la normalité vienne mettre en péril la stabilité du système. Voici leur histoire (tum tum!).

Différentes sortes de limites

Les limites sont des niveaux maximum acceptés par le système concernant la gestion des ressources. Il est possible d’afficher ces valeurs actuellement settées pour l’utilisateur courant grâce à la commande:

$ ulimit -a

Ce qui montre un résultat que vous pouvez facilement interpréter:

ulimit

En deuxième colonne, vous avez l’unité de mesure de la limite, et son raccourci, qui nous servira à allouer et afficher des limites spécifiques (cf. chapitre suivant). Les valeurs les plus courantes et importantes sont décrites ci-dessous:

  1. File Size : Il s’agit là de la taille maximale de fichier qu’un utilisateur peut créer. La valeur est exprimée en kB et est bien sûr illimitée par défaut.
  2. Open Files : Le nombre de fichiers qu’un utilisateur peut ouvrir via ses processus. La valeur de 1024 par défaut est parfois dépassée par certaines grosses applications, ce qui mène à un crash sans pitié. C’est un des rares cas où l’ont va plutôt chercher à agrandir la valeur plutôt que de la limiter.
  3. CPU Time : Le temps cpu accordé à l’utilisateur et aux processus qu’il pourra lancer. Celui-ci est compté en secondes. Une fois que ce temps processeur est dépassé, le shell de l’utilisateur est sauvagement fermé via un kill. Pour plus d’infos sur le CPU Time, il y a un grand article de qualité qui en parle ici ! :-P
  4. Max User Processes : Le nombre maximum de processus acceptés simultanément pour un user. Peut être utile si vous êtes très paranoïaque (peut par exemple prévenir les Fork Bomb).
  5. Virtual Memory : Même s’il y a trois valeurs gérant la mémoire allouée, vous pouvez ne penser qu’à celle-ci. Il correspond à l’onglet VIRT dans le tableau de top. Là encore, mon article sur top pourrait vous intéresser.

Comment elles sont allouées

Les limites sont appliquées lors du login par la bibliothèque pam. Par défaut, du moins sur les systèmes debian, on peut trouver dans le fichier /etc/pam.d/login la ligne suivante:

session required pam_limits.so

Ce qui veut dire que les limites seront appliqué à chaque login, via le fichier limits.conf, que l’on aborde dans la prochaine section. Donc par défaut, vous n’avez rien à faire pour les activer, mais si sur un système vous n’arrivez pas à setter les bonnes limites, vous pouvez commencer l’investigation en regardant si un appel à pam_limits.so est bien présent dans les fichiers pam.

Comment les modifier

Le fichier /etc/security/limits.conf permet de gérer les limites. Elles sont séparés en deux groupes, hard et soft. Elles agissent un peu de la même façon en interdisant l’allocation de ressources si celle-ci dépasse la limite. Mais la limite hard peut seulement être modifiée par root, alors que la soft peut être abaissée (vis à vis de la hard) à tout moment. En général, il n’est pas nécessaire de s’embêter à dissocier les deux, le système s’occupe de ça tout seul, je vous encourage donc à utiliser un tiret dans ce champ.

Voici donc un récapitulatif de la manière dont l’ont set les limites dans ce fichier limits.conf

ulimit

Voici les items qui ont le plus de chance de vous être utiles. Certains ne sont pas montrés via la commande “ulimit -a”

fsize →  Taille maximum de fichier pouvant être créé par l'utilisateur, en kB. Équivalent ulimit de file size.
nofile →  Nombre de fichiers ouverts par les processus de l'utilisateur. Équivalent ulimit de open file.
cpu →  CPU time alloué à l'utilisateur. Celui-ci sera bloqué s'il dépasse cette limite. Équivalent ulimit de cpu time.
nproc →  Nombre maximum de processus. Le fork ne sera plus possible si l'utilisateur atteint ce nombre. Équivalent 
  ulimit de max user processes.
priority →  Valeur de nice par défaut allouée aux processus lancés par l'utilisateur. 
  Chez moi, ne fonctionne qu'avec l'utilisateur root.
maxlogins →  Nombre de connexions possibles effectuées par l'utilisateur. 
  Utile si vous êtes du genre à oublier de supprimer les comptes temporaires.