
	                	                 
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