땃쥐네

[Linux] 사용자와 그룹, 파일의 소유권과 권한 설정 본문

DevOps/Linux

[Linux] 사용자와 그룹, 파일의 소유권과 권한 설정

ttasjwi 2022. 6. 26. 19:46

파일에 대한 권한 설정을 학습하게 된 계기

팀 프로젝트 과정에서, 배포 ec2에서 현재 nginx가 가리키는 포트를 기록하였다가 변경이 일어날 때마다 변경된 포트로 저장값을 갱신하는 파일을 별도로 생성해 관리하고 있었습니다. (/home/ec-user/service_url.inc)

 

위의 스크립트를 보시면 service_url.inc의 파일 내용을 변경하는 내용이 스크립트에 있습니다.

 

아무 생각 없이 sudo 명령어로 해당 파일을 파일을 생성하고, 배포 실행 스크립트를 진행했다가 뜻하는대로 포트가 변경되지 않던 문제가 있었습니다. 

왜 그랬는가 따져보니, 해당 대상 파일을 root 사용자가 생성했고 해당 파일에 쓰기 권한이 없었기 때문입니다. 저는 이 과정에서 매우 삽질을 했고 파일에 대한 권한 부여 설정에 관해서 깊이 학습해봐야 겠다고 생각하게 됐습니다.


사용자와 그룹

사용자

- 사용자 : 여러 사용자가 사용할 수 있다.

- 최상위 사용자 : root(관리자 권한 - 모든 파일에 대한 권한, ...)

그룹

- 사용자를 생성하면, 같은 이름의 그룹이 생성되고, 사용자는 해당 그룹에 속하게 된다.

- 특정 그룹을 생성하고, 여러 사용자들이 속하게 할 수 있음


사용자, 그룹 관련 파일

/etc/passwd

  • /etc/passwd 에는, 시스템에 등록된 사용자들의 정보들이 담겨 있습니다.
  • 각 라인은 ':'으로 여러 필드들을 구분하고 있습니다.
  • 이름:암호(현재는 암호화됨):uid:gid: ...
    • uid : 유저 식별자
      • 루트의 uid는 0
    • gid : 그룹 식별자
      • 루트의 gid는 0
    • 홈 디렉토리
      • 루트는 /root
      • 일반 사용자는 home/사용자명
    • bash : 사용자의 디폴트 쉘

/etc/group

  • /etc/group에는 시스템에 등록된 그룹 정보들이 담겨있습니다.
  • 그룹명:비밀번호:gid:소속사용자명

사용자 관련 명령어

사용자 추가

  • adduser : 일반 사용자 추가
    • 루트만이 사용자나 그룹을 시스템에 추가할 수 있으므로 관리자 권한을 가지고 실행해야한다. (sudo)
    • 사용법 : adduser [옵션] 사용자명

사용자 전환

  • ubuntu Desktop : gui의 switch account 를 클릭후 다른 계정으로 전환 가능
    • (참고) whoami 명령으로 현재 계정명을 확인할 수 있음
  • su(switch user)
    • root 접속 : 뒤에 아무런 인자를 적지 않으면 root로 스위치
    • su 사용자명 : 현재 계정의 환경변수들을 유지한 채, 대상 계정으로 전환
    • su - 사용자명 : 다른 사용자의 계정으로 전환하고 환경변수까지 그 계정의 상태로 완전히 전환
  • exit : 쉘에서 나옴

사용자 제거

sudo deluser ttascat --remove-home
  • sudo deluser 사용자명 옵션 : 사용자 제거

그룹 관련 명령어(생성, 생성+그룹 지정, 그룹 변경)

 

  • addgroup 그룹명 : 그룹 신규 생성
  • adduser 사용자명 --ingroup 그룹명 : 신규 사용자를 생성하고 지정 그룹에 포함하게 함
  • usermod -G 그룹명 사용자명 : 사용자의 그룹을 변경

파일의 소유권과 권한

파일 권한 보기

- `ls -l`로 확인 시 맨 앞의 10자리 문자로 그 파일의 타입 및 각 유저 계층의 권한을 확인할 수 있음
- 보통 User, Group, Other Users 이 세 가지 기준으로 그 파일에 대한 권한을 구분함

맨 앞 글자 : 파일 종류

  • d : 디렉터리 트리
  • - : 일반 파일
  • l : 심볼릭 링크

파일 권한의 대상 : User, Group, Other Users

  • User : 사용자, 소유자(Owner)
  • Group : 그룹
  • Other Users : 그 외의 다른 사용자

파일에 대한 권한 분류 : Read, Write, Execute

  • Read(r) : 읽기
  • Write(w) : 쓰기, 저장
  • Execute(x) : 실행
    • 실행할 수 있는 파일류
    • 디렉토리

실행이란 말이 잘 안 와 닿을 수 있는데요. 실행은 shell 스크립트와 같이 특정 동작이 실행되는 파일들을 의미합니다. 저희가 이미지를 클릭하면 이미지가 어떤 뷰어를 통해 보이는 것은 이미지를 실행한 것이 아니라, 이미지를 화면에 띄우는 어떤 로직을 수행하는 프로그램이 '실행'되었기 때문에 실행된 것입니다. 일반 파일에는 그래서 실행 권한 자체가 없고 지정도 불가능합니다. 

 

