SETGID(2)

이름
setgid - 그룹 식별자(identity)를 설정한다.

사용법
#include <unistd.h>

int setgid(gid_t gid)

설명
setgid는 현재 프로세스의 유효 그룹 ID를 설정한다. 만일 호출한 프로세스가 슈퍼유저라면, 실제 그룹 ID와 저장된(saved) 그룹 ID도 역시 설정된다. 리눅스에서, setgid는 _POSIX_SAVED_IDS 특징를 갖는 POSIX 버전에 맞게 구현된다. 이는 (루트 이외) setgid 프로그램이 해당 그룹의 권한 모두를 버리고, 특권없는 작업을 수행한 뒤, 안전한 방법으로 다시 원래의 유효 그룹 ID로 돌아오도록한다. 만일 사용자가 루트이거나 프로그램이 setgid 루트라면, 각별한 주의가 필요하다. setgid 함수는 호출한 프로세스의 유효 gid를 검사하여 만일 슈퍼유저라면 해당 그룹 ID의 모든 프로세스를 gid로 설정한다. 이후 프로그램은 다시 루트 권한을 얻는 것은 불가능하다.

그래서, 일시적으로 루트 권한을 버리고, 루트가 아닌 그룹의 권한을 갖고 수행된 후 다시 루트 권한을 회복하려하는 setgid-root 프로그램은 setgid를 사용할 수 없다. 이렇게 하기 위해서는 (non-POSIX, BSD) setegid를 사용할 수 있다.

반환값
성공시, 0이 리턴된다. 에러이면, -1이 리턴되며, errno는 적당한 값으로 설정된다.

에러

EPERM
    사용자가 슈퍼 유저가 아니며, uid가 호출한 프로세스의 유효 또는 저장된 사용자 ID와 일치하지 않는다.

호환
SVr4, SVID.

관련 항목
getgid(2), setregid(2), setegid(2)

역자
정강훈 <skyeyes@soback.kornet.net>, 2000년 4월 30일