암호 관리자 응용 프로그램을 작업 중이며 보안상의 이유로 처리 할 수없는 프로세스를 시작하려고합니다.
그리고 표준 입력에서 읽고 써야하기 때문에이 프로그램이 데몬이되는 것을 원하지 않습니다.
이것을 할 수있는 방법이 있습니까?
암호 관리자 응용 프로그램을 작업 중이며 보안상의 이유로 처리 할 수없는 프로세스를 시작하려고합니다.
그리고 표준 입력에서 읽고 써야하기 때문에이 프로그램이 데몬이되는 것을 원하지 않습니다.
이것을 할 수있는 방법이 있습니까?
답변:
프로세스를 죽일 수 없게 만드는 유일한 방법은 프로세스를 커널 스레드 로 구현하는 것인데, 이는 사소한 것이 아닙니다.
당신은 여전히 그것을 죽일 수 있지만 그것은 OS 종료 담보 손상이 될 것입니다.
SIGNAL_UNKILLABLE
프로세스에 플래그를 설정하는 사용자 정의 커널 모듈을 개발할 수도 있습니다 . 이 플래그는 무조건 강제 종료로부터 보호되는 유일한 사용자 프로세스 인 정규 프로세스 init
(또는 systemd
커널 시작 프로세스)에 대해서만 설정되도록 설계 되었지만 해당 플래그가 정규 프로세스에 존재하는 것을 금지하지는 않습니다.
기술적으로는 프로세스를 불가능하게 만들 수있는 방법이 없습니다.
물론, 루트가 아닌 사용자의 경우 동일한 사용자 ID를 가진 프로세스 만 종료 할 수 있으므로 다른 계정을 만들 수있는 경우 프로세스에 "고유 한"사용자 ID를 사용하면 루트 만 프로세스를 종료 할 수 있습니다.
간단하지만 덜 강력한 솔루션은 프로세스가 가능한 많은 신호를 포착하도록하는 것입니다 (아마도 무시). KILL 신호 (신호 9)를 포착 할 수있는 방법이 없기 때문에 장난감 예제 또는 비 적대적인 환경에만 적합하지만 그렇지 않은 경우에는 킬 (kill)에 의한 살해를 피할 수 있습니다.
마지막으로, 프로세스가 종료되면 다시 생성되도록 준비 할 수 있습니다. 이것은 또한 깨지기 쉽지만 (매우 깨지기 쉽지만) 제거하기가 조금 더 어려워집니다. 이것은 자체 모니터 프로세스를 사용하거나 inittab을 사용하여 수행 할 수 있습니다. 자신이하는 일을 알고있는 적에게는 여러 프로세스를 한 번에 종료하여 쉽게 우회 할 수 있습니다.
inittab
) 모니터 프로세스가 종료 될 수도 있습니다.