2

이미 실행중인 프로세스에는 SO_RCVBUFFORCE 소켓 옵션 사용과 같은 권한있는 명령이 필요합니다. 이 프로세스는 일반 사용자 프로세스로 실행 중입니다.실행중인 프로세스에 기능 부여

이 프로세스에 권한/권한을 부여하는 방법은 무엇입니까? 파일 기반 기능 설정은 여전히 ​​꿈입니까?

나는 libcap 패키지에서 /usr/sbin/setpcaps 유틸리티와 cap_set_proc() API를 시도하지만, CAP_SETPCAP 기능은 시스템 (2.6.20 커널과 페도라 4 기반의 레거시 시스템)에 차단, 그래서 기능을 제거/부여 할 수 없습니다 그 때 그때 그때 각자 과정을 위해.

임시 루트 uid를 해당 프로세스에 설정하는 것에 대한 생각은 있지만 이미 실행중인 외부 프로세스의 유효 UID를 변경하는 방법이 있습니까? setuid()/seteuid()/... 함수는 현재 프로세스 (누가 함수를 호출하는지)를 수정할 수 있습니다.

답변

1

수 없습니다. 보안 기능 배후 기능 (오히려 "허용 된 기능 집합")은 결코 추가되지 않은 프로세스에 의해 삭제 될 수 있다는 것입니다.

기능이 프로세스의 부모로부터 올바르게 상속되도록 아키텍처에서 설정할 수없는 경우 파일 디스크립터 전달을 사용하여 별도의 프로세스에서 setsocktopt() 호출을 시도 할 수 있습니다. 즉, 필요한 권한 수준에서 실행되는 "sockopt 데몬"을 설정하고 새 소켓으로 연결하고 sendmsg()를 사용하여 파일 설명자를 전달한 다음 필요한 호출을 수행하게하십시오. 이것은 못생긴 API이며 솔루션은 불필요하게 복잡합니다. 그러나 앱의 시작 및 초기화 구조를 다시 설계하는 것이 더 바람직 할 수 있습니다.

+0

CAP_SETPCAP을 사용하는 경우 cap_set_proc() 프로세스에 새 기능을 추가 할 수 있습니다. – CsTamas

+0

나는이 해결책을 지적하면서이 대답을 받아 들인다 : 데몬을 가지고 있고 파일 기술자 전달을 사용하여 소켓을 전달한다. (http://lists.canonical.org/pipermail/kragen-hacks/2002- January/000292.html), fork() + exec()를 사용하여 각 요청에 대해 시작된 유틸리티 (setuid 플래그로 실행 가능)를 소켓 설명자를 상속 받도록하십시오 – CsTamas