DAY #9 | 파일 접근 권한 관리

14997 단어 솔데스크linuxlinux

🌎 05 파일 접근 권한 관리


🍔 1) 파일 속성

🍥 1-1) 파일의 속성

번호속성 값의미
1-파일의 종류
2rw-r--r--파일의 소유자, 그룹, 기타 사용자의 파일 접근 권한
31하드 링크의 개수
4root파일 소유자의 로그인 ID
5root파일이 속한 그룹 이름
6158파일의 크기(byte)
7Jun 7 2013파일이 마지막으로 수정된 날짜
8/etc/hosts/파일명
  • 파일의 종류

    • -: 일반(정규) 파일
    • d: 디렉터리 파일
    • l: 심볼릭 링크 파일
    • b: 블록 단위로 읽고 쓰는 블록 장치파일 /dev
    • c: 섹터 단위로 읽고 쓰는 문자 장치파일 /dev
    • p: 파이프 파일(프로세스 간 통신에 사용되는 특수 파일)
    • s: 소켓(네트워크 통신에 사용되는 특수 파일)
  • 파일의 접근 권한

  • file : 지정한 파일의 종류 알려줌

  • groups : 사용자가 속한 그룹 알려줌


🍔 2) 파일 접근 권한

🍥 2-1) 접근 권한 종류

  • r : Read 권한
  • w : Write 권한
  • x : eXecute 권한
권한파일디렉터리
읽기파일을 읽거나 복사할 수 있다.ls 명령으로 디렉터리 목록을 볼 수 있다
(ls 명령의 옵션은 실행 권한이 있어야 사용할 수 있다.)
쓰기파일을 수정, 이동, 삭제할 수 있다.(디렉터리에 쓰기 권한이 있어야 한다.)
즉, 파일이 속해있는 디렉터리에 w 퍼미션이 존재해야 가능
파일을 생성하거나 삭제할 수 있다.
실행파일을 실행할 수 있다(셸 스크립트나 실행 파일의 경우)cd 명령을 사용할 수 있다. 파일을 디렉터리로 이동하거나 복사할 수 있다.

🍥 2-2) 접근 권한 표기 방법

  • r : 4
  • w : 2
  • x : 1
  • rwx : 4+2+1=7
  • rw- : 4+2+0=6
  • r-x : 4+0+1=5


🍥 2-3) 접근 권한 변경 명령

  • chmod : 파일이나 디렉터리의 접근 권한 변경
    • 형식 : chmod [옵션] 권한 파일(디렉터리)


🍔 3) 기호를 이용한 파일 접근 권한 변경

구분문자/기호의미
사용자 카테고리 문자u파일소유자
""g파일 소유 그룹
""o소유자와 그룹 이외의 기타 사용자
""a전체 사용자
연산자 기호+권한 부여
""-권한 제거
""=접근 권한 설정(=초기화)
접근 권한 문자r읽기 권한
""w쓰기 권한
""x실행 권한

  • 변경 예시1
    • u, g, o, - 사용 예시

  • 변경 예시2
    • a 사용 예시

  • 변경 예시3
    • =, + 사용 예시

  • 변경 예시4
    • 소유자도, r 권한이 없으면 읽지 못한다.(그룹에 r권한이 있어도, 소유자 권한부터 체크하기 때문에 읽지 못함)

  • 변경예시 5
    • 디렉터리의 w 권한 제거시, 디렉터리에 속해있는 파일 생성,삭제 불가능
      • 파일 자체의 w 권한 말고, 파일이 속해있는 상위 디렉터리의 w 권한에 따른다.

  • 변경예시 6
    • 디렉터리의 w 권한 부여하면?, 디렉터리에 속해있는 파일 생성,수정,삭제 가능
    • chmod 775 = chmod r=rwx, g=rwx, o=rx

  • 변경예시 7
    • 디렉터리의 x 권한을 제거 시, 디렉터리에 속해있는 파일 이동, 복사 불가능
    • x 퍼미션이 없어, ls 명령어도 불가능
      • 파일에 대한 자세한 정보를 알려면 해당 파일 디렉터리로 이동(접근) 해야된다.

