'포크폭탄'의 안전한 실행

'포크폭탄'의 안전한 실행

우리 모두는 권한이 없는 셸에서 실행될 때에도 호스트가 응답하지 않게 만드는 "포크 폭탄"을 본 적이 있습니다.

경고: 다음 쉘 스크립트를 실행하지 마십시오. 하지 마세요.

:(){ :|:& };:

나도 알아cgroup, 메모리, CPU 소비, I/O 스케줄링 우선순위 등을 제한하기 위해 "컨트롤러"를 할당할 수 있는 Linux 커널 수준 프로세스 그룹화 구조입니다.

이론적으로는 이 제어 메커니즘을 사용하여 사용자가 호스트 시스템을 정지시키지 않고도 자신의 셸에서 포크 폭탄을 실행할 수 있도록 하는 것이 가능해야 합니다.

왜냐면 난 잘 모르거든어떻게포크 폭탄은 리소스를 소비하는데 cgroup을 사용하여 이를 수행하는 방법을 모르겠습니다.

답변1

cgroups개인적으로는 여기가 좀 과한 것 같아요 . 그러나 ulimit시스템 호출로 무언가를 실행할 때마다 다음을 사용하는 경향이 있습니다 fork(습관으로 만드는 나쁜 경험입니다...).

$ ulimit -u 2500
$ ./mypotentiallydeadlyprogram

이러한 방식으로 현재 셸에 대해 2500개의 프로세스 제한을 설정했습니다. 따라서 fork너무 많이 호출하면 결국 호출이 실패하여 시스템이 충돌하는 것을 방지하고 Ctrl+를 세게 누르게 됩니다 C.

내 컴퓨터에서는 2500이 좋은 한계라고 생각하지만, 컴퓨터가 처리할 수 있는 작업과 포크 폭탄을 얼마나 멀리 이동시키려는지에 따라 값을 늘리거나 줄여야 할 수도 있습니다.또한 기계가 생존하려면 무언가를 생산해야 한다는 점을 기억하세요. 기계가 질식하도록 놔두지 마세요. ~/.bashrc나는 사람들이 이것을 자신의 세션에 작성하여 심지어 세션의 기본 배쉬를 제한하는 것을 보았습니다 . 이는 시스템 관리자에게는 매우 즐거운 일이지만 사용자는 로그인 후 정지되는 것에 대해 매우 불만을 나타냅니다.

임시 제한을 설정하는 데 유용 하지만 ulimit, 루트 액세스 권한이 있고 특정 사용자에게 제한을 적용하려는 경우 더 영구적인 제한을 설정할 수 있습니다. 이는 다음을 통해 수행할 수 있습니다 /etc/security/limits.conf.

# <domain>      <type>      <item>      <value>
youruser        soft        nproc       2500
youruser        hard        nproc       2750

위 설정에서 youruser소프트 제한은 2500개 프로세스(최대 2750개)입니다. 이 파일을 사용하면 시스템의 다양한 엔터티(사용자, 그룹...)에 대한 다양한 제한을 설정할 수 있습니다. 구경하다더 많은 정보가 필요하면 해당 설명서를 확인하세요.. 그러나 이는 시스템 전체 구성이므로 이 제한이 적용되지 않습니다.껍질당을 위한 youruser.

그런데 /proc/sys/kernel/pid_max커널이 부여할 수 있는 최대 PID가 포함됩니다. PID는 재사용이 가능하므로 이것이 귀하의 작업과 관련이 있다고 생각할 수도 있습니다.최대 프로세스 수.

관련 정보