안녕하세요.
이번 포스팅에서는 리눅스 OS에서 퍼미션(Permission)과 소유권을 확인하고, 변경하는 방법에 대하여 포스팅하도록 하겠습니다.
우선 리눅스(Linux)는 핀란드의 대학생 리누스 베네딕트 토르발스(Linus Benedict Torvalds)가 만든 OS로,
UNIX 시스템과 비슷하게 만든 '오픈 소스' 운영체제입니다.
그리고 멀티유저, 멀티 프로세스가 기본으로 탑재되어 있는 OS이죠
멀티유저란 Windows는 한대의 컴퓨터에 한 사람이 앉아서 사용을 하는 반면에,
리눅스는 네트워크나 기타 방법을 통해서 여러 사용자가 동시에 접근하여 사용할 수 있는 구조라는 말인데요
(멀티 프로세스도 비슷하죠 여러 명이 동시에 접속하면 당연히 여러 작업이 한 번에 실행되겠죠?)
리눅스에 대한 설명은 여기까지 하도록 하고 본론으로 들어가기 전에 FannPo 님이 작성하신 포스팅에 상세하게 설명되어있으니 궁금하신 분들은 참조하시면 좋을 것 같아요
[Linux] 리눅스의 구조? / 다중 사용자 / 다중작업
서론이 길었네요. 이제 본론으로 들어가도록 하겠습니다.
우선 Permission 확인하기 위해서는 목록을 띄워야겠죠?
자료 출력 명령어 ls의 옵션 및 사용법
root@wordpress:/# ls -al
디렉토리/파일을 편의상 "자료"라고 표현함
1. 해당 자료에 대한 퍼미션
2. 해당 자료에 연결(Link)되어 있는 파일 개수
3. 해당 자료의 사용자(user) - 기본값(Default) : 생성자
4. 해당 자료의 그룹(group) - 기본값 : 생성자가 속한 그룹
5. 해당 자료의 크기
6. 해당 자료의 생성(수정) 일자
7. 해당 자료의 이름
이 중에서 오늘은 1, 3, 4번에 대해서 설명을 드릴게요.
1. 자료의 속성을 읽는 방법
drwxr-xr-x 2 root root 4096 Apr 2 13:31 bin/
여기서 drwxr-xr-x를 속성별로 보면
d / rwx / r-x / r-x로 볼 수 있는데요
[Shape][User][Group][Others]
파일의 종류(Shape)에 대한 속성은 아래와 같은데요
자주 보이는 것은 d , - , l 정도가 되겠습니다.
다음으로 rwx / r-x / r-x 은 파일에 대한 Permission(권한)을 표시하는 건데요
차례대로 파일의 소유자(User), 파일의 소유그룹(Group), 아무나(Others)의 Permission(권한)을 나타내는 건데요
아래와 같이 적용된다고 보시면 돼요
그런데 'rwx'니 'r-x'니 뭐가 뭔지 잘 모르시겠죠?
차례대로 Read, Write, eXecute에서 한 글자씩 가져온 건데 말 그대로 '읽기', '쓰기', '실행'을 뜻 합니다
테이블을 보시면 갑자기 숫자 값이 나와서 당황하셨을 텐데요
숫자 값을 왜 넣었냐면 가끔 "퍼미션을 '777' or '755' or '644'로 주세요"라는 말을 보실 수가 있는데
이때 당황하시지 말라고 미리 설명을 해놓았답니다
자세히 설명을 드리자면 r, w, x 세 가지 권한은 아래와 같이 고유한 숫자 값을 가지는데요
- r : 4 (2진수 = 100)
- w : 2 (2진수 = 010)
- x : 1 (2진수 = 001)
컴퓨터는 모든 처리를 '0' 과 '1' 로만 처리한다는 것을 생각해보면 (자세한 내용은 링크 참조)
rwx를 더하게 되면 r(4) + w(2) + x(1) = 7 (2진수 = 111) 이 되죠?
r-x는 r(4) + x(1) = 5 (2진수 = 101) 이 되고요
이제 감이 오셨나요?
이 설명을 토대로 제가 처음 보여드린
drwxr-xr-x 2 root root 4096 Apr 2 13:31 bin/
bin/ 은 디렉토리 이면서 755의 퍼미션 값이 주어져 있고, 소유자는 root, 소유 그룹은 root 로 해석이 되겠네요
2. 자료의 Permission(권한)을 설정하는 방법 (chmod 명령어)
앞서 설명드린 내용을 기준으로 파일, 디렉토리의 권한을 변경하기 위해서는 chmod 명령어를 이용합니다.
chmod 명령어는 다양한 방식으로 권한 변경이 가능한데 조건이 있습니다.
바로 로그인된 계정이 어떤 것인지가 중요합니다.
서론에서 리눅스는 멀티유저를 지원한다고 말씀드렸죠?
한마디로 1대의 리눅스 PC에 적게는 여러 명에서 많게는 수십, 수백 명이 접근해서 사용을 할 수 있는데요
만약 A유저가 만들어둔 파일의 권한을 B유저가 마음대로 바꿀 수 있다면?
보안이라는 개념 자체가 없는 거죠
그래서 리눅스에서 chmod 명령어는 로그인한 계정이 소유권을 가지고 있는 파일, 디렉토리에 대해서만 권한 변경이 가능하도록 되어있습니다.
물론 예외는 있는데요 바로 superuser인 root 사용자입니다. 이 부분에 대해서는 차후에 자세히 포스팅하도록 할게요
1) 각 소유자별 권한 변경하기
## 그룹(Group) 사용자의 x(실행) 권한 제거
root@wordpress:/mnt/test# chmod g-x permission777
## 그룹(Group) 사용자의 x(실행) 권한 추가
root@wordpress:/mnt/test# chmod g+x permission777
## 그룹(Group), 아무나(Others) 사용자의 x(실행) 권한 제거
root@wordpress:/mnt/test# chmod go-x permission777
## 유저(User), 그룹(Group), 아무나(Others) 사용자의 w(쓰기) 권한 제거
root@wordpress:/mnt/test# chmod ugo-w permission777
root@wordpress:/mnt/test# chmod a-w permission777
## 유저(User), 그룹(Group) 사용자의 w(쓰기) 권한 추가
root@wordpress:/mnt/test# chmod ug+w permission777
위와 같이 u(유저), g(그룹), o(아무나), a(전부)로 대상을 지정한 후 더하기(+) 혹은 빼기(-)를 사용하여
원하는 권한을 추가/제거할 수 있습니다.
물론 권한 여러 개를 한 번에 지정하는 것도 가능한데요
예를 들어
## 유저(User), 그룹(Group), 아무나(Others) 사용자의 r(읽기), w(쓰기), x(실행) 권한 추가
root@wordpress:/mnt/test# chmod a+rwx permission777
이라는 명령어를 실행하면 permission777 파일의 권한은 777(rwxrwxrwx)이 되게 되는 것이죠
2) 숫자로 한 번에 권한 변경하기
## 유저(User) = rwx / 그룹(Group), 아무나(Others) = r-x 권한 부여
root@wordpress:/mnt/test# chmod 755 permission777
## 유저(User) = rw- / 그룹(Group), 아무나(Others) = r-- 권한 부여
root@wordpress:/mnt/test# chmod 644 permission777
## 유저(User), 그룹(Group), 아무나(Others) = rwx 권한 부여
root@wordpress:/mnt/test# chmod 644 permission777
이렇게 숫자로 권한을 부여하면 비교적 간단하게 권한 변경이 가능하니까, 각 숫자가 의미하는 뜻이 무엇인지를 이해하고 계시면 아주 편하게 사용하실 수 있어요
3. 자료의 Ownership(소유)을 설정하는 방법 (chown 명령어 / root 권한 필요)
앞서 설명드린 바와 같이 리눅스는 멀티유저! 가 사용을 하는데, 가끔은 파일의 소유권을 변경해야 할 때가 있죠
만약 회사에서 A직원이 담당하던 업무가 있었는데 만약 퇴사를 한다면? B직원이 담당을 하게 되겠죠?
그런데 A직원이 B직원이 아니라 O직원에게 임의로 소유권을 넘겨버린다면?
이것도 문제가 될 수 있기 때문에,
소유권을 변경하는 chown, chgrp 명령어는 root 권한이 있어야지만 사용할 수 있어요
## root 계정으로 변경하기
ubuntu@wordpress:# sudo -i
## root 계정 비밀번호 입력 (입력해도 반응이 없으니 놀라지 마세요)
password:
## chown 명령어로 소유자(User) 변경하기
root@wordpress:/mnt/test# chown root rootUser
## chgrp 명령어로 소유그룹(Group) 변경하기
root@wordpress:/mnt/test# chgrp root rootGroup
## chown 명령어로 소유자(User).소유그룹(Group) 동시에 변경하기
root@wordpress:/mnt/test# chown root.root rootUser
## chgrp 명령어로 소유자(User).소유그룹(Group) 동시에 변경하기 (이건 안된답니다 ^^)
root@wordpress:/mnt/test# chown root.root rootGroup
1) chown 명령어는 사용자 변경 / 사용자, 그룹 동시 변경 2가지 기능이 있고,
chown [변경할 사용자] [파일명] --> 사용자 변경
chown [변경할 사용자].[변경할 그룹] [파일명] --> 사용자, 그룹 동시 변경
2) chgrp 명령어는 그룹만 변경할 수 있어요
chgrp [변경할 그룹] [파일명] --> 그룹 변경
chgrp [변경할 사용자].[변경할 그룹] [파일명] --> 변경 실패!
그런데 만약 파일이 여러 개라면? 하나하나 변경해주면 되죠~
이런 어처구니없는 생각을 하는 사람은 없겠죠
파일이 1~2개가 아니라 수천 개가 있어도 그걸 다......?
3) 소유권 한 번에 변경하기 (-R)
#### dir이라는 디렉토리 안에 10개의 파일이 있는경우
### 잘못된 변경 방법
## dir 디렉토리의 소유자,소유그룹을 root -> ubuntu로 변경
root@wordpress:/mnt/test# chown ubuntu.ubuntu dir
위와 같이 chown [사용자].[그룹] dir 명령어를 실행하게 되면 dir 디렉토리 자체의 소유권은 변경되었지만,
dir 디렉토리 하위에 있는 파일 10개의 소유권은 그대로 인 것을 확인하실 수 있는데요
이걸 한 번에 변경하기 위해서는 -R 옵션을 추가해주면 됩니다.
#### dir이라는 디렉토리 안에 10개의 파일이 있는경우
### 제대로된 변경 방법
## dir 디렉토리 및 하위디렉토리, 파일의 소유자,소유그룹을 root -> ubuntu로 변경
root@wordpress:/mnt/test# chown -R ubuntu.ubuntu dir
위와 같이 -R 옵션 하나만 추가하였는데 dir 디렉토리는 물론 하위의 모든 자료의 소유권까지 한방에 변경된 것을 확인하실 수 있습니다.
이를 이용해서 앞서 설명드린 Permission(권한)을 설정하는 chmod 명령어에도 적용을 하게 되면
#### dir이라는 디렉토리 안에 10개의 파일이 있는경우
## dir 디렉토리 및 하위디렉토리, 파일의 Permission(권한) 644 -> 777로 변경
root@wordpress:/mnt/test# chmod -R 777 dir
아주 손쉽게 변경이 가능합니다.
이상으로 리눅스 OS의 Permission과 소유권에 대한 포스팅을 마치도록 하겠습니다.