🍔 4) 숫자를 이용한 파일 접근 권한 변경

🍥 4-1) 숫자로 환산하는 방법

  • 2-2) 접근 권한 표기 방법에서 언급했던 내용과 같다.

🍔 5) 기본 접근 권한 설정

리눅스에서는 파일이나 디렉터리를 생성할 때 기본 접근 권한이 자동적으로 설정된다.

  • 일반유저에서 파일과 디렉터리를 생성해본 결과,
  • 파일의 경우 : 664
  • 디렉터리의 경우 : 775

파일의 최대 퍼미션은 666 (파일의 주된 목적은 읽고 쓰기, 실행의 경우 아주 특수한 상황)
디렉터리의 최대 퍼미션은 777
이다. 그런데 왜 생성하면 파일 664, 디렉터리 775로 기본 접근 권한이 설정되는 걸까?

바로 umask 때문이다.

※ root 계정 : 기본 마스크 값 0022
※ 일반 계정 : 기본 마스크 값 0002


🍥 5-1) 기본 접근 권한 확인 및 변경

기본 접근 권한을 확인하고 설정하는 데는 umask 명령을 사용한다.

  • umask : 기본 접근 권한을 출력또는 변경

    • 형식 : umask [옵션] [마스크값]
  • umask : 입력시 기본 마스크 값 0002가 출력, 확인할 수 있다.

    • 맨 앞 0은 다른 용도이고, 002로 확인 할 수있다.

  • 마스크 값이 002일 경우
    • 파일 생성시 최대 퍼미션 666 - 002 하면, 664의 퍼미션이 있는 파일이 생성된다.
    • 디렉터리 생성시 최대 퍼미션인 777 - 002 하면, 775의 퍼미션이 있는 디렉터리가 생성된다.
  • umask값을 바꿔야 할때 기준점은 디렉터리
    • 파일을 기준으로 마스크값 설정시, 최대 값이 6으로 설정할텐데, 6을 마스크 값 해놓고, 디렉터리도 전부 0으로 될 거라고 생각하면 큰 오산이다.
    • 디렉터리의 최대 퍼미션은 7이기 때문에 1 값이 남게되고 결국 x 퍼미션이 마스크로 거를 수 없다.
  • 예시 umask 007
    • 파일의 경우 660, 디렉터리의 경우 770

  • 개인 풀이와 기본 접근 권한 정리
  • 예시 $umask 0002 $umask -S ( ), ()안에 들어갈 내용은?
    • u=rwx, g=rwx, o=rx

일반 유저 기본 접근 권한이 002 인데 맨 앞0은 다른 용도고..
루트 유저 기본 접근 권한은 보통 022

002 기준으로 설명하자면,
사용자 : 0 그룹 : 0 기타 : 2 라는 말
-S 옵션은 마스크 값을 "문자"로 출력 하라는 것

002를 문자로 출력해야하니까
u=rwx, g=rwx, o=rx 나올 것이다.

o에서 w는 어디갔냐?
w는 숫자2에 해당하고 마스크라는 뜻 자체가 일부분을 가리는 기능이기 때문에 사라진 것

가린다는 기능이, 결국 유저나 루트유저가 파일이나 디렉터리 생성이 부여하지 않을 권한을 지정해놓는 것.
파일은 666, 디렉터리는 777 을 기준으로 삼아서 생성.

기본 접근 권한, 즉 umask로 확인한 마스크 값이 002 라서.

파일 생성시 664, rw-rw-r--
디렉터리 생성시 775, rwxrwxr-x


🍔 6) 특수 접근 권한 설정

umask 명령 실행시, 맨 앞 숫자의 의미가 존재한다. 0일 경우 생략 하지만, 4, 2, 1 에 경우 아래와 같다.

  • 4xxx 일 경우 : SetUID
  • 2xxx 일 경우 : SetGID
  • 1xxx 일 경우 : Sticky bit

