setUid로 더 낮은 권한 수준으로 떨어지는 올바른 방법은 무엇입니까?
문제
나는 C에서 포트 <1024에 묶는 프로그램을 작성하고 있습니다. 그 후에는 뿌리가 아닌 특권에서 실행되기를 원합니다.
나는 setuid ()에게 전화해야한다는 것을 알고 있지만 어떤 주장이 있습니까? UID는 시스템마다 다릅니다.
해결책
당신이 사용할 수있는 getpwnam()
이름으로 UID/GID 사용자를 찾으려면 :
#include <sys/types.h>
#include <unistd.h>
#include <pwd.h>
int changepriv(const char *user) {
struct passwd *pw;
int rv;
pw = getpwnam(user);
if (!pw)
return -1;
rv = setgid(pw->pw_gid);
if (rv == -1)
return -2;
rv = setuid(pw->pw_uid);
if (rv == -1)
return -3;
return 0;
}
다른 팁
당신이 알고 싶은 것보다 더 http://www.eecs.berkeley.edu/~daw/papers/setuid-usenix02.pdf
제휴하지 않습니다 StackOverflow