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 는 두개의 그룹에 동시에 속하도록 해야 한다.
댓글