본문 바로가기
▒ 과거 기억 저장소 ▒/CentOS

[Linux/CentOS 6.8] 파일 권한 설정 / 퍼미션(permission)

by infosec 2016. 11. 25.
반응형

1. 파일권한설정


1.1. 기본 퍼미션

- r(read)읽기 8진수로 4: 파일을 읽을 수 있다. 

- w(write)쓰기 8진수로 2 : 파일을 수정할 수 있다. 

- x(excute)실행 8진수로 1: 파일을 실행할 수 있다. 

- -(denied) : 권한없음. 


- user1, user2, user3(rw-) / user4~user100(r--)

. rw-r--r-- (x)

. r--rw-r-- 

. r--r--rw- 




1.2. 퍼미션 변경

- --- --- --- rwx rwx rwx

- r=4, w=2, x=1

- chmod who op a.txt 

. ex1) chmod u=rwx,g=rw-,o=r-- a.txt (o)

. ex2) chmod u=rw-,g=r-x,o=-wx a.txt (x) => -를 빼기로 인식함

=> chmod u=rw,g=rx,o=wx a.txt 로 해야함.

. ex3) chmod u+x,g+w,g-x,o=-wx,o+r a.txt (o)

. ex4) chmod a=rwx,o-w a.txt : a는 전체 관여, o는 제 3자. => 결과 -rwxrwxr-x

. symbolic 모드보다 8진수 모드가 훨씬 편함.(심볼릭 모드는 1가지만 바꿀때 용이하고 8진수모드는 3가지 다 바꿀때 용이하다.)

- 디렉토리는 x없으면 실행못함 => 디렉토리 읽기 권한 : r--(x), r-w(o) / -w-(x), -wx(o), --x(o)




1.3. 실습예제들

- <예제1>

[root] chmod 777 a.txt

[user1] rm a.txt : 삭제 불가

[user1] echo -n '' > a.txt : 이 방법은 읽기쓰기 권한 이용해서 용량만 0으로 만든것, a.txt자체는 없어지지않음

따라서, a.txt가 들어있는 /test자체의 퍼미션을 확인한다.

[root] ls -ld /tmp/test => drwxr-xr-x : 쓰기(w) 권한이 없어서 안지워지는거임. 추가시킨다. 

[root] chmod 757 /tmp/test or chmod o+w /tmp/test : o 옵션이 제 3자 옵션임.

[user1] rm a.txt : 삭제 가능.

cf1) 

삭제하기 위한 권한은 wx임. w만 있어도 삭제불가

cf2)

위에 예에서 디렉토리에 w권한 추가시켜놓고 a.txt를 chmod 000 a.txt로 바꿔도 삭제 가능

=> 따라서, 파일 삭제는 파일권한 상관없이 디렉토리 권한을 바꾸는 것이 중요함!




- <예제2> user1 한사람 에게만 권한주는 예제(chown)

<root> [/tmp/test]:# grep root /etc/group

root:x:0:

<root> [/tmp/test]:# grep -w 0 /etc/passwd

root:x:0:0:root:/root:/bin/bash

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

operator:x:11:0:operator:/root:/sbin/nologin

<root> [/tmp/test]:# ll a.txt

-rw-r--r--. 1 root root 6 2016-08-29 12:00 a.txt

<root> [/tmp/test]:# ll issue

-rw-r--r--. 1 root root 47 2016-08-29 12:08 issue

=> user1의 그룹을 root그룹으로 옮기고 이런방법들은 너무 번거로움

<root> [/tmp/test]:# chown user1 issue (아예 그 파일의 소유주를 user1으로 바꿔버린다 : chown)

<root> [/tmp/test]:# ll issue

-rw-r--r--. 1 user1 root 47 2016-08-29 12:08 issue


cf1) 그룹까지 user1 그룹으로 바꾸는 방법 : chgrp

<user1> [/tmp/test]:$ chgrp user1 issue


cf2) 소유주, 소유그룹 한번에 바꾸는 방법

<root> [/tmp/test]:# chown user2:user3 issue

<root> [/tmp/test]:# ll issue

-rw-r--r--. 1 user2 user3 47 2016-08-29 12:08 issue


