사용자 파일에서 .bashrc
일부 프로세스(창 기반)를 시작했습니다 . 사용자가 이러한 프로세스를 종료하는 것을 방지하고 싶습니다. 일반 사용자가 프로세스를 종료할 수 없도록 프로세스를 슈퍼유저에게 전송하는 방법이 있습니까? 아니면 슈퍼유저가 소유한 일부 프로세스를 시작하는 방법이 있습니까?
이는 사용자가 하나의 창만 열어두는 고도로 통제된 환경입니다. 저는 Ubuntu 12.04를 사용하고 있으며 다른 많은 기능을 비활성화했습니다. 수행 장애가 아닙니다. 하지만 난 그냥 알고 싶어
답변1
다른 사용자로 명령을 시작하는 것은 일반적으로 su, sudo를 사용하거나 실행 파일 권한에서 setuid 비트를 설정하여 수행됩니다.
당신은 그렇습니다아니요해당 사용자에게 모든 권한이 있으므로 꼭 필요한 경우가 아니면 루트로 실행 파일을 실행하려고 합니다. 이러한 프로세스에 권한이 필요하지 않은 경우 가능한 한 적은 권한을 부여하려고 하는 사용자인 "nobody"로 실행되도록 할 수 있습니다.
사용자는 항상 자신의 프로세스를 종료할 수 있는 권한이 있습니다(kill 시스템 호출에 액세스할 수 있는 한). 즉, 유효한 uid가 제공된 프로세스는 항상 해당 프로세스로 실행 중인 프로세스에 신호를 보낼 수 있는 권한이 있습니다. 프로세스. 동일한 유효한 uid입니다.
답변2
정상적인 종료(SIGINT)를 방지하기 위해 프로세스에 트랩을 구축할 수 있습니다. 물론 이것은 SIGKILL(-9)에서는 작동하지 않습니다. 이러한 트랩은 다음과 같습니다(bash).
trap "echo trapped" INT
트랩을 재설정하려면 다음을 사용할 수 있습니다.
trap - INT
답변3
정확히 무엇을 하고 있는지에 따라 다르지만 옵션은 다음과 같습니다.
- 사용자가 다른 사용자로 프로그램을 실행할 수 있습니다. 실행 파일에서 sudo 또는 setuid를 통해 이 작업을 수행할 수 있습니다. 이들 중 하나를 사용하면 사용자의 .bashrc 이외의 다른 것이 프로그램을 시작할 수 있다는 점에 유의하십시오. (참고: sudo와 setuid는 모두 루트가 아닌 사용자일 수 있으며 가능하다면 그래야 합니다)
- 로그인 시스템이 프로세스를 호출하도록 합니다(루트로).앞으로실제로 사용자 로그인이 완료되었습니다. 여기서 장점은 사용자에게 어떤 권한도 부여하지 않고 사용자가 이를 우회할 수 없다는 것입니다(예: .bashrc 편집 또는 삭제, 셸 전환 등). 한 가지 방법은 PAM에 연결하는 것 같습니다
pam_exec
. 가능하다면 실행 파일은 루트 권한을 포기해야 합니다.