//user랑 group이랑 같으니 group 관련은 생략
대부분 ruid = euid
euid가 다른 경우 중 하나는 passwd 명령을 위해선 루트권한이 필요하여 이때 euid=0이 된다.
📗예시 - id와 permission
위의 이미지에서 볼 수 있듯이 생성된 a.out의 ruid와 euid는 usr1이고 ugid와 egid는 grp1이다.
fd1 = open(“file1”, O_RDONLY); //usr1의 read -> 성공
fd2 = open(“file2”, O_RDONLY); //gid1의 read -> 성공
fd3 = open(“file3”, O_RDONLY); //실패
fd4 = open(“file4”, O_RDONLY); //usr1의 read -> 성공
fd4 = open(“file5”, O_RDONLY); //실패
$ id
uid = 100(user1) gid = 500 (group1) groups = 500 (group1)
$ ls -l
-rwxr-xr-x 1 user2 group2 0 2월 10 21:44 a.out
$ chmod u+s a.out
$ ls -l
-rwsr-xr-x
#include <unistd.h>
int access(const char *pathname, int amode);
//성공시 0, 실패시 1을 리턴한다.
access() : 접근권한을 확인하는 함수
amode
R_OK | W_OK | X_OK | F_OK |
---|---|---|---|
읽기권한확인 | 쓰기권환확인 | 실행권한확인 | 존재여부확인 |
errno
📗예시 - access 사용예시
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
main()
{
char *filename = "test";
if (access (filename, R_OK) == -1) //읽기권한 확인
{
fprintf (stderr, "User cannot read file %s\n", filename);
exit (1);
}
printf ("%s readable, proceeding\n", filename); //읽기권한이 있으면 출력
}
#include <unistd.h>
int chmod(const char *pathname, mode_t newmode);
//성공시 0, 실패시 -1 반환
if( chmod(pathname, 0644) == -1 )
perror(“call to chmod failed”);
: 파일의 user-id와 group-id의 변경을 가능하게한다.
#include <unistd.h>
int chown(const char *pathname, uid_t owner_id, gid_t group_id);
//성공시 0, 실패시 -1을 반환한다.