관리자 비밀번호를 입력하지 않고 루트 프로세스를 종료하는 방법이 있습니까?
수상쩍게 들리기 때문에 내가 왜 이런 짓을 하는지 궁금할 것입니다. 글쎄요, 에이전트의 데몬에 의해 시작된 프로세스만 종료하면 되지만 데몬은 루트로 실행되고 에이전트는 사용자별로 실행됩니다.
답변1
당신은 그것을 조사해야합니다sudo
.
비밀번호 없이 명령을 입력하거나 유사한 명령을 입력하거나 kill
모든 명령에 대해 사용자 비밀번호(루트가 아닌 사용자 비밀번호)를 묻도록 구성할 수 있습니다. 매우 유연합니다.
시스템에 이미 설치되어 설정되어 있을 수 있습니다. 예를 들어 Ubuntu와 OS X의 경우입니다. 그렇지 않은 경우 대부분의 Unixy 시스템에서 작동합니다.
답변2
사용자는 자신의 프로세스만 종료하거나 신호를 보낼 수 있습니다.
루트로 실행되는 데몬에 의해 프로세스가 시작되었다고 말씀하셨습니다. 프로세스가 루트로도 실행되어야 합니까? 그렇지 않은 경우 권한을 포기하고 원하는 사용자로 실행하도록 요청하십시오.
프로세스가 루트로 실행되어야 하는 경우 에이전트가 프로세스를 종료하기 위해 권한을 높일 수 있는 방법을 제공해야 합니다. 이는 setuid 루트 도우미 실행 파일 형식이거나 sudoers
파일의 항목(태그 포함) 일 수 있습니다 NOPASSWD
. sudo 항목의 장점은 사용이 기록된다는 것입니다.
프로세스에 신호를 보내는 원자적 방법은 없습니다. 보내신호예비동기식: 프로세스의 PID를 얻은 다음 해당 프로세스에 신호를 보냈지만 그 동안 해당 프로세스가 종료되고 해당 프로세스 ID가 다른 프로세스에서 재사용되었을 가능성이 있습니다.
종료하려는 프로세스의 상위 프로세스와 관련하여 이를 방지하는 방법이 있지만 복잡합니다. 프로세스 ID는 부모 프로세스가 자식 프로세스가 종료되었음을 확인할 때까지 사라지지 않습니다.좀비 프로세스그때까지 예약됨). 이를 효과적으로 사용하려면 에이전트가 아이를 죽이려고 하지 않을 때까지 지속되어야 한다는 것을 부모가 알아야 합니다.
경쟁 조건에 관심이 없고 pkill name_of_process_to_kill
해당 이름을 가진 프로세스가 있다는 것을 알고 있는 경우 에이전트에 실행 권한을 부여할 수 있습니다. 열려 있는 파일로 프로세스를 식별할 수 있으면 를 사용할 수 있습니다 fuser -k /path/to/file
.
가능하다면 파이프나 소켓에서 종료 요청을 수신하도록 프로세스를 수정하십시오. 필요에 따라 파이프나 소켓에 대한 권한이나 인증을 설정하세요.