2010년 2월 4일 목요일

소유권, 허가권.

모든 운영체제에서 보안은 매우 중요한 문제이다. 운영체제는 개인의 정보를 저장하는 곳이기에 이러한 개인정보를 다른사람이 쉽게 접근하고 변형, 삭제할수 있다면 정말 심각한 문제가 아닐 수 없다. 리눅스에서는 이러한 보안성을 확립하기 위해서 소유권과 허가권을 기본으로 제공한다.

 

리눅스 시스템은 기본적으로 3가지의 소유권을 지정한다. '자기자신, 그룹, 다른사람들' 이 그것이다. 자기자신이야 설명일 안해도 될것이고 그룹은 시스템 운영에 있어서 사용자들을 특정한 형태나 속성, 집단으로 구성하는 것을 도와준다. 다른사람은 자기자신도 아니고 그룹에 속한 사람도 아닌 모두를 말한다.

 

소유권.

 

리눅스에서는 파일이나 디렉토리에 대한 소유권 정책을 적용하다.

 

[code bash]]$ ls -lh
합계 4.0M
drwx------ 2 tacitus tacitus 4.0K  1월 24 19:28 Desktop
-rw-r--r-- 1 tacitus tacitus  29K  1월 19 22:03 a.png[/code]

 

소유권은 단순하게 한사람에 대한 것만이 아니라 그룹에 관한것도 존재한다. 내가 특정 집단이나 특정한 그룹에 속해있을 경우에는 그 그룹의 소유권 정책을 따를 필요가 있는데 이를 위해서 그룹 소유권이 존재한다. 중간에 'tacitus tacitus'로 보이는 부분이 바로 소유권에 관한 정보를 알려주는 것이다.

 

왼쪽에서부터 '사용자', '그룹' 소유권 순서를 띈다. 그래서, 예를들어, 'a.png'파일에 대한 소유권을 보자면 이 파일에 대한 사용자 소유는 'tacitus'이며 그룹 소유권은 'tacitus'이다. 마찬가지로 'Desktop' 디렉토리에 대한 소유권도 그런 방식으로 해석하면 된다.

 

리눅스는 보통 계정을 생성할때 그룹을 따로 지정하지 않으면 아이디와 동일한 그룹을 생성한다. 한사람에 대한 그룹을 따로 생성하는 것이다. 그래서 위의 예제에서처럼 사용자와 그룹이 모두 동일하게 나온것이다.

 

[code bash]]$ ls -lh
합계 4.0M
drwx------ 2 tacitus tacitus 4.0K  1월 24 19:28 Desktop
-rw-r--r-- 1 tacitus root  29K  1월 19 22:03 a.png[/code]

 

위의 예제에서 'a.png'파일에대한 소유권이 바뀌었다. 파일 소유는 'tacitus'이지만 그룹 소유는 'root'다. 따라서 root 그룹에 속한 사용자라면 이 파일에 대해서 뭔가를 할수 있다. 그 '뭔가를 할수 있게' 지정한 것이 허가권이다.

 

허가권

 

허가권은 3가지로 이루어진다. 자기자신에 대한 허가권, 그룹에대한 허가권, 나머지 모든 사용자에 대한 허가권 이다.

 

[code bash]]$ ls -lh
합계 4.0M
drwx------ 2 tacitus tacitus 4.0K  1월 24 19:28 Desktop
-rw-r--r-- 1 tacitus root  29K  1월 19 22:03 a.png[/code]

 

위화면에서 맨 왼쪽에 있는 '-rw-r--r--' 부분이 바로 허가권을 보여주는 부분이다.

 

-rwx rwx rwx

 

실제 왼쪽의 모든내용은 위와 같다. 맨 왼쪽 '-'은 파일이외에 무엇인지를 알려주는 영역이다. 만약 디렉토리라면 'd'라고 표시간된다. 실제로 위에 보면 'Desktop'은 'd'라고 표시되어있고 이것은 디렉토리라고 알려주고 있다. 나머지는 허가권을 알려주고 있는데 'rwx'가 반복해서 나오는데 'r'='Read', 'w'='Write', 'x=eXecute' 를 말한다. 그러니까 읽고, 쓰고, 실행할수 있는 허가권을 말하는 것이다.

 

리눅스 시스템은 모든것을 파일로 다룬다. 장치던 디렉토리던간에 모든것이 파일처럼다루어진다. 이러한 파일에 대해서 시스템이 할수 있는 것은 읽고, 쓰고, 실행하는 것이다. 파일의 갱신도 파일을 쓰는 행위와 동일하다.

 

그리고 3번 반복되서 나오는데 이것은 다음과 같은 의미가 있다.

자기자신        그룹               나머지 모든사용자

-rwx    rwx           rwx

 

