쉘 스크립트는 특정 조건을 충족하는 프로세스를 자동으로 종료합니다.

쉘 스크립트는 특정 조건을 충족하는 프로세스를 자동으로 종료합니다.

실행 시 top여러 프로세스를 표시하는 'perl' 명령의 CPU 사용량이 100%에 가깝습니다.

    PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 21287  simon      15   0  4141  231 5891 S  90.3  0.0  14:27.50 perl
 22545 albert      15   0 12744 1172 8321 S  99.0  0.0  20:00.58 perl
        ...
        ...

lsof -p <pid>악의적인 프로세스인지 추정합니다(일반적으로 파이프라인의 어딘가에서 로컬 포트 ​​>50000을 사용하여 외부 IP 주소에 연결을 시도합니다).

kill -9 <pid>해당 악성 프로세스를 개별적으로 종료하십시오.

그런 다음 위의 작업을 반복하십시오.

이상적으로는 다음 프로세스를 자동으로 종료하고 싶습니다.

  • 위에 표시된 사용자
  • 15분 이상 실행 중임
  • CPU 사용량이 90%를 초과합니다.
  • 아웃바운드 TCP 연결이 있습니다(가능한 경우).

혹시 편리한 스크립트를 가지고 있는 사람이 있나요? 감사해요!

답변1

실제로 편리한 스크립트는 없지만 이러한 악성 프로세스를 종료해도 처음에 발생한 문제가 해결되지는 않습니다. 귀하는 웹 호스트이고 이들은 귀하의 VPS에서 실행되는 광부입니까?

그들을 죽이는 대신에 할 수 있는 일은 "Starve Them"을 사용하는 것입니다.cgroup.

여기에는 CPU 및 네트워크 계정과 이라는 도구가 있습니다 cgclassify. 유연한 계층 구조를 구축할 수 있습니다. CentOS/RHEL에는 좋은 문서가 있습니다.여기.

나는 세부 사항에 대한 전문가는 아니지만 다음과 같은 방법이 가능하다고 생각합니다. CPU/메모리/네트워크에 대한 cgroup을 생성하고 cgclassify 또는 멘션 데몬을 사용하여 사용된 공유를 기반으로 프로세스를 분류합니다. 이는 데몬이 리소스 사용 모니터링을 담당하고 네트워크와 일정량의 CPU 공유를 사용하는 프로세스를 cgroup으로 이동할 수 있음을 의미합니다. 이는 CPU 및 네트워크 액세스를 심각하게 제한하거나 프로세스를 직접 종료합니다(예: 다음과 같은 이유로 인해). 메모리 부족).

프리젠테이션입니다몇 가지 세부 사항.

15분마다 이러한 프로세스를 종료할 때의 문제는 해당 프로세스가 즉시 다시 생성될 수 있고 해당 15분 동안 모든 리소스를 소모한다는 것입니다.

cgroup을 사용하면 특정 보안 바이너리(예: PHP, Apache)를 분류하고 다른 모든 프로세스를 제한할 수 있습니다. 따라서 CPU/네트워크 사용량은 서버에 영향을 주지 않으며 사용자가 작업을 실행할 가치가 없을 정도로 느려집니다. 프로세스가 더 많은 CPU를 사용할수록 속도가 느려지는 방식으로 CPU 공유를 조정할 수도 있습니다. 네트워크 대역폭도 마찬가지입니다. 나가는 네트워크 연결에 대해 1Mbit만 사용하거나 그 이하로 사용자당 모든 프로세스를 제한할 수 있습니다.

cgroup의 계정 데이터만 사용하여 프로세스를 종료할 수도 있습니다.

이 작업을 "즉시" 수행하는 것은 또 다른 문제처럼 보이지만 문제가 지속되면 사용 및 수정을 고려하십시오.ulatencyd또는 귀하의 요구 사항을 충족하는 유사한 도구. 좋은 규칙을 사용하면 문제가 있는 프로세스를 15분 이내에 어느 정도 지속성을 가지고 더 빠르게 처리할 수 있습니다.

관련 정보