포크 폭탄으로부터 우분투를 보호하는 방법


72

누군가가 포크 폭탄에 대해 이야기하는 것을 들었습니다. 조사를 한 결과 사람들이 명령 줄에 입력 할 수있는 이상한 캐릭터에 대한 끔찍한 정보를 발견했으며 결과적으로 컴퓨터에서 나쁜 일을합니다. 나는 내가 이해하지 못하는 명령을 발행하지 않을 것이지만, 어떤 일이 일어날 수 있는지 전혀 모른다.

일부 OS에서는 관리자가 포크 폭탄의 영향을 완화하기 위해 사용자 프로세스에 제한을 둘 수 있다고 들었습니다. 우분투 에서이 보호 기능이 기본적으로 설정되어 있거나 sudo 권한을 가진 사람이 이것을 설정해야합니까? 그렇다면 어떻게?

답변:


73

수정하여 우분투 및 대부분의 다른 Linux 배포판에서 생성 할 수있는 프로세스의 양을 쉽게 제한 할 수 있습니다 /etc/security/limits.conf

sudoedit /etc/security/limits.conf

그런 다음이 줄을 해당 파일의 맨 아래에 추가하십시오.

*    hard     nproc     nnn

어디:

  • hard 재부팅하지 않고 변경할 수 없도록 커널 수준에서 제한을 설정합니다.
  • nproc 사용자 당 최대 프로세스 수입니다.
  • nnn 다음과 같이 시스템에 대해 계산해야하는 숫자입니다.

    ps aux -L | cut --delimiter=" " --fields=1 | sort | uniq --count | sort --numeric-sort | tail --lines=1
    

위의 명령은 쓰레드를 포함하여 모든 사용자에 대한 모든 프로세스를 나열하고 합산하여 가장 많은 프로세스를 가진 사용자 이름을 나열합니다. 안전을 위해 위의 명령을 실행하기 전에 일반적으로 필요한 수의 응용 프로그램을 연 다음 안전을 위해이 수를 두 배로 늘리십시오.

이 제한이 설정되면 재부팅해야하지만 시스템의 루트가 아닌 각 사용자에게 영향을 미칩니다 . 따라서 루트가 아닌 사용자가 포크 폭탄을 실행하면 하드 제한이 적용됩니다.

기본적으로 그룹 및 와일드 카드 제한은 루트 사용자에게 적용되지 않습니다 . root수퍼 유저에게 규칙을 적용하려면 규칙에 리터럴 사용자 이름 을 사용하십시오 .

또한 조만간 다시 시작하지 않으 sudo ulimit -u 800려면 실행중인 세션에만 제한을 두지 만 sudo권한이 있는 포크 폭탄으로 쉽게 우회 할 수 있습니다 !

다시 시작한 후에는 모든 것이 /etc/security/limits.conf사용됩니다.

포크 폭탄에 대한 추가 정보 : 멀웨어 나 끔찍한 것이 아닙니다. 그것들은 일반적으로 두 번 호출되는 스크립트와 같은 기본으로 구성되어 기하 급수적으로 기하 급수적으로 증가합니다. 빠른 속도로 메모리 사용량이 적더라도 사용 가능한 모든 RAM을 빠르게 채우고 시스템이 정지하거나 재부팅됩니다. 저장되지 않은 정보를 잃어 버리는 것만 위험합니다. 나는 악성 폭탄보다 포크 폭탄을 장난으로 분류 할 것입니다.

중요한 알림 :

동작이 98 % 확실하지 않은 경우 명령 행에서 아무 것도 실행하지 않아야합니다. 실행중인 명령을 읽을 수 없으면 수행하지 마십시오. 이것은 읽을 수없는 16 진수 / base64 문자에 이중을 적용하여 모든 종류의 불쾌감을 숨길 수 있습니다. 명령이 확실하지 않은 경우 언제든지 Ubuntu 맨 페이지 에서 해당 작업을 검색 할 수 sudo있으며 루트 사용자로 실행되므로 사용할 때 특히주의 해야합니다.


@MarcoCeppi : 전형적인 Unity 사용자의 숫자는 그리 멀지 않았습니다 : 계산 결과는 현재 내 시스템에서 404입니다 ...
Fabby

1
alias ":(){ :|: & };:"="echo 'No.'"를 들어 내 것과 같은 것을 넣으면 .bashrc모든 로그인이 실행됩니까?
UniversallyUniqueID

더 높은 nproc 한도를 선택하는 데 단점이 있습니까? 현재 프로세스 수를 두 배로 제한하거나 심지어 두 배로 늘릴 수있는 공간이 많지 않은 것처럼 보이며 훨씬 더 높은, 심지어 10,000 이상으로 제한이 여전히 포크 폭탄에 효과적입니까? 각 포크 / 프로세스는 얼마나 많은 램을 소비합니까? 더 보편적 인 RAM 파생 한계가 있습니까?
Xen2050

1

내가 좋아하는 간단한 방법은 별칭이 항상 적용되는 것은 아니지만 별칭을 만드는 것입니다. 위의 답변을 확인하십시오.

alias :="echo No."

지금

$ :(){ :|: & };:
bash: syntax error near unexpected token `('

22
확실히 이것은 일반적인 해결책입니다. 이게 어떻게 멈춰 a(){ a|a & };a? (또는 다른 기능 명?)
cat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.