Remind Me What do Permissions mean again?

모든 파일과 디렉토리는 9개의 permisiion bit들의 집합과 type field가 있습니다.

  • r: 파일을 읽는데 필요한 허가
  • w: 파일을 쓰는데 필요한 허가
  • x: 파일을 실행하는 데 필요한 허가

chmod 777

chmod 7 7 7
01 111 111 111
d rwx rwx rwx
1 2 3 4

1. 파일의 타입

2. 소유자 permission

3. 그룹 permission

4. 다른 모든 사람들의 permission

 

mknod는 파일의 타입인 첫 번째 필드를 바꿔줍니다.  chmod는 숫자와 파일을 인자로 받아 permission bit를 수정합니다.

 

파일은 owner를 가집니다. 만약 프로세스가 owner와 같은 user id(또는 루트)를 가진다면 첫 번째의 permission이 적용됩니다. 만약 파일과 같은 그룹이라면 두 번째에 permission bit이 적용됩니다. 그 무엇도 아니라면 마지막 세 번째의 permission bit이 적용됩니다.

 

How do I change the permissions on a file?

파일의 permission을 바꾸기 위해서는 chmod를 사용합니다.(change the file mode bits의 약자)

system call로는 int chmod(const char* path, mode_t mode);가 존재합니다.

shell command에서는 chmod를 사용하는 두 가지 방법이 존재합니다. 한 가지는 8진수를 사용하는 것이고 또 다른 방법은 문자열을 이용하는 것입니다.

$ chmod 644 file1
$ chmod 755 file2
$ chmod 700 file3
$ chmod ugo-w file4
$ chmod o-rx file4

8진수 문자는 각각의 역할에 따른 permission을 의미합니다. owner, group, everyone else를 각각 의미합니다. 각 자리수는 read(4), write(2), execute(1)의 허가된 합을 의미합니다.

 

예를 들어 chmod 775 myfile은.

user는 4+2+1로 read/write/execute가 모두 가능하고

group와 everyone else는 4+1로 read/execute만 가능합니다.

 

How do I read the permission string from ls?

ls에서 permission을 확인하려면 -l옵션을 사용합니다. permission은 drwxrwxrwx의 형태로 출력됩니다. 가장 처음의 문자는 파일 타입을 의미합니다. 첫 번째 문자로 가능한 값은 아래와 같습니다.

  • (-) regular file
  • (d) directory
  • (c) character device file
  • (l) symbolic link
  • (p) pipe
  • (b) block device
  • (s) socket

What is sudo?

sudo를 사용하면 machine의 admin이 될 수 있습니다. sudo는 일시적으로 root로 명령을 실행할 때 사용할 수 있습니다.

$ sudo mount /dev/sda2 /stuff/mydisk
$ sudo adduser fred

How do I change ownership of a file?

chown username filename을 사용해 파일의 ownership을 바꿀 수 있습니다.

How do I set permissions from code?

chmod(const char*path, mode_t mode);

를 사용해 바꿀 수 있습니다.

What are some files 'setuid'? What does this mean?

set-user-ID-on-execution bit은 파일이 동작할 때 관련된 프로세스의 유저를 바꿉니다. 일반적으로 root로 명령을 실행될 필요가 있지만 sudo를 통해 root가 아닌 사용자가 실행할 때 사용됩니다. 이 예로 sudo가 있습니다.

set-group-ID-on-execution은 프로세스가 동작중인 group를 바꿔줍니다.

Why are they useful?

가장 일반적인 사용예로는 프로그램의 동작 중에 root access가 필요한 경우입니다.

 

What permissions does sudo run as?

$ ls -l /usr/bin/sudo
-r-s--x--x  1 root  wheel  327920 Oct 24 09:04 /usr/bin/sudo

's' 비트는 execute and set-uid를 의미합니다. 프로세스의 유효한 userid는 부모 프로세스와 다릅니다. 이 예에서는 root가 될 것입니다.

What's the different between getuid() and geteuid()?

  • getuid는 실제 userid를 반환합니다(root로 로그인했으면 0)
  • geteuid는 effictive userid를 반환합니다(root처럼 행동한다면 0. 즉 setuid flag로 root로 바뀌었을 때도 0)

How do I ensure only privileged user can run my code?

geteuid()를 호출해서 user의 effective permission을 확인합니다. 반환값이 0이라면 프로그램이 root로서 유효하게 동작하고 있음을 나타냅니다.

'Angrave System Programming > File Systems' 카테고리의 다른 글

File System: Files are inodes  (0) 2019.05.08
File System: Introduction  (0) 2019.05.02
Posted by 몰랑&봉봉
,