소유자에 대한 허가권을 지정해주는 것이라는 걸 알수있다. 만일 특정한 행위에대해서 허가권이 없다면 '-'으로 표시되게 되어 있다. 따라서 'a.png'파일에대해서 이제 어떤 허가권을 가지고 있는 알수 있다. 보면(-rw-r--r--)인데, 자기자신(tacitus)에게는 '읽고,쓰고'의 허가권, 그룹(tacitus)에 대해서는 '읽기'만, 나머지 모든 사용자에 대해서도 '읽기'만 할수 있다.

 

소유권 변경.

 

이제 소유권을 변경하는 법을 알아보자. 소유권 변경은 오로지 'root'만 할수 있다. 자신의 소유를 다른사람으로 혹은 다른 사람의 소유를 자신의 것으로 마음대로 할수 있다면 소유권이 존재할 이유가 없을 것이다. 따라서 소유권 변경은 오로지 'root'만 할수 있다록 되어 있다.

 

소유권 변경은 'chown' 명령어와 'chgrp' 명령어를 사용한다. 'chgrp' 명령어는 그룹 소유권을 변경할때 사용하는 것인데, 'chown'명령어에서도 지원하기 때문에 자주 쓰이지는 않는다.

'chgrp'의 사용법은 다음과 같다.

 

[code bash]]# chgrp root a.png[/code]

 

바꾸고자하는 그룹을 지정하면 그 그룹으로 바뀐다. 단, 그룹이 시스템에 존재해야 한다.

사용자 소유권은 'chown'명령어를 이용해서 다음과 같이 바꾼다.

 

[code bash]]# chown root a.png[/code]

 

역시 바꾸고자하는 사용자를 지정하면 그 사용자로 바뀐다. 단, 사용자가 시스테메 존재해야 한다.

 

이번에는 'chown' 명령어를 이용해서 사용자와 그룹을 한꺼번에 바꿔보자. 순서는 '사용자.그룹'이다.

 

[code bash]]# chown tacitus.root a.png[/code]

 

'.'이나 ':'를 사용해서 사용자와 그룹을 그분지어주면 된다.

 

허가권 변경.

 

허가권의 경우는 변경할수 있는 방법이 두가지가 존재한다. 소유권을 지정해서 허가권을 부여하는 방법과 비트 지정를 이용하는 방법이다.

 

허가권에는 먼저 대상을 사용자(u), 그룹(g), 나머지모든사용자(o)로 구분을 한다. 그리고 허가권은 'rwx'로 지정을 한다. 그래서 소유권을 지정해서 허가권을 부여하는 방법을 예제를 통해서 알아보자.


사용자에게 읽기권한을 추가 부여.
[code bash]
]# chmod u+r a.png
[/code]

 

사용자에게 읽기를 빼기.
[code bash]
]# chmod u-r a.png
[/code]

 

사용자에게 읽고, 쓰고, 실행 권한을 추가 부여.
[code bash]
]# chmod u+rwx a.png
[/code]

 

사용자와 그룹에 실행권한 추가 부여.
[code bash]
]# chmod ug+x a.png
[/code]

 

나머지 사용자들에게 실행권한 추가 부여.
[code bash]
]# chmod o+x a.png
[/code]

 

모든 사용자들에게 읽고, 쓰고, 실행권한 추가 부여.
[code bash]
]# chmod a+rwx a.png
[/code]

 

사용자와 그룹에 실행권한 빼기.
[code bash]
]# chmod ug-x a.png
[/code]

 

위의 예제는 권한을 추가하거나 빼는 것이다. 그렇다면 권한을 아예 리셋하는 것은 없을까? 기존 권한을 모두 없애고 새롭게 권한을 주기위해서는 '='를 사용한다.

 

사용자에게 읽기권한만 부여
[code bash]
]# chmod u=r a.png
[/code]

 

모든 사용자들에게 읽기, 실행권한만 부여
[code bash]
]# chmod u=rx a.png
[/code]

 

두번째는 비트 지정 방법이다.

 

|  r     w     x   |   r     w     x   |   r     w     x   |  

 

위와같이 3부분으로 나눈뒤에 권한이 있으면 '1', 없으면 '0' 비트를 지정한다.

 

예를들어

[code bash]]$ ls -lh
합계 4.0M
-rw-r--r-- 1 tacitus root  29K  1월 19 22:03 a.png[/code]

 

이것을 비트를 입혀서 본다면 다음과 같다.

 

|  r     w     -   |   r     -    -   |   r    -     -   |  

    1    1      0       1     0    0       1    0     0

 

이것을 각각 10진수로 환산하면 '644'가 된다. 그러니까 비트지정 방식으로 위의 권한을 해석한다면 '644'가 되는 것이다.

 

비트지정 방법은 모든 사용자의 비트를 함께 지정을 해줘야 한다.

[code bash]
]# chmod 755 a.png
]# ls -lh
합계 4.0M
-rwxr-xr-x 1 tacitus root  29K  1월 19 22:03 a.png
[/code]

 

비트지정 방법은 비트를 계산해야하는 번거로움이 있지만 쉘 스크립트를 하다보면 자주 쓰는 권한이 있게되는데 이럴때는 비트지정방법을 자주 이용하게 된다.

 

0 개의 댓글:

댓글 쓰기