포크 폭탄을 멈추고 감지하는 방법


14
#include <stdlib.h>
#include <unistd.h>

int main()
{
   while(1)
      fork();
}

이것은 포크 폭탄의 코드입니다.

우리 대학에서는 telnet, 즉 클라이언트 서비스 프로토콜을 통해 연결합니다. 약 100 개의 시스템이 서버에 연결되어 있습니다. 갑자기 서버 속도가 느려지고 얼마 후에 서버가 다운되는 것을 보았습니다. 나는 sombody가 포크 폭탄을 구현했다는 것을 알게되었습니다.

포크 폭탄이 어떤 시스템에서 구현되는지 어떻게 알 수 있습니까? 어떻게 막을 수 있을까요?

한 가지 방법은 단일 사용자가 소유 할 수있는 최대 프로세스 수를 제한하는 것입니다. 중지하고 구현 된 시스템을 알 수있는 방법이 있습니까?


19
텔넷? 진심이야? 당신은 정말 SSH를 사용해야합니다 ...
ThiefMaster



잘 그것은 SO에서 마이그레이션되었지만 하나의 대답은 커널 수준에있을 수 있습니다. 일부 패치는 잠정적으로 완료되었지만 승인되지 않은 것으로 보입니다. 내 요점은 : 그것을 감지하는 방법 : 글쎄, 어떤 시스템이라도 더 이상 시스템을 사용할 수 없다는 것을 알게 될 것이므로 감지 지점은 아마도 핵심 사항이 아닙니다. 복구하는 방법? 현재 답변은 재부팅입니다. 나는 커널에게 하나의 프로세스 (엉망을 정리하려는 프로세스) 만 실행하고 다른 프로세스는 모두 중지하도록 지시하는 방법입니다. 이것은 시스템 콘솔에서만 액세스 할 수있는 기능 일 수 있습니다.
philippe lhardy 2016 년

답변:


16

한 가지 방법은 사용자가 실행할 수있는 프로세스 수를 제한하는 것입니다.

root로 로그인하고이 파일을 편집하여 사용자를 추가하고 한계를 구성하십시오.

# vi /etc/security/limits.conf

이 줄을 파일에 추가

john hard nproc 10

이제 사용자 john은 10 개의 프로세스 만 작성할 수 있습니다.


새 설정을 /etc/security/limits.conf적용 하려면 재부팅해야한다고 생각합니다 .
Dan D.

2
아니요. 그러나 PAM에 의해 적용되므로 새 로그인에만 적용됩니다.
ThiefMaster

14

런닝 포크 폭탄을 멈추기 위해 폭탄의 killall <name>모든 프로세스를 죽일 수 있습니다 . 그러나 포크 폭탄은 일반적으로 시스템에 엄청나게 많은 부하를 발생 시키므로 SSH를 실행하거나 실행하지 못할 수 있습니다. 따라서 재부팅이 필요하거나 적어도 훨씬 빠릅니다.

모든 사용자가 시스템에 자신의 계정을 가지고 있다면 간단히 모든 사람의 홈 디렉토리를 확인하고 실행 파일을 검색 할 수 있습니다. 그는 또한 소스 코드를 업로드 했으므로 너무 힘들지 않아야합니다. 모든 학생의 공유 계정 인 경우 운이 좋지 않습니다. 특히 사용자의 telnet 또는 ssh 세션이 종료 된 후에는 누가 그것을 시작했는지 알 수 없습니다.

그러나 해당 포크 폭탄을 폭발시킨 사용자를 처벌하는 대신 포크 폭탄을 해제하도록 시스템 구성을 수정해야합니다. /etc/security/limits.conf포크 폭탄을 사용하여 사용자 당 프로세스 제한을 설정하여 포크 폭탄이 통제되지 않는 것을 방지 할 수 있습니다.


어떤 시스템에서 나오는지를 감지하는 것이 불가능합니까?
Rajesh M

@ user1670364 : 당신이 무엇을 요구하는지 명확하지 않습니다. "오고있다"는 무슨 뜻입니까? 어떤 사용자가 프로세스를 소유하고 있는지, 다른 것을 알고 싶은지 알 수 있습니까?
David Schwartz

@DavidSchwartz i 어떤 시스템에서 포크 폭탄을 감지 할 수 있습니까?
Rajesh M

@ user1670364 : 실제로 포크 폭탄을 실행하는 시스템을 의미하는 경우 속도가 느립니다. 책임이있는 사용자를 의미하는 경우 분기중인 프로세스를 소유 한 사용자입니다.
David Schwartz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.