-
chmod, chown, chgrpKAU/Linux 2010. 4. 6. 12:49
[01] chmod
chmod 명령어는 특정 파일 또는 디렉토리의 퍼미션(permission)을 변경하는 명령어입니다.
가장 기본적인 리눅스 명령어로서 리눅스 사용자라면 누구나 알고 있어야하는 명령어입니다.
※ 명령어 위치 : /bin/chown
※ 퍼미션(permission) : 특정 파일이나 디렉토리에 대하여 읽기, 기록하기, 삭제하기 등의 권한을 설정해 놓은 것으로 다중 사용자 운영체제(Multi-User Operation System)에서 파일의 접근 권한과 보호 등을 위하여 필요한 것이다.
또한 퍼미션은 리눅스뿐아니라 UNIX, Solaris, AIX, FreeBSD 등의 운영체제에서도 같은 목적으로 사용할 수 있다. 특히, 웹(WWW)으로 홈페이지를 보여 줄 때에 웹문서 파일의 퍼미션 설정이 되어있지 않아서 “이 문서는 허용되지 않았습니다.”라는 웹페이지 에러를 자주 접하곤 한다.
이에 대한 원인은 거의 대부분 웹페이지 파일의 퍼미션이 허용되어있지 않기 때문입니다.
파일(디렉토리)의 펴미션(권한, permission) 종류에는 아래와 같이 5가지가 있다. 매우 중요한 사항이니 꼭 기억해 두시기 바라며 특히 동일한 퍼미션이 파일에 적용될 때와 디렉토리에 적용될 때의 의미가 다르다는 것을 정확하게 이해하기 바랍니다.퍼미션
r
읽기(read) 권한
파일을 읽을 수 있음
디렉토리의 내용을 볼수 있음(ls로 파일 리스트 확인 가능)
w
쓰기(write) 권한
파일에 저장, 삭제할 수 있음
디렉토리에 파일 저장, 변경, 삭제 등 가능
x
실행(execution) 권한
파일을 실행할 수 있음
디렉토리에 접근할 수 있음(cd로 접근 가능, ls로 리스트는 불가)
s
SetUID, SetGID 권한
파일 소유자(SetUID), 그룹 소유자(SetGID)의 권한으로 실행함
t
Sticky Bit 권한
공유 디렉토리로 사용됨
※ 사용 형식 : chmod [옵션] 8진수퍼미션설정 대상파일들
chmod [옵션] 퍼미션설정모드 대상파일들-rwxr-xr-x 1 root root 4725 Nov 5 20:41 hello.exe
허가권 하드링크수 소유권 크기 날짜 파일이름
허가권은 10개의 문자로 되어 있고 첫번째 문자는
일반파일이면 -
디렉토리이면 d
심벌릭링크이면 l(영문엘)
등으로 표시된다.
나머지 문자는 3개씩 묶어서 소유자, 그룹, 다른 계정들의 권한을 나타낸다.rwx r-x r-x ---> 755
~rwx 의 의미
1. r
파일 : 파일의 내용을 읽을 수 있다.
디렉토리 : 디렉토리 안의 내용을 ls 로 볼 수 있다.
2. w
파일 : 파일의 내용을 수정할 수 있다.
디렉토리 : 디렉토리안의 내용을 수정할 수 있다.
(파일을 삭제하려면 그 파일이 존재하고 있는 디렉토리에 w 권한이 있어야 한다.)
3. x
파일 : 파일을 실행할 수 있다.
디렉토리 : 디렉토리 안으로 cd 를 이용해서 들어갈 수 있다.위와 같은 정보에서 퍼미션 부분을 보면 다음과 같다.
- rw- r-- r--
A.파일 유형 B.소유자권한부분 C.그룹소속자권한부분 D.일반다른사용자권한부분A.파일 유형
이 위치에는 다음과 같은 문자들이 설정될 수 있으며 문자들의 의미는 다음과 같습니다.
- : 일반 파일임을 의미함
b : 블럭구조의 특수파일(Block Special File)을 의미함(예: /dev/sda)
c : 입출력에 사용되는 특수파일(Character Special File)을 의미함(예: /dev/console)
d : 디렉토리(Directory)를 의미하며, 디렉토리도 하나의 특수 파일로 취급됨
l : 심벌릭 링크 파일(Link File)임을 의미함
p : 파이프 파일(Pipe)임을 의미함
s : 소켓 파일(Socket)임을 의미함B.소유자권한부분
이 위치에서는 8가지의 경우로 설정될 수 있으며 각각의 의미는 아래와 같다.
--- : 파일의 소유자에게 아무런 권한이 없음(8진수 표시: 0 , 2진수 표시: 000)
--x : 파일의 소유자에게 실행(eXecution) 권한만 있음(8진수 표시: 1 , 2진수 표시: 001)
-w- : 파일의 소유자에게 쓰기(write) 권한만 있음(8진수 표시: 2 , 2진수 표시: 010)
-wx : 파일의 소유자에게 쓰기와 실행 권한만 있음(8진수 표시: 3, 2진수 표시: 011)
r-- : 파일의 소유자에게 읽기(read) 권한만 있음(8진수 표시: 4 , 2진수 표시: 100)
r-x : 파일의 소유자에게 읽기와 실행 권한만 있음(8진수 표시: 5 , 2진수 표시: 101)
rw- : 파일의 소유자에게 읽기와 쓰기 권한만 있음(8진수 표시: 6 , 2진수 표시: 110)
rwx : 파일의 소유자에게 읽기,쓰기,실행 권한만 있음(8진수 표시: 7 , 2진수 표시: 1110위의 예에서는 이 부분의 설정이 rw-로 되어 있으므로 root 라는 파일 소유자에게 읽기와 쓰기 권한이 있음을 알 수 있다.
C.그룹소속자권한부분
위 B.의 경우의 예와 같습니다.
위의 예에서 r--로 설정되어 있으므로 root라는 그룹에 소속된 사용자들에게 읽기 권한만 주어진 것이다.
D.일반다른사용자권한부분
위 B.의 경우의 예와 같습니다.
위의 예에서 r--로 설정되어 있으므로 일반 다른 사용자들에게 읽기와 실행 권한이 있음을 알수 있다※ 즉, 파일의 퍼미션을 설정하는 방법에는 두가지 방법이 있다.
<예제> # chmod 755 파일이름
- 파일소유자에게 7 (2진수로는 111)의 권한 즉, rwx의 권한을 부여함
- 파일그룹소속자에게 5 (2진수로는 101)의 권한 즉, r-x의 권한을 부여함
- 다른사용자들에게 5 (2진수로는 101)의 권한 즉, r-x의 권한을 부여함
이렇게 숫자로 지정을 하면
첫번째 숫자는 파일의 소유자권한
두번째 숫자는 그룹소속자권한
세번째 숫자는 다른사용자에 대한 권한을 각각 표시하게 된다.
<예제> # chmod o+rw 파일이름
- 파일이름에 대해 일반다른사용자들(other)에게 읽기(r, Read) 권한과 쓰기(w, Write)권한을 부여한다.
특정문자로 사용하는 종류에는 다음과 같은 것들이 있다.
u : 소유자(user)를 의미함
g : 그룹(group)을 의미함
o : 다른사용자(other)들을 의미함
a : 모두(all)을 의미함(default)
그리고 이 문자와 함께 + 기호가 사용되면 “권한을 부여한다”라는 의미이며,
- 기호가 사용되면 “권한을 제거한다”라는 의미가 된다.<실습> 특정 파일에 SetUID Bit 설정하기
[참고] SetUID : 특정 파일에 SetUID Bit가 설정되어 있다면 다른 사용자들이 그 파일을 실행하였을 경우 실행되는 동안에는 실행시킨 사용자의 권한(아이디의 권한)이 아닌, 파일의 소유자권한으로 실행이 된다.
-r-xr-xr-x 1 root root 0 10월 16 00:11 rick
# chmod 4755 rick
-rwsr-xr-x 1 root root 0 10월 16 00:11 rick
SetGID는 일반 퍼미션 앞에 2를 붙이면 되고, Sticky Bit는 1을 붙이면 된다.(chown 시간에 자세하게 배운다.)
<실습> 특정 파일에 SetGID Bit 설정하기
-rwsr-xr-x 1 root root 0 10월 16 00:11 rick
# chmod 2755 rick
-rwxr-sr-x 1 root root 0 10월 16 00:11 rick
<실습> 특정 디렉토리에 Sticky Bit 설정하는 퍼미션 설정하기
-rwxr-sr-x 1 root root 0 10월 16 00:11 rick
# chmod 1755 rick
-rwxr-xr-t 1 root root 0 10월 16 00:11 rick
리눅스에서는 흔히 /tmp 디렉토리를 Sticky Bit로 설정 합니다. 이 /tmp 디렉토리내에서 특정 파일을 생성하면 생성한 사용자의 소유자로 파일이 생성된다.
그리고 다른 사용자가 /tmp 디렉토리에 다른 파일을 생성하면 역시 생성한 소유자의 소유로 파일이 생성된다. 파일을 삭제할 때에도 생성한 사람만이 삭제를 할 수가 있다.[02] chown
chown 명령어는 CHange OWNer의 약어로서 파일(File)이나 디렉토리(Directory)의 소유자와 소유 그룹을 변경할때에 사용하는 명령어이다.※ 명령어 위치 : /bin/chown
※ 아래 실습에서 필요한 파일은 본인이 아무 파일 3개, 디렉토리2개를 만들기를 바란다.
# touch doom1
# touch doom2
# touch doom3
# mkdir doomguydir
# mkdir our_hero
<실습> 특정 파일의 소유자 변경하기
chown 명령어로 doom1 이라는 파일의 소유자를 변경해 보자.
-rw-r--r-- 1 root root 0 10월 16 11:19 doom1
# chown jackson doom1
-rw-r--r-- 1 jackson root 0 10월 16 11:19 doom1
소유자가 변경된것을 알 수 있다.
물론, 이런 명령어가 허용이 되려면 파일에 대한 소유권이 있어야 가능하다.
아무 파일 또는 디렉토리의 소유자를 변경할 수 있는 것은 아니다.<실습> 특정 파일의 소유자와 소유그룹을 동시에 변경하기
chown 명령어로 doom2 라는 파일의 소유자와 소유그룹을 동시에 변경해 보자.
-rw-r--r-- 1 root root 0 10월 16 11:19 doom2
# chown jackson:jackson doom2 // : (콜론)으로 구분해서 넣어야 한다.
-rw-r--r-- 1 jackson jackson 0 10월 16 11:19 doom2
<실습> 특정 디렉토리내의 소유자와 소유그룹을 모두 한꺼번에 변경하기
리눅스에서는 디렉토리도 하나의 특수파일로 인식하기 때문에 파일의 소유자와 소유그룹을 변경하는 방법과 디렉토리의 소유자와 소유그룹을 변경하는 방법이 동일하다.<실습> 파일의 소유자와 소유그룹변경시에 UID와 GID로 지정하여 변경하기
일반적으로 chown 명령어로 소유자와 소유그룹을 변경할 때에 계정명(ID)과 그룹명으로 지정한다.
하지만 chown 에서 ID와 그룹명대신 UID와 GID를 지정하여도 변경이 된다.
[참고] UID와 GID를 보려면 /etc/passwd
# grep 500 /etc/passwd // grep 특정 파일에 패턴(500)을 찾고자 할때
doom:x:500:500:leesangchul:/home/doom:/bin/bash
-rwxr-xr-x 1 root root 0 10월 16 11:19 doom3
# chown 500:500 doom3
-rwxr-xr-x 1 doom doom 0 10월 16 11:19 doom3
<실습> 특정 디렉토리내의 모든 파일과 디렉토리의 소유자와 소유그룹을 모두 한꺼번에 변경할때에 UID와 GID를 지정하여 변경하기
위 내용을 이해하였으면 알 것이다. –R 옵션을 사용하여 직접 해보자.
파일이나 디렉토리 등 모두 같은 형식으로 하면 된다.[03] chgrp
chgrp는 “CHange GRouP”의 약어로서 파일이나 디렉토리의 소유그룹을 변경할 때 사용하는 명령어이다.
즉, chown 명령어는 소유자와 소유그룹을 한꺼번에 변경할 수 있지만 chgrp로는 특정 파일이나 디렉토리의 소유 그룹만을 변경할 수가 있다.
※ 명령어 위치 : /bin/chgrp