SetUID는 파일에만 적용된다.

SetGID는 파일과 디렉터리 모두 적용된다.

Sticky Bit는 디렉터리에만 적용된다.

파일디렉터리
SetUIDo영향 없음
SetGIDoo
Stiky Bit영향 없음o


🍥 6-1) SetUID

  • SetUID가 설정된 파일을 실행하면, 해당 파일이 실행되는 동안에는 파일 소유자의 권한이 적용된다.
  • SetUID가 설정되면 소유자의 실행 권한에 s가 표시된다.

SetUID는 파일에만 적용된다.

  • 예시

    • cloud 계정으로 passwd 명령을 실행해도, root 계정의 권한이 적용된다.
  • 특수 퍼미션 삭제 예시

    • chmod 0775

🍥 6-2) SetGID

  • SetGID가 설정된 파일을 실행하면, 해당 파일이 실행되는 동안에는 파일 소유 그룹의 권한으로 실행된다.
  • SetGID가 설정되면 그룹의 실행 권한에 s가 표시된다.

SetGID는 파일과 디렉터리 모두 적용된다.

  • 디렉터리에 적용 시 : 공유 목적으로 사용
    • chmod 2775 projectA 할 시
      • projectA의 모든 파일, 모든 서브디렉터리들은 소유 그룹을 상속 받는다.
      • 즉, aaa 유저가 만든 report1 파일도, sales라는 그룹을 상속 받는 것.
  • 특수 퍼미션 삭제 예시
    • chmod g-s : 숫자를 이용해서 권한 제거 불가능

  • chgrp : 소유그룹 변경
    • 형식 : chgrp 바꿀 소유그룹명 파일
  • groupadd : 그룹 추가
    • 형식 : groupadd 그룹명

🍥 6-3) Sticky Bit

  • 디렉터리에 스티키 비트가 설정되어 있으면, 디렉터리에는 누구나 파일을 생성할 수 있다.
  • Sticky bit가 설정되면 기타 사용자의 실행 권한에 *t`가 표시된다.
  • 파일은 파일을 생성한 계정으로 소유자가 설정, 다른 사용자가 생성한 파일 삭제 불가능 (/tmp 디렉터리와 같다)

Sticky Bit는 디렉터리에만 적용된다.


😋 Quiz

# 1번 문제
mkdir /binbackup
chmod 750 /binbackup

# 2번 문제
cp /usr/bin/[byz]* /binbackup

# 3번 문제
cd /binbakcup
mv znew z.bak

# 4번 문제
touch -t 200212252356 btmon

# 5번 문제
cd ~
ln -s /binbackup testlink

# 6번 문제
vi /etc/hosts

192.168.56.101 server1.test.com server1

:w /tmp/hosts.bak
:q!

# 7번 문제
# root 계정
mkdir /share
groupadd finan
chmod 775 /share
chgrp finan /share
# finan 그룹의 usera 소유자 계정
touch 1.txt # ll 확인 시, 여전히 usera usera
# root 계정
chmod 2775 /share # chmod g+s
# finan 그룹의 usera 소유자 계정
touch 2.txt # ll 확인 시, usera finan

# 8번 문제
mv /binbackup/yes /share

# 9번 문제
head -7 /etc/services > /share/1.txt

# 10번 문제
grep -v nologin /etc/passwd >> /share/1.txt

# 11번 문제
vi ~/.bashrc
alias vi=vim
umask 027
. ~/.bashrc # 즉시 확인 가능, 원래는 로그인할때 확인

which date # 결과, /usr/bin/date
vi ~/.bash_profile
/usr/bin/date
DBCON=localhost
export PATH DBCON
. /root/.bash_profile # 즉시 확인
env | grep DBCON # DBCON에 대한 환경변수 전부 출력

👉 Reference

좋은 웹페이지 즐겨찾기