유닉스 계열의 운영체제들은 멀티태스킹 시스템이며, 멀티유저 시스템이기도 하다.
이것이 무슨 의미일까? 바로 동시에 한 명 이상이 컴퓨터에 접속해서 사용할 수 있다는 의미이다.
일반적으로 생각하는 컴퓨터는 입출력 장치로 하나의 키보드와 모니터를 사용한다.
그러나 네트워크에 연결된 컴퓨터라면, 원격에서 ssh 접속을 통해 터미널 상에서 컴퓨터를 조작할 수 있다.
X-윈도우 시스템의 지원으로 원격 사용자들은 그래픽 응용 프로그램 등을 실행해 그래픽 출력 결과를 볼 수 있기도 하다.
왜 이러한 설계를 하였는지에 대해서는 유닉스가 만들어진 환경을 생각해 보아야 한다.
PC, 개인용 컴퓨터의 등장 이전에는 컴퓨터는 매우 크고 중앙 집권적이었다.
따라서 이 중앙 컴퓨터에 연결된 다양한 작은 단말기들로 구성되고, 여러 사용자를 지원했어야 했다.
이 경우 어떤 사용자가 파일을 잘못 건드릴 수 있기에 사용자들을 서로로부터 보호해주는 기능이 필요했다.
한 사용자에 의해 시스템이 고장나면 안되는 것이기에, 접근 권한 등에 대한 제약이 등장하게 되었다.
소유자, 그룹 멤버, 기타 사용자
cat /etc/passwd # 읽을 수 있음
cat /etc/group # 읽을 수 있음
cat /etc/shadow # 허가 거부!
위와 같이 어떤 파일들은 시스템 상에서 허가를 거부하며 문제를 발생시키기도 하는데, 일반 사용자는 읽을 권한이 없기 때문이다.
사용자들은 각자 파일과 디렉토리를 소유할 수 있고, 그 파일과 디렉토리들에 대해서 다른 사용자들의 접근을 제어할 수 있다.
사용자들은 어떠한 "사용자 그룹" 에 속할 수도 있는데, 같은 그룹 사용자들은 해당 소유물에 대한 권한을 얻는다.
그룹에 속해 있지 않은 사용자에게도 권한을 줄 수 있기도 하다.
자신의 사용자 정보에 대해 확인하기 위해서는 터미널에 id 두 글자만 쳐보자.
uid 와 gid, 그리고 자신이 속한 그룹들에 대한 정보가 나오는데, uid 는 사용자의 기본 ID 이고 gid 는 사용자의 기본 그룹이 된다.
gid 외에도 또다른 여러 그룹들에 속할 수도 있는데, groups 에 사용자가 속한 그룹들이 리스트업 된다.
이러한 정보들을 출력하기 위해서 시스템의 특정 파일에서 읽어 오는 것인데, 사용자 그룹은 /etc/group 에, 사용자 계정은 /etc/passwd, 사용자 비밀번호는 /etc/shadow 등에서 관리하고 있다.
그렇기 때문에 shadow 는 일반 사용자가 접근할 수 없어서 허가 거부가 뜬 것이라고 생각하면 된다.
읽기, 쓰기, 실행
사용자의 소유물(파일, 디렉토리 등)에 대한 접근 권한은 읽기, 쓰기, 실행에 대해 제어하는 권한으로 나뉜다.
어떤 파일에 권한을 갖고 있는지 알아보기 위해서는 간단한 명령어인 ls 로 확인할 수 있다.
ls 의 결과를 보면 맨 앞쪽에 -rwxrwxr-- 과 비슷한 형태로 이루어진 10개짜리 문자열이 있을 것이다. (-, r, w, x 로 구성)
맨 앞의 문자는 파일 종류로, 아래의 표에 나오듯이 다양한 종류가 존재한다.
속성 | 파일 종류 |
- | 일반적인 파일 |
d | 디렉토리 |
l | 심볼릭 링크, 심볼릭 링크의 파일 속성은 더미값으로써 항상 rwxrwxrwx |
c | 문자 특수 파일. 터미널이나 모뎀 같은 디바이스 |
b | 블록 특수 파일. 하드나 CD-ROM 같은 블록 단위 데이터 처리 디바이스 |
나머지 9개의 문자는 파일모드 라고 불리며, 각각 읽기, 쓰기, 실행에 대한 권한을 나타낸다.
각각 3개씩 끊어서 (rwx) (rwx) (r--) 로 읽으며 Read, Write, eXecute 권한의 존재 여부가 된다.
첫번째 3개는 파일 소유자의 권한, 두번째는 같은 그룹의 권한, 세번째는 기타 사용자들의 권한이다.
rwxrw-r-- 을 예시로 들자면 파일 소유자는 모든 권한을 가지며(rwx), 같은 그룹 사용자들은 읽기와 쓰기 권한을 갖지만 실행할 수는 없고(rw-), 기타 사용자들은 읽기 권한만을 갖는다(r--).
속성 | 파일 | 디렉토리 |
r | 파일 열기와 읽기를 허용한다. | 실행 속성이 설정되어 있으면 디렉토리의 내용 확인을 허용한다. |
w | 파일을 수정하고 쓰고 잘라내는 것은 허용하지만, 이름 변경이나 삭제는 허용하지 않는다. | 실행 속성이 설정되어 있으면 파일들의 생성, 삭제, 이름 변경 등을 허용한다. |
x | 파일이 실행되도록 허용한다. 스크립트 언어로 작성된 파일들은 읽기 권한도 있어야 실행 가능하다. | 작업 디렉토리로써 설정할 수 있게 허용한다. |
파일 모드 변경
앞서 사용자들이 같은 그룹원이나 기타 사용자들에게도 원한다면 권한을 줄 수 있다고 말했는데, chmod 를 통해 파일 모드를 변경함으로써 접근 권한을 부여할 수 있다.
권한을 부여한다는 것은 예민한 문제이기 때문에 해당 소유물의 소유자(혹은 모든 권한을 갖는 슈퍼유저, 관리자)만이 가능하다.
chmod 는 8진수 숫자 혹은 문자를 넘겨줌으로써 파일 모드를 변경할 수 있다.
8진법 표현
8진수 숫자를 통해 변경하는 것은 간단한 2진법 아이디어로, 하나의 rwx 에 대해서 0~7 까지의 숫자로써 표현하는 것이다.
r 권한을, w 권한을, x 권한을 줄지 말지에 대해서 각각 0과 1로 나타낼 수 있기 때문에, 아래의 표처럼 사용할 수 있다.
.
8진법 | 2진법 | 파일 모드 |
0 | 000 | - - - |
1 | 001 | - - x |
2 | 010 | - w - |
3 | 011 | - w x |
4 | 100 | r - - |
5 | 101 | r - x |
6 | 110 | r w - |
7 | 111 | r w x |
따라서 아래처럼 접근 권한을 변경한다.
chmod 755 filename # rwxr-wr-w
chmod 400 filename # r--------
기호 표현
문자를 통해 권한을 변경하는 것은, rwx 각각에 대해 다른 속성들을 건드리지 않고 하나의 속성에만 설정할 수 있다는 장점이 있다.
문자 표기법은 변경할 사용자, 수행할 명령, 설정해 줄 권한인 3개 부분으로 나뉜다.
변경할 사용자에 대해서는 u, g, o, a 로 지정할 수 있으며, 각각 User, Group, Others, All 에 해당하는 사용자들을 나타낸다.
수행 명령의 경우 + 는 권한 추가, - 는 권한 해제, = 는 지정해주는 권한들만 허용한다는 뜻이다.
설정해 주는 권한은 r w x 그대로 표현해준다.
어렵겠지만 아래 예시를 보면서 이해해보자.
u+x # 소유자에게 실행 권한 추가
g-w # 그룹에게 쓰기 권한 제거
a+rw # 모든 사용자에게 읽기와 쓰기 권한 추가
ug=r # 소유자와 그룹에게 읽기 권한만을 설정(쓰기와 실행 권한은 제거)
o-x,g=rwx # 기타 사용자에게 실행 권한 제거, 그룹에게 모든 권한 설정
'STUDY > Linux' 카테고리의 다른 글
[리눅스] 쉘 환경 (0) | 2021.07.21 |
---|---|
[리눅스] 프로세스 (0) | 2021.07.08 |
[리눅스] 커맨드라인 키보드 기법 (0) | 2021.07.01 |
[리눅스] 확장 제어 (0) | 2021.06.30 |
[리눅스] 확장 (0) | 2021.06.28 |