![¿Cómo configuro el registro para ulimits?](https://rvso.com/image/38703/%C2%BFC%C3%B3mo%20configuro%20el%20registro%20para%20ulimits%3F.png)
Me preguntaba si se registra algo cuando hay alguno.límitesson afectados (archivos abiertos, etc.). Si es así, ¿dónde se registra y qué debo buscar? Estoy usando CentOS 6.
Respuesta1
Puedes usarauditoríapara registrar los fallos de las llamadas al sistema correspondientes (syscalls), aunque no todos los excesos se manifiestan de esta manera. Por ejemplo como
Henk LangeveldComo se señaló, excederlo RLIMIT_RTTIME
hace que el núcleo envíe una señal.
Tomemos por ejemplo elRLIMIT_NOFILE
límite:
Especifica un valor uno mayor que el número máximo de descriptores de archivo que puede abrir este proceso. Intentos (
open
(2),pipe
(2),dup
(2), etc.) para exceder este límite produce el errorEMFILE
. (Históricamente, este límite se nombrabaRLIMIT_OFILE
en BSD).
Entonces tendrás que monitorear, por ejemplo, la open
llamada al sistema. Espágina de manualdice:
VALOR DEVUELTO
open()
,openat()
ycreat()
devolver el nuevo descriptor de archivo, o -1 si ocurrió un error (en cuyo caso,errno
está configurado apropiadamente).ERRORES
open()
,openat()
ycreat()
puede fallar con los siguientes errores:
EMFILE
- El proceso ya tiene el número máximo de archivos abiertos.
Esto significa que debe auditar las open
llamadas al sistema que fallan EMFILE
. La página de manual sugiere que open
devuelve -1 y se establece errno
en EMFILE
, pero lo que sucede en realidad es que elopen
llamada al sistemadevoluciones -EMFILE
yglibc conviertelo convierte en -1 y lo establece errno
en EMFILE
* .
Ahora que hemos aclarado eso, agreguemos una regla de auditoría:
[root@h ~]# auditctl -a always,exit -F arch=`uname -m` -S open \
-F uid=ciupicri -F exit=-EMFILE -k "UL-SE"
Probemos los límites:
[ciupicri@h ~]$ ulimit -n 10
[ciupicri@h ~]$ python -c 'from __future__ import print_function; f = [(print(i), open("/etc/passwd")) for i in range(10)]'
0
1
2
3
4
5
6
7
Traceback (most recent call last):
File "<string>", line 1, in <module>
IOError: [Errno 24] Too many open files: '/etc/passwd'
Y revisa los registros:
[root@h ~]# ausearch --start recent -k UL-SE
...
time->Wed Jun 25 21:27:37 2014
type=PATH msg=audit(1403720857.418:63): item=0 name="/etc/passwd" nametype=UNK
NOWN
type=CWD msg=audit(1403720857.418:63): cwd="/home/ciupicri"
type=SYSCALL msg=audit(1403720857.418:63): arch=40000003 syscall=5 success=no
exit=-24 a0=8ed72e0 a1=8000 a2=1b6 a3=8f24d11 items=1 ppid=1110 pid=1139 auid=
5000 uid=5000 gid=5000 euid=5000 suid=5000 fsuid=5000 egid=5000 sgid=5000 fsgi
d=5000 tty=pts3 ses=2 comm="python" exe="/usr/bin/python" subj=unconfined_u:un
confined_r:unconfined_t:s0-s0:c0.c1023 key="UL-SE"
...
La "Guía de seguridad" para Red Hat Enterprise Linux 6 tiene una"Auditoría del sistema"Capítulo donde podrás leer más sobre el tema.
* Gracias ir afchepor señalar esto.
Respuesta2
Necesita inspeccionar la fuente del kernel para esto.
Ejemplo:
Los temporizadores de CPU en el kernel de Linux (posix-cpu-timers.c) simplemente enviará un SIGKILL al proceso infractor cuando se alcance el límite estricto. El límite suave activa una SIGXCPU una vez por segundo y un mensaje de vigilancia.
Puede buscar otros límites y/o señales para obtener más detalles.