리눅스에서 사용자/그룹 ID는 다음과 같이 구성된다.
- 실제 사용자 ID(real), 유효 사용자 ID(effective), 저장된 사용자 ID(saved)
아래와 같이 프로그램에 set-user/group-ID 권한 비트를 켜면 실행시 슈퍼유저 특권을 갖게 된다.
chmod u+s prog : set-user-ID 권한 비트를 켠다
chmod g+s prog : set-group-ID 권한 비트를 켠다
#include <unistd.h>
uid_t getuid(void) : 호출 프로세스의 실제 사용자 ID를 리턴
uid_t geteuid(void) : 호출 프로세스의 유효 사용자 ID를 리턴
int setuid(uid_t uid) : 성공하면 0을 리턴하고, 에러가 발생하면 -1을 리턴
- 호출 프로세스의 유효 사용자 ID를 uid 인자로 주어진 값으로 바꾼다. (특권 프로세스인 경우 real, saved ID 도 변경될 수 있음)
int seteuid(uid_t uid)
- 유효 사용자 ID를 바꾼다. 특권 프로세스는 유효 ID를 어떤 값으로든 바꿀 수 잇고, 0이 아닌 값으로 바꾸면, 특권을 잃게 된다.
int setreuid(uid_t ruid, uid_t euid)
- 실제, 유효 ID를 바꾼다. 둘 중 하나만 바꾸고 싶은 경우 나머지 인자에 -1을 넣어주면 된다.
int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid)
- 호출 프로세스의 실제 사용자 ID, 유효 사용자 ID, 저장된 사용자 ID 값을 세인자에 넣어준다.
int setresuid(uid_t *ruid, uid_t *euid, uid_t *suid)
- 호출 프로세스는 세 가지 사용자 ID의 값을 독립적으로 바꾼다. 바꾸고 싶지 않은 ID에 해당하는 인자는 -1로 지정하면된다.
#include <sys/fsuid.h>
int setfsuid(uid_t fsuid) : 언제나 이전의 파일 시스템 사용자 ID를 리턴한다.
- 프로세스의 파일 시스템 사용자 ID를 fsuid로 지정한 값으로 바꾼다. 위에 함수들은 언제나 파일 시스템 ID도 함께 바꾸므로 파일 시스템 ID만 독립적으로 바꾸려면 이 함수를 사용한다.
'리눅스' 카테고리의 다른 글
[리눅스] vim 설정 (vimrc) (0) | 2015.08.09 |
---|---|
[리눅스] udev, rules.d 사용 (0) | 2015.08.09 |
[리눅스 API] 사용자와 그룹 (0) | 2015.08.05 |
[리눅스 API] 메모리 할당 (0) | 2015.08.03 |
[리눅스] 파일시스템 (0) | 2015.07.31 |
댓글