cf3) chown, chgrp는 일반계정이 사용할 수 없음




- <예제3> kuser1은 rwx권한을 가지고(rwx), kuser2와kuser3는 rw-권한을 가지고(rw-), 

나머지모든계정:user1,user2....kuser5은 r-- 권한을(r--) 가지게 a.txt의 권한을 수정하는 예제.

<root> [/tmp/test]:# useradd kuser1

<root> [/tmp/test]:# useradd kuser2

<root> [/tmp/test]:# useradd kuser3

<root> [/tmp/test]:# useradd kuser4

<root> [/tmp/test]:# useradd kuser5

<root> [/tmp/test]:# echo hello > a.txt

<root> [/tmp/test]:# ll a.txt

-rw-r--r--. 1 root root 6 2016-08-29 12:20 a.txt

<root> [/tmp/test]:# chown kuser1 a.txt

<root> [/tmp/test]:# ll a.txt

-rw-r--r--. 1 kuser1 root 6 2016-08-29 12:20 a.txt

<root> [/tmp/test]:# chmod u+x a.txt

<root> [/tmp/test]:# ll a.txt

-rwxr--r--. 1 kuser1 root 6 2016-08-29 12:20 a.txt

<root> [/tmp/test]:# groupadd newgrp

<root> [/tmp/test]:# chgrp newgrp a.txt

<root> [/tmp/test]:# chmod g=rw a.txt

<root> [/tmp/test]:# ll a.txt

-rwxrw-r--. 1 kuser1 newgrp 6 2016-08-29 12:20 a.txt

<root> [/tmp/test]:# usermod -g newgrp kuser2

<root> [/tmp/test]:# usermod -G newgrp kuser3

<root> [/tmp/test]:# ll a.txt

-rwxrw-r--. 1 kuser1 newgrp 6 2016-08-29 12:20 a.txt

<root> [/tmp/test]:# groups kuser2 kuser3

kuser2 : newgrp

kuser3 : kuser3 newgrp




- <예제4> useradd puser1 ~ puser5 만들고 아래가 가능하도록 수행하라.

cal : puser1, puser2만 실행 금지, 나머지 모든계정은 실행 가능, (1)

ifconfig : puser2, puser3만 실행 가능, 나머지 모든계정은 실행 금지 (2)


(1) puser1, puser2를 A그룹으로 묶어서 cal의 소유그룹을 A 그룹으로 바꾸고,

그 소유그룹의 권한을 실행권한 없이 r--로만 해놓는다.(chmod g=r cal)

그리고 나머지계정이 실행가능하게 제 3자 권한을 r-x로 바꾼다.


(2) puser2, puser3를 B그룹으로 묶어서 ifconfig의 소유그룹을 B 그룹으로 바꾸고,

그 소유그룹의 권한을 r-x로 해놓는다.(chmod g=rx ifconfig)

그리고 나머지계정이 실행금지되게 제 3자 권한을 r--로 바꾼다.


<예제4 정식풀이>

답) 아래처럼 설정하면 됩니다.


-rwx---r-x. 1 root pgroup ....  /usr/bin/cal 또는

-rwxr--r-x. 1 root pgroup ....  /usr/bin/cal

(실행 못하게 하려면 r은 상관없고 x 권한만 없으면 됨)

groups puser1 puser2

puser1:pgroup 또는 puser1:puser1,pgroup (보조그룹이어도 상관없음, 아래도 마찬가지)

puser2:pgroup


-rwxr-x---. 1 root pgroup2 73936 2012-05-10 17:17 /sbin/ifconfig 또는

-rwx--xr--. 1 root pgroup2 73936 2012-05-10 17:17 /sbin/ifconfig


groups puser2 puser3

puser2:pgroup,pgroup2

puser3:pgroup2


풀이) 그룹을 위에서 처럼 두개를 새로 만들고

예를들어서 위에서 처럼 pgroup 과 pgroup2 를 만들었다면

puser1 과  puser2 만 pgroup에 속하도록 하고

pgroup2 에는 puser2 와 puser3 계정만 속하도록 하면 된다.

단 puser2 는 두개의 그룹에 동시에 속하도록 해야 한다.



반응형

댓글