디렉토리에 대해서는 약간 의미가 다른데 어떤 디렉토리를 실행할 수 있다는 것은 접근할 수 있다는 것을 의미합니다. 어떤 디렉토리에 실행 권한이 없으면 권한이 없는 사용자는 접근할 수 없습니다.

 

(예시) 권한이 주어지지 않은 파일에 대해 수정 시도

실제로 터미널에서 시도를 해봐야 와 닿을 수 있으므로 예시를 보겠습니다.

 

zoo 그룹의 kyaru가 testfile을 작성하였습니다.

이 파일의 권한은 644(rw- / r-- / r--)입니다. 이 파일 표기법은 아래에서 설명하겠습니다.

 

파일의 소유자 kyaru는 읽고 쓰는게 가능합니다.

그룹 zoo 사람들과 제 3자인 다른 사람들은 이 파일을 읽는 것만 가능합니다.

실제로 같은 zoo 그룹원인 nyaru로 수정을 시도하면 수정할 수 없다고 뜨네요.


파일 권한 표기법

파일 권한 표기법 - 8진 표기법

파일의 권한을 8진수로 표현하는 방식입니다.

각 숫자 자리는 순서대로 owner, group, other을 의미합니다.

각 자리의 숫자값은 read, write, execute 가능여부 값을 4,2,1로 보고 이 들의 합으로 표현됩니다.

 

예를 들어

7은 read 4 + write 2 + execute 1 이므로, 읽고 쓰고 실행하는 것이 모두 된다는 것을 의미합니다.

5는 read 4 + write 0 + execute 1 이므로, 읽고 실행하는 것은 되지만, write가 되지 않는 것을 의미합니다.

 

그리고 이를 조합하여 755는

owner에게는 read, write, execute가 모두 열려있고

group과 other에게는 read, execute가 열려있음을 의미합니다.

 

앞서 설명하였듯, 디렉토리에 대한 실행 권한은 접근 가능성을 의미하는데 대부분의 디렉토리는 읽고, 실행할 수 있도록 755 권한이 기본적으로 부여되어 있습니다.

파일 권한 표기법 - 의미 표기법

읽기 권한, 쓰기 권한, 실행 권한을 순서대로 r,w,x로 표기하는 표현법입니다.

권한이 없을 경우 -로 표기합니다.

 

예를 들어

rwx는 읽기, 쓰기, 실행 권한이 모두 있음을 의미합니다.

r-x는 읽기, 실행 권한이 있고 쓰기 권한이 없음을 의미합니다.

8진 표기법 의미 표기법 계산식 해석
7 rwx 4 + 2 + 1 모든 권한(읽기, 쓰기, 실행)
6 rw- 4 + 2 + 0 읽기, 쓰기
5 r-x 4 + 0 + 1 읽기, 실행
4 r-- 4 + 0 + 0 읽기
3 -wx 0 + 2 + 1 쓰기, 실행
2 -w- 0 + 2 + 0 쓰기
1 --x 0 + 0 + 1 실행
0 --- 0 + 0 + 0 권한 없음

8진 표기법, 의미 표기법을 한 곳에 모아 그 의미를 정리하면 위 표와 같습니다.


파일 권한 변경 : chmod

  • 파일에 대한 권한을 설정하는 명령어입니다.
  • 명령어의 뜻은 Change Mode로 이해하시면 됩니다.

기본적인 변경법

chmod [options] mode[,mode] file1 [file2 ...]
  • mode에서는 8진 표기법으로 지정
  • user, group, other 순으로 부여
  • read(4), write(2), execute(1)

주요 옵션

  • "-R" : 재귀적으로 파일과 디렉토리들의 모드들을 변경
  • "-v" : 실행되고 있는 모든 파일들 나열

예시

chmod 664 명령어를 확인해보겠습니다. 이 명령어는 다음의 의미를 가집니다.

  • 소유자에게는 읽기, 쓰기 권한을 부여
  • 그룹에게도 읽기, 쓰기 권한을 부여
  • 그 외에게는 읽기 권한만 부여

상대적인 권한 변경

chmod [options] [ugoa+/-rws] file1 [file2 ...]
  • ugoa : user, group, other, all
  • +- : 권한 추가, 제거
  • rwx : read, write, execute

예를 들어, chmod go+rx 명령어의 의미를 확인해보면

그룹 및 다른 사용자에게 읽기 실행 권한 부여하는 것을 의미합니다.

 

 

chmod g+w testfile 명령어는

group에게 write 권한을 추가한다는 의미로 보면 되겠습니다. 비교해보시면 쓰기 권한이 바뀌었죠?


이상으로 리눅스의 사용자와 그룹, 파일의 소유권과 권한 설정에 대한 기본기를 학습하였습니다.

물론 여기서 더 부가적인 기능들은 많기야 하겠지만 기본적인 흐름을 읽고 여기서 추가적으로 구글링을 하면 충분할 것 같다는 생각이 들었습니다.

 

단순히 어떤 내용을 학습하는 것 뿐만 아니라, 이를 정리해서 남들에게 전달할 수 있는 어떤 형태로 가다듬는게 생각보다 어렵네요... 개발을 학습하는 여러분, 오늘도 화이팅입니다....!

Comments