Quelle est la difference entre hard et soft limits in ulimit?
Pour le nombre de fichiers ouverts, j'ai une limite souple de 1024 et une limite stricte de 10240. Il est possible d'exécuter des programmes ouvrant plus de 1024 fichiers. Quelle est la limite souple pour?
open-files
ulimit
daniel kullmann
la source
la source
ulimit -n
? Essayez de lancer un shell avec une valeur très basse (bash -c 'ulimit -n 4; exec 3>a; exec 4>b; exec 5>c'
). Quelle est la sortie?Réponses:
Une limite stricte ne peut être levée que par root (tout processus peut la réduire). Il est donc utile pour la sécurité: un processus non root ne peut pas outrepasser une limite stricte. Mais il est gênant qu'un processus non root ne puisse avoir une limite inférieure à celle de ses enfants.
Une limite souple peut être modifiée par le processus à tout moment. C'est donc pratique tant que les processus coopèrent, mais cela n'est pas bon pour la sécurité.
Un cas d'utilisation typique des limites logicielles consiste à désactiver les core dumps (
ulimit -Sc 0
) tout en gardant la possibilité de les activer pour un processus spécifique que vous déboguez ((ulimit -Sc unlimited; myprocess)
).La
ulimit
commande shell est un wrapper autour de l'setrlimit
appel système, c'est là que vous trouverez la documentation définitive.Notez que certains systèmes peuvent ne pas implémenter toutes les limites. Plus précisément, certains systèmes ne prennent pas en charge les limites par descripteur de fichier (contrairement à Linux); si le vôtre ne le fait pas, la commande shell peut être un no-op.
la source
ulimit -m
,RLIMIT_RSS
) est un exemple de limite qui n’est plus effective sous Linux. La limite de mémoire virtuelle (ulimit -v
,RLIMIT_AS
) fonctionne cependant.setrlimit
(dans la mesure où la limite stricte le permet, à moins de s'exécuter en tant que racine, bien sûr). La plupart des programmes n'ont pas de commande permettant à l'utilisateur de le faire, mais vous pouvez essayer de le joindre au programme avec un débogueur et de le faire émettre unsetrlimit
appel. Sous Linux, vous pouvez appelerprlimit
(pour lequel je ne connais aucun shell utilitaire).prlimit
utilitaire shell aussi.La limite stricte est pour des raisons de sécurité. Pour un utilisateur non root, il ne peut que réduire la limite stricte par rapport à la limite fixe actuellement définie. il ne peut pas l'augmenter. L'augmentation de la limite stricte ne peut être effectuée que par l'utilisateur root (ou peut-être avec le privilège sudo, pas sûr de cela). Ce qu'un utilisateur non root peut faire, c'est choisir une limite (appelée limite logicielle) qui peut être comprise dans la plage [0, limite stricte] pour ses processus. C'est la limite souple qui est vue et prise en compte par les processus.
la source