저는 현재 다른 사용자로 실행해야 하는 데몬 프로세스가 있는 프로젝트를 진행하고 있습니다. 가능하다면 데몬이 루트로 실행되지 않도록 하고 싶습니다. 그러나 나는 이것을 가장 잘 수행하는 방법을 찾으려고 노력하고 있습니다.
참고로 아래의 모든 작업은 현재 Python으로 수행되지만 Python을 사용할 필요는 없습니다.
사용자를 성공적으로 인증할 수 있는 PAM 및 Kerberos Auth(GSSAPI) 프로토타입이 있습니다. 이제 슈퍼유저 데몬을 실행하면 다음을 사용하여 OS를 호출하고 프로세스를 생성할 수 있습니다.
ksu kerbuser -c "/bin/bash authed-process.py"
내가 아는 한, 스푸핑하려면 krbtgt 또는 사용자 비밀번호가 필요하기 때문에 안전합니다.
그래서 제가 고려한 또 다른 사항은 사용자 비밀번호를 Python 사용자 getpass에 저장한 다음 해당 비밀번호를 전달하는 것입니다(이것은 매우 안전하지 않은 솔루션입니다). 나는 그렇게하지 않을 것입니다.
마지막으로 생각하고 있는 것은...kerberos 티켓을 사용하는 경우 "ksu" 명령줄 도구를 사용하여 해당 사용자로 프로세스를 생성할 수 있습니까? 저는 POC 작업을 하고 있는데 여기 누군가가 이 작업을 수행하는 더 좋은 방법이 있을 것이라고 생각합니까? 인증된 사용자로 프로세스를 실행할 수 있는 권한 없는 데몬을 실행하기 위한 표준이 없나요?
이것은 나의 첫 번째 게시물입니다. 따라서 이것이 다른 곳에 더 적합하다고 생각되면 알려 주시기 바랍니다.
건배,
모건
답변1
다른 사람이 답변에 관심이 있다면 ...
이를 달성하는 방법은 전달 가능한 Kerberos 티켓을 사용하는 것 같습니다. 그런 다음 gssapi를 사용하여 티켓을 전달할 수 있으며 서버 측에서는 해당 사용자로 프로세스를 생성하기 위해 질문의 ksu 명령과 함께 티켓을 사용할 수 있습니다.
ksu kerbuser -c "/bin/bash authed-process.py"
이 명령은 캐시에서 사용자의 kerberos 티켓을 찾은 다음 프로세스를 실행합니다. 그러나 권한이 있는(루트) 사용자만 keytab 파일을 볼 수 있으므로 클라이언트-서버 gssapi에 권한이 있어야 합니다.