포크 폭탄 보호가 작동하지 않음 : 프로세스 수에 제한이 없음


8

방금 시스템이 사용자 당 프로세스 수를 올바르게 제한하지 않아서 사용자가 포크 폭탄을 수행하고 전체 시스템을 충돌시키지 못하게한다는 것을 깨달았습니다.

user@thebe:~$ cat /etc/security/limits.conf | grep user
user        hard    nproc   512
user@thebe:~$ ulimit -u
1024
user@thebe:~$ :(){ :|:& };:
[1] 2559
user@thebe:~$ ht-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
...
Connection to thebe closed by remote host.

이것이 버그입니까? 또는 한계를 무시하는 limits.conf이유는 ulimit -n무엇입니까? 왜 한계를 적용하지 않습니까?

추신 : 나는 프로세스 한계 전에 메모리 한계에 도달했다고 생각하지 않습니다. 이 기계에는 8GB 램이 있으며 포크 폭탄을 떨어 뜨렸을 때 4 % 만 사용했습니다.

편집하다:

나는 이것을 라이브 CD로 재생할 수있었습니다. 그래서 나는 이것이 버그라고 생각합니다. 기본적으로 X11, SSHD 등과 같은 시스템 중요 사항을 포함한 모든 프로세스가 종료됩니다.

모든 사용자가 시스템을 중단시킬 수 있습니다.


-n은 프로세스가 아닌 파일 디스크립터 수입니다. 당신이 원하는ulimit -u
psusi

@psusi, 감사합니다,하지만 같은 결과를 제공합니다 : suser@thebe:~$ ulimit -u 1024
d_inevitable

내가 달릴 때 나는 ulimit -u31325를 얻는다. 나는 달릴 ulimit -u 512때 512가된다. 그 포크 폭탄을 달릴 때, 내 시스템의 나머지는 괜찮다.
psusi

답변:


8

밝혀이 /etc/security/limits.conf작업을 수행하지만 해석되기 전에 재부팅이 필요합니다. 로그 아웃이 충분하지 않습니다.

나는 누군가에게 설정 파일을 제한하는 것이 좋습니다.

user hard nproc 512

교체 user제한하려는 것이 어떤 사용자 이름.

또는 더 나은 :

@group hard nproc 512

group제한하려는 사용자 그룹으로 교체하십시오 .


사용하는 소프트웨어에 따라 단일 사용자 시스템이라도 512보다 많은 프로세스가 필요할 수 있습니다.이를 구현 한 후에도 신비하게 작동하지 않으면 허용하는 실제 프로세스 수를 조정해야합니다.
Zeiss Ikon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.