기록된 내용이 있는지 알고 싶습니다.한계값적중되었습니다(파일 열기 등). 그렇다면 어디에 문서화되어 있으며 무엇을 찾아야 합니까? CentOS 6을 사용하고 있습니다.
답변1
당신은 그것을 사용할 수 있습니다심사모든 중복 사례가 이런 방식으로 표시되는 것은 아니지만 해당 시스템 호출(syscall)의 실패를 기록합니다. 예를 들어
헨크 롱레벨드RLIMIT_RTTIME
이 값을 초과하면 커널이 신호를 보내게 된다고 지적했습니다 .
우리는 사용RLIMIT_NOFILE
한계:
프로세스가 열 수 있는 최대 파일 설명자 수보다 1 큰 값을 지정하십시오. 노력하다(
open
(2),pipe
(2),dup
(2) 등) 이 제한을 초과하면 오류가 발생합니다EMFILE
. (역사적으로 이 제한은RLIMIT_OFILE
BSD에서 명명되었습니다.)
open
따라서 시스템 호출 등을 모니터링해야 합니다 . 그것은매뉴얼 페이지설명하다:
반환 값
open()
,openat()
,creat()
오류가 발생하면 새 파일 설명자를 반환하거나 -1을 반환합니다(이 경우errno
적절하게 설정하세요).실수
open()
,openat()
및creat()
다음 오류로 인해 실패할 수 있습니다.
EMFILE
- 프로세스에 최대 개수의 파일이 열려 있습니다.
open
이는 실패한 시스템 호출을 감사해야 함을 의미합니다 EMFILE
. 매뉴얼 페이지에서는 open
-1을 반환하고 errno
로 설정할 것을 제안 EMFILE
하지만 실제로 일어나는 일은 다음과 같습니다.open
시스템 호출-EMFILE
합계를 반환합니다.glibc 전환하다-1이 되어 *errno
로 설정됩니다 .EMFILE
이제 문제를 해결했으므로 감사 규칙을 추가해 보겠습니다.
[root@h ~]# auditctl -a always,exit -F arch=`uname -m` -S open \
-F uid=ciupicri -F exit=-EMFILE -k "UL-SE"
한계를 테스트해 보겠습니다.
[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'
로그를 확인하십시오.
[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"
...
Red Hat Enterprise Linux 6의 "보안 가이드"에는"시스템 감사"이 주제에 대한 자세한 내용은 여기에서 읽을 수 있습니다.
* 가주셔서 감사합니다Faqie이것을 지적하십시오.
답변2
이에 대해서는 커널 소스 코드를 확인해야 합니다.
예:
Linux 커널의 CPU 타이머(posix-cpu-timers.c) 하드 한계에 도달하면 SIGKILL은 해당 프로세스에만 전송됩니다. 소프트 제한은 초당 한 번씩 SIGXCPU 및 감시 메시지를 트리거합니다.
자세한 내용을 보려면 다른 한도 및/또는 신호를 검색할 수 있습니다.