본문 바로가기

OS/Linux

#10. Permission(권한)

이번소개에서는 권한에 대해서 소개해드리겠습니다. 권한은 보안측에서 매우 중요한 요소인데요. 파일을 읽어들이거나 옮기거나..디렉토리내부를 살펴 본다던가 이런것이 모두 권한이 있어야만 가능한것들입니다. 


일단 권한의 종류들과 보는법부터 보도록하겠습니다.


권한에는 읽기 : r, 쓰기 : w, 실행(접근) : x, 3가지의 권한이있습니다.

대표적으로 권한은 소유주, 소유그룹 그리고 나머지 이렇게 3분류로 권한이 따로 부여되어있습니다. 일단 각 권한은 어느 역활의 권한인지부터 살표보도록할께요



파일의 경우

읽기(r)권한

cat, more, vim, cp등등 파일의 내용을 읽어들일수 있는 권한

쓰기(w)권한 

cat, echo, vim등등 파일을 수정/변경 할수있는 권한

실행(x)권한

실행 가능여부


디렉토리의 경우

읽기(r)권한

ls, dir등등 내부 내용을 읽어들이는 권한

쓰기(w)권한

mkdir, touch, rm, mv등등 생성/삭제가 가능한 권한

접근(x)권한(디렉토리의 경우 접근권한이라고한다)

접근권한이 없으면 대부분의 명령어가 사용불가능하다.



또한 권한 rwx를 8진법으로 표기하기도 합니다. 

dir                                                               file

r    w    x                                                     r    w    x

4    2    1                                                     4    2    1

총합 7까지 표기가 가능합니다. 예로 들어 r권한과 x권한만 존재한다면 8진법으로 5로 표시가 됩니다. 



먼저 dir1이라는 디렉토리부터 살펴보겠습니다. 맨앞에 d rwx r-x r-x 보시면 d를 제외한 나무자 문자열을 3문자열로 분류해서 보시면됩니다. 먼저 d는 디렉토리를 뜻합니다. 처음 3문자열 rwx는 소유주의 권한을 말해주는 겁니다. 두번째 r-x는 소유그룹의 권한 그리고 마지막 r-x는 나머지사용자의 권한입니다. 그뒤에 root root는 첫번짼 소유주, 두번짼 소유그룹을 뜻합니다.


다시 정리를 하자면 첫번째 디렉토리는 root가 소유주 이며 rwx(모든권한)을 가지고있고 소유그룹도 root이며 읽기와 접근 권한만 가지고 있습니다. 나머지 사용자들은 읽기와 접근권한만을 가지고있네요.



그럼 이제부터 본격적으로 권한을 설정/변경 하는 명령어를 소개 해드리도록 하겠습니다.


1.파일/디렉토리 권한변경

chmod [옵션] [경로]

[옵션]

xxx     첫번째 x: 소유주권한을 8진법으로

   두번째 x:  소유그룹권한을 8진법으로

   세번째 x:  나머지권한을 8진법으로


u/g/o +/- r/w/x

권한을 추가하거나 빼고싶은 권한자를 u(소유주), g(소유그룹), o(나머지) 선택후 추가는 +, 빼려면 - 한후 추가/빼려는 권한 선택


Ex)

소유주 wx권한 빼기

u-wx

소유그룹 x권한추가

g+x





dir1 디렉토리 권한을 바꿔보았습니다. 소유주 말고는 아무도 권한이 없도록 설정해보았습니다. 이렇게 되면 소유주와 슈퍼유저를 제외한 나머지는 dir1디렉토리를 건들수 없게됩니다.



이번엔 소유그룹은 읽기만 가능하게 다시 설정했습니다. 



2.파일/디렉토리 소유주/소유그룹 변경

기본적으로 파일/디렉토리를 생성한 사용자가 해당 파일/디렉토리의 소유주/소유그룹이 되지만 우리가 직접 변경/설정 가능하다


chown [소유주]:[소유그룹] [경로]    (소유그룹은 안써도 무방)


chgrp [소유그룹] [경로]                    (소유그룹만 변경)



dir2의 소유주는 MoVenPick, 소유그룹은 시스템 계정들의 그룹 wheel로 변경



3. SetUID, SetGID, Stricky bit


SetUID

실행파일을 실행할경우 실행하나 사용자가 파일의 소유주 권한을 임시적으로 취득


chmod4xxx [경로](실행 권한이있을경우 x대신 s, 아닐경우 S)

Ex) -rwsrwxrwx




SetGID

setUID와 동일한 기능이지만 소유주 권한 대신 소유그룹 권한 취득


chmod2xxx [경로](실행 권한이있을경우 x대신 s, 아닐경우 S)

Ex) -rwxrwsrwx




Sticky Bit

모든 유저는 sticky bit가 적용된 디렉토리에 파일/디렉토리 생성이 자유롭지만 삭제시 삭제대상의 소유주 또는 슈퍼유저만 가능


chmod1xxx [경로](실행 권한이있을경우 x대신 t, 아닐경우 T)




4.파일/디렉토리 속성 변경

권한 뿐만 아니라 파일/디렉토리에는 속성을 추가/삭제 할수도있습니다.


속성

a                내용추가만 가능(소유주만 가능)

c                압축상태로 저장

d                덤프를 하지않음

i                 변경 불가능상태로 설정 (가장 마니 사용되는 속성)

j                 저널링으로 기록(ext3시스템만 적용)

s                 안전한 쓰기/삭제 기능제공

u                 삭제된 데이터를 debugfs명령어로 복구


명령어

chattr [옵션] [+/-/=] [속성] [경로]


[옵션]

-R    디렉토리의 경우 디렉토리 하위 경로에 생성되는 파일/디렉토리               에 똑같은 속성 부여


[+/-/=]

+        속성추가

-        속성삭제

=        속성들을 초기화


lsattr [경로]        속성확인



dir1에 속성 i를 추가시켜 dir1하위 파일/디렉토리에 똑같은 속성을 추가하도록 했습니다.

test라는 하위 경로의 파일 속성을 보니 i가 추가되어있네요. 그후 test2라는 파일을 dir1디렉토리 하위경로에 생성하려하자...막히는걸 볼수가있습니다.



5.umask

파일/디렉토리 생성시 기본 권한 설정


umask xxx [경로]


xxx

파일 666 - xxx = 생성시 설정되는권한 (단 x가 1보다 클경우만 뺄샘)

파일의경우 실행권한을 기본적으로 주지않기때문에 권한부여가 최대6(rw)이다.


디렉토리 777 - xxx = 생성시 설정되는 권한


Ex)

umask 077

파일생성시 기본권한: 600(rw- --- ---)

디렉토리생성시 기본권한: 700(rwx --- ---)


umask 011

파일생성시 기본권한: 666(rw- rw- rw-)

디렉토리생성시 기본권한: 766(rwx rw- rw-)


*umask만 명령어로 칠시 현재 설정되어있는 umask확인



현재 설정되어있는 umask는 022

이 상태에서 파일과 디렉토리 생성후 권한 확인


파일: 666 - 022 = 644 가 생성시 부여되는 권한

mask1: rw- r-- r-- = 644


디렉토리: 777 - 022 = 755 가 생성시 부여되는 권한

mask2: rwx r-x r-x = 755



이번 소개는 여기서 마치도록 하겠습니다. 권한 하나하나 정확히 기억하셔서 다음 acl을 소개해드릴때도 어려움없이 잘해쳐나가시길 바랄께요 ^^ 읽어주셔서 감사합니다.