root
모든 사용자가 실행하는 모든 프로그램을 종료할 수 있습니다. 사용자가 sudo
등을 사용하지 않고 다른 사용자의 프로그램을 죽일 수 있습니까?
예: 사용자가 실행하는 프로그램을 종료하도록 하는 방법은 무엇입니까 foo
?x
bar
답변1
이것은에서 온 것입니다kill(2)
맨페이지:
프로세스가 신호를 보낼 수 있는 권한을 가지려면 권한이 부여되어야 합니다(Linux에서는 CAP_KILL 기능이 있어야 함). 또는 전송 프로세스의 실제 또는 유효 사용자 ID는 대상의 실제 또는 저장된 세트 사용자 ID와 같아야 합니다. 프로세스. SIGCONT의 경우 송신 프로세스와 수신 프로세스가 동일한 세션에 속해 있으면 충분합니다.
따라서 본질적으로 일반적인 상황에서는 루트가 아닌 경우(그리고 setuid
루트가 되기 위해 sudo나 프로그램을 사용할 수 없는 경우) 다른 사용자의 프로세스를 종료할 수 없습니다.
답변2
루트와 bar는 bar가 소유한 프로세스만 종료할 수 있습니다. sudo/setuid 프로그램은 foo의 권한을 루트의 권한으로 변경합니다.
답변3
자일스의 답변 보기bash가 SIGTERM을 무시하는 이유는 무엇입니까?
우선, 이것은 bash에만 국한되지 않습니다. ATT ksh, dash 및 zsh는 동일한 방식으로 작동합니다. 명령줄 편집 중에 SIGTERM 및 SIGQUIT를 무시합니다. mksh의 경우 종료되지 않지만 SIGINT로 처리됩니다.
ksh 매뉴얼과 bash 매뉴얼은 모두 다음 용어로 SIGTERM을 무시하는 것을 정당화합니다.
so that kill 0 does not kill an interactive shell
Kill 0은 쉘이 위치한 프로세스 그룹의 모든 프로세스를 종료합니다. 간단히 말해서, 프로세스 그룹은 터미널의 포그라운드에서 실행 중이거나 백그라운드에 작업이 있거나 보류 중인 모든 프로세스로 구성됩니다.