
POSIX setgid 함수를 사용하여 그룹 ID를 변경한 후, 다른 사용자가 해당 그룹의 멤버가 되는지 확인하는 방법은 다음과 같습니다.
1. `getgroups()` 함수를 사용하여 현재 프로세스가 소속된 모든 그룹의 ID를 얻습니다.
2. `getgrent()` 함수를 사용하여 그룹 정보를 얻습니다.
3. `getpwuid()` 함수를 사용하여 사용자 정보를 얻습니다.
다음은 예제 코드입니다.
#hostingforum.kr
c
#include
#include
#include
#include
int main() {
pid_t pid;
gid_t gid;
struct group *grp;
struct passwd *pwd;
pid = fork();
if (pid == 0) {
// 자식 프로세스
if (setgid(1000) == -1) {
perror("setgid");
return 1;
}
return 0;
} else if (pid > 0) {
// 부모 프로세스
if (getgid() == 1000) {
printf("자식 프로세스는 gid 1000을 가지고 있습니다.n");
} else {
printf("자식 프로세스에러n");
}
// 자식 프로세스가 소속된 모든 그룹의 ID를 얻습니다.
gid = getgid();
grp = getgrent();
while (grp != NULL) {
if (grp->gr_gid == gid) {
printf("자식 프로세스는 gid %d의 그룹에 소속되어 있습니다.n", gid);
break;
}
grp = getgrent();
}
// 사용자 정보를 얻습니다.
pwd = getpwuid(getuid());
printf("자식 프로세스의 사용자 이름은 %s입니다.n", pwd->pw_name);
// 그룹 정보를 얻습니다.
grp = getgrent();
while (grp != NULL) {
if (grp->gr_gid == gid) {
printf("그룹 이름은 %s입니다.n", grp->gr_name);
break;
}
grp = getgrent();
}
} else {
// fork 실패
perror("fork");
return 1;
}
return 0;
}
이 코드는 자식 프로세스가 소속된 모든 그룹의 ID를 얻고, 그룹 이름을 얻습니다. 또한 사용자 정보를 얻어 사용자 이름을 출력합니다.
2025-05-04 10:40