¿Cuál es la diferencia entre límites duros y blandos en ulimit?
Para el número de archivos abiertos, tengo un límite flexible de 1024 y un límite rígido de 10240. Es posible ejecutar programas que abren más de 1024 archivos. ¿Para qué es el límite blando?
open-files
ulimit
daniel kullmann
fuente
fuente
ulimit -n
? Intente ejecutar un shell con un valor muy bajo (bash -c 'ulimit -n 4; exec 3>a; exec 4>b; exec 5>c'
). ¿Cuál es la salida?Respuestas:
Un límite rígido solo puede aumentarse por root (cualquier proceso puede reducirlo). Por lo tanto, es útil para la seguridad: un proceso no root no puede sobrepasar un límite estricto. Pero es inconveniente porque un proceso no root no puede tener un límite inferior al de sus hijos.
El proceso puede cambiar un límite flexible en cualquier momento. Por lo tanto, es conveniente siempre que los procesos cooperen, pero no es bueno para la seguridad.
Un caso de uso típico para los límites flexibles es deshabilitar los volcados de núcleo (
ulimit -Sc 0
) mientras se mantiene la opción de habilitarlos para un proceso específico que está depurando ((ulimit -Sc unlimited; myprocess)
).El
ulimit
comando de shell es una envoltura alrededor de lasetrlimit
llamada del sistema, por lo que allí es donde encontrará la documentación definitiva.Tenga en cuenta que algunos sistemas pueden no implementar todos los límites. Específicamente, algunos sistemas no admiten límites por proceso en los descriptores de archivos (Linux sí); si el suyo no lo hace, el comando de shell puede ser un no-op
fuente
ulimit -m
,RLIMIT_RSS
) es un ejemplo de un límite que ya no es efectivo en Linux. Sin embargo, el límite de memoria virtual (ulimit -v
,RLIMIT_AS
) funciona.setrlimit
(en la medida permitida por el límite rígido a menos que se ejecute como root, por supuesto). La mayoría de los programas no tienen un comando que le permita al usuario hacer eso, pero puede intentar conectarse al programa con un depurador y hacer que emita unasetrlimit
llamada, o en Linux puede llamarprlimit
(para lo cual no conozco ningún shell utilidad).prlimit
utilidad de shell.El límite duro es para fines de seguridad. Para un usuario no root, solo puede disminuir el límite rígido desde el límite rígido establecido actualmente; No puede aumentarlo. El usuario root solo puede aumentar el límite rígido (o tal vez con el privilegio sudo, no estoy seguro de eso). Lo que puede hacer un usuario no root es elegir un límite (llamado límite flexible) que puede estar en el rango [0, límite rígido] para sus procesos. Es el límite suave que es visto y tomado en consideración por los procesos.
fuente