프로세스 드 이관을 통해 권한 setuid()
및 setgid()
uid가 / GID가 설정의 그룹 구성원을 상속하지 않는 것.
권한있는 포트를 열려면 루트로 실행해야하는 서버 프로세스가 있습니다. 특정 행 그것은 그 역 이관 후에 비 privilleged UID / GID, 1 - 예를 들어, 사용자의 foo
UID (73). 사용자 foo
는 그룹의 구성원입니다 bar
.
> cat /etc/group | grep bar
bar:x:54:foo
따라서로 로그인하면 다음 특성을 가진 foo
파일 /test.txt
을 읽을 수 있습니다 .
> ls -l /test.txt
-rw-r----- 1 root bar 10 Mar 8 16:22 /test.txt
그러나 std=gnu99
루트를 실행할 때 다음 C 프로그램 (compile ) :
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main (void) {
setgid(73);
setuid(73);
int fd = open("/test.txt", O_RDONLY);
fprintf(stderr,"%d\n", fd);
return 0;
}
항상 권한 거부가보고 됩니다. 나는 이것이 비 로그인 프로세스와 관련이 있다고 생각하지만 권한이 작동하는 방식과 같은 종류의 햄스트링입니다.
1. 서버에 자주 사용되는 SOP인데, 아파치와 함께하는 누군가 의 보고서 를 찾았을 때이 문제를 해결할 방법이 있어야한다고 생각합니다. 아파치가 오디오 그룹에 추가되어 사운드 시스템을 사용할 수 있습니다. 물론 이것은 원래 프로세스가 아닌 포크에서 발생할 수 있지만 실제로는 내 상황에서 동일합니다 (setuid 호출 후 포크되는 하위 프로세스입니다).
setgid(54)
대신 setgid(73)
(에서 /etc/groups
와 같이 그룹 bar
에 gid 54가 있음) 대신 사용 하면 작동합니까?
setuid()
흠 ... 난 당신이 할 수있는 생각, 당신이 그것을 다시 후 ...하지만 seteuid()
...
setuid()
/setgid()
통화를 전환하십시오 .