프로세스를 종료할 수 있습니다. 하지만 Linux에서 프로세스를 제거하지 않고 프로세스가 다시 호출되는 것을 방지하려면 어떻게 해야 할까요? 예를 들어 프로세스와 연결된 포트를 찾기 위해 netstat와 같은 프로그램을 실행한 다음 이를 종료하면 몇 초 내에 다른 PID로 다시 실행되는 것을 볼 수 있습니다.
답변1
실행 권한 비트를 변경합니다. 루트로서 다음 명령을 사용하십시오:
chmod a-x path_to_process_binary
이는 기본적으로 a
소유자, 그룹 및 기타(= 모두)에 대한 실행 권한을 거부합니다.
이 간단한 방법으로 프로세스가 실행되는 것을 방지할 수 있지만 시스템에서 더 심각한 문제가 발생할 수 있다고 생각합니다.
실제로 직접 실행해야 하는 경우 확인하세요.이 답변.
답변2
어쩌면 너무 많을 수도 있지만 아마도 가장 안전한 접근 방식은 AppArmor 또는 SELINUX를 사용하여 바이너리가 실행되는 것을 방지하는 것입니다. 파일 권한 수정은 바이너리를 제공하는 패키지가 업데이트될 때까지 유효합니다. 그런 다음 업데이트되면 다시 실행 가능하도록 설정됩니다.
반면에 전체 파티션을 보호하여 파티션에서 직접 아무것도 실행할 수 없도록 하려는 경우(예를 들어 아무도 해당 디렉토리에서 바이너리를 압축을 풀거나 실행할 수 없도록 보호하기 위해 /var
) /tmp
" noexec" 옵션 플래그:
root@server: ~ # grep noexec /etc/fstab
/dev/sda6 /tmp ext4 defaults,noexec,nosuid,nodev 1 1
이 방법:
root@server: /tmp # cp /usr/bin/vim .
root@server: /tmp # ./vim
-bash: ./vim: Permission denied
/bin/sh /tmp/myscript.sh
쉘 스크립트는 여전히 . 로 실행될 수 있지만 직접적으로 실행될 수는 없습니다 ./myscript.sh
.
"noexec" 플래그는 취약한 PHP 또는 CGI 사이트에서 바이너리를 다운로드, 컴파일 및 실행하는 것을 기반으로 하는 일부 공격을 피할 수 있으므로 웹 서버에 유용합니다.