이 름
setuid − 사 용 자 identity를 설 정 한 다 .
사 용 법
#include <unistd.h>
int setuid(uid_t uid)
설 명
setuid는 현 재 프 로 세 스 의 유 효 사 용 자 ID를 설 정 한 다 . 호 출 한 프 로 세 스 의 유 효 사 용 자 ID가 루 트 라 면 , 실 제 사 용 자 ID와 저 장 된 (saved) 사 용 자 ID 또 한 설 정 된 다 .
리 눅 스 에 서 , setuid는 _POSIX_SAVED_IDS 특 징 를 갖 는 POSIX 버 전 에 맞 게 구 현 된 다 . 이 는 (루 트 이 외 ) setuid 프 로 그 램 이 해 당 사 용 자 의 권 한 모 두 를 버 리 고 , 특 권 없 는 작 업 을 수 행 한 뒤 , 안 전 한 방 법 으 로 다 시 원 래 의 유 효 사 용 자 ID로 돌 아 오 도 록 한 다 .
만 일 사 용 자 가 루 트 이 거 나 프 로 그 램 이 setuid 루 트 라 면 , 각 별 한 주 의 가 필 요 하 다 . setuid 함 수 는 호 출 한 프 로 세 스 의 유 효 uid를 검 사 하 여 만 일 슈 퍼 유 저 라 면 해 당 사 용 자 ID의 모 든 프 로 세 스 를 uid로 설 정 한 다 . 이 후 프 로 그 램 은 다 시 루 트 권 한 을 얻 는 것 은 불 가 능 하 다 .
그 래 서 , 일 시 적 으 로 루 트 권 한 을 버 리 고 , 루 트 가 아 닌 사 용 자 의 권 한 을 갖 고 수 행 된 후 다 시 루 트 권 한 을 회 복 하 려 하 는 setuid-root 프 로 그 램 은 setuid를 사 용 할 수 없 다 . 이 렇 게 하 기 위 해 서 는 (non-POSIX, BSD) seteuid를 사 용 할 수 있 다 .
반 환 값
성 공 시 , 0이 리 턴 된 다 . 에 러 이 면 , −1이 리 턴 되 며 , errno 는 적 당 한 값 으 로 설 정 된 다 .
에 러
EPERM |
사 용 자 가 슈 퍼 유 저 가 아 니 며 , uid가 호 출 한 프 로 세 스 의 유 효 또 는 저 장 된 사 용 자 ID와 일 치 하 지 않 는 다 . |
호 환
SVr4, SVID, POSIX.1. 실 제 사 용 자 ID, 저 장 된 사 용 자 ID, 유 효 사 용 자 ID 모 두 를 설 정 하 는 4.4BSD 함 수 와 전 혀 호 환 되 지 않 는 다 . SVr4에 서 는 EINVAL 에 러 조 건 을 추 가 적 으 로 기 술 하 고 있 다 .
리 눅 스 -특 징 적 인 사 항
리 눅 스 에 는 파 일 시 스 템 사 용 자 ID의 개 념 이 있 으 며 , 이 는 대 개 유 효 사 용 자 ID와 같 다 . setuid 시 스 템 콜 은 또 한 현 재 프 로 세 스 의 파 일 시 스 템 사 용 자 ID를 설 정 한 다 . setfsuid(2)를 보 아 라 .
만 일 uid가 이 전 유 효 uid와 다 르 다 면 , 프 로 세 스 는 코 어 덤 프 를 하 지 못 한 다 .
관 련 항 목
getuid(2), setreuid(2), seteuid(2), setfsuid(2)
역 자
정 강 훈 <skyeyes [AT] soback.net>, 2000년 4월 27일