본문으로 바로가기

[Linux] 리눅스 파일 권한 변경하기 - chmod

category OS/Linux 2021. 10. 9. 18:31

목차

    1. 리눅스 파일 상세 정보

    • "ll" 또는 "ls -l"로 파일의 상세 정보를 확인할 수 있습니다.
    • alias ll='ls -l --color=auto'
    • 파일 상세 정보(파일 유형, 퍼미션 정보, 링크 수, 소유자, 소유 그룹, 용량, 수정시간, 파일명)
    # ls -l
    합계 0
    lrwxrwxrwx 1 root root 7 10월  9 15:00 ln_file -> test.sh
    drwxr-xr-x 2 root root 6 10월  9 14:59 test
    -rwxr-xr-x 1 root root 12 10월  9 15:35 test.sh

    1.1. 파일 정보

    • 위에 명령어처럼 "ll" 또는 "ls -l"로 파일의 상세 정보가 출력됩니다.
    • test.sh 파일의 정보를 살펴봅시다.
    -rwxr-xr-x 1 root root 12 10월  9 15:35 test.sh

    리눅스 파일 정보

    1. 유형 
      (d 디렉터리, l(소문자 L) 링크 카운터, s 소켓, p 파이프, - 일반, c 특수문자, b 특수 블록)
    2. 파일 권한 (permission)
    3. 링크 수
    4. 소유자
    5. 소유 그룹
    6. 용량 (기본 byte)
    7. 수정 시간
    8. 파일명

    1.2. 파일 권한(퍼미션)

    • 리눅스는 여러 사용자가 사용하는 멀티 유저 시스템입니다.
    • 여러 사용자가 함께 사용하므로 변조, 수정, 삭제, 보안 등을 위해 파일에 대한 권한이 필요합니다.

    1.2.1. 퍼미션의 종류

     ★ 숫자는 해당 권한을 8진법으로 나타냈을 때의 값입니다.

    • r (읽기 권한) = 4
    • w (쓰기 권한) = 2
    • x (실행 권한) = 1

     ★ 특수 권한으로 몇 가지가 더 있습니다. (이 게시물에서는 다루지 않습니다.)

    • s (SetUID, SetGID 권한) =   SetUID(4), SetGID(2)
    • t (Sticky Bit 권한) = 1 

    1.2.2. 퍼미션의 사용자(대상)

    • user (사용자 권한)
    • group (그룹의 사용자 권한)
    • other (사용자, 그룹이 아닌 다른 사용자 권한)

    1.2.3. 퍼미션 표현

    • 위에서 조회한 "test.sh" 파일의 퍼미션입니다. (rwxr-xr-x)
    • r(read), w(write), e(excute)

    파일 권한

    • 퍼미션 값은 세 자리씩 끊습니다.
    • 순서대로 user, group, other에 대한 퍼미션 값입니다.
    • 처음 3개 문자 = user의 권한(모든 권한)중간 3개 문자 = group의 권한(읽기, 실행)마지막 3개 문자 = other의 권한(읽기, 실행)

    파일 권한 문자 표현

    • 퍼미션은 8진수로도 표현할 수 있습니다. (각 사용자별 권한의 합계) 
    • r(4), w(2), e(1)

    퍼미션 8진법 표현

     


    2. chmod

    # chmod [옵션] [모드] [파일]
    
    [옵션]
    	-c, --changes : 권한 변경이 올바로 일어난 파일들만 자세하게 보여준다.
    	-f, --silent, --quiet : 권한 변경이 일어나지 않을 경우 보여주는 오류 메시지를 보이지 않게 한다.
    	-v, --verbose : 각 파일들의 모드 변경 상태를 모두 보여준다.
    	-R, --recursive : 파일과 그 디렉토리의 아래까지 모두 바꾼다.
        
    [모드]
    Each MODE is of the form '[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+'.
    파일에 적용할 모드(mode) 문자열
    	u,g,o,a : 소유자(u), 그룹(g), 그 외 사용자(o), 모든 사용자(a) 지정.
    	+,-,=   : 권한 부여(+), 권한 박탈(-), 권한 지정(=)
    	r,w,x   : 읽기 권한(r), 쓰기 권한(w), 실행 권한(x)
    	X       : "디렉토리" 또는 "실행 권한(x)이 있는 파일"에 실행 권한(x) 적용.
    	s       : setuid, setgid
    	t       : sticky(t) bit
    	0~7     : 8진수 형식 모드 설정 값.	
    
    //8진수 모드 권한 변경
    # chmod [퍼미션 값] [파일]
    # chmod [0-7] [파일]
    
    //문자 모드 권한 변경
    # chmod [옵션] [대상] [연산자] [권한] [파일]
    # chmod [옵션] [ugoa] [-+=] [rwx-] [파일]

    2.1. 8진수 모드 예시

    권한 8진수 값

    • 8진수 모드는 read(4), write(2), excute(1)를 8진수 형태로 바꾸는 것을 이용해서 user, group, other에 대한 파일 권한 표현입니다.
    • 퍼미션의 대상(user, group, other) 별로 각 퍼미션 기호를 8진수의 숫자로 변경 후 변환한 숫자를 합산합니다.
    • 예시) user(rwx), group(r-x), other(r-x) = (4+2+1) (4+1) (4+1)  = 755(퍼미션 값)
    // user, group other 모든 권한을 부여
    # chmod 777 test.sh
    
    // user, group other 모든 권한을 박탈
    # chmod 000 test.sh
    
    // user은 모든 권한 group, other 읽기, 실행 권한
    # chmod 755 test.sh
    
    // user은 읽기, 쓰기 권한 
    // group, other 읽기 권한 
    // 특정 디렉터리 내에 모든 파일 까지 권한을 부여(-R)
    # chmod -R 644 test_dir/

    2.2. 문자 모드 예시

    문자 모드

    • "대상 + 권한 연산자 + 권한" 세 문자열을 이용해 권한을 부여 및 박탈합니다. 
    • 권한 대상 : u(user 소유자), g(group 그룹), o(other 다른 사용자), a(all 모든 사용자)
    • 권한 연산자 : +(권한 부여), -(권한 박탈), =(권한 지정)
      • =(권한 지정)은 현재 파일의 상태를 신경 쓰지 않고 새롭게 권한을 부여를 하는 것입니다.
      • +(권한 부여), -(권한 박탈)은 현재 파일의 권한 상태를 바탕으로 부여 또는 박탈하는 것입니다.
    • 권한 : r(read), w(write), x(excute)
    • 만들어진 문자열은 공백(Space)이 있으면 안 됩니다.
    • 예시) user에게 읽기, 실행 권한을 부여 = u+rx

    u+rx

    // user(소유자)에게 모든 권한을 부여합니다.
    # chmod u+rwx test.sh
    
    // other(다른 사용자)에게 쓰기, 실행 권한을 박탈합니다.
    # chmod o-wx test.sh
    
    // all(모든 사용자)에게 모든 권한을 박탈합니다.
    # chmod a-rwx test.sh
    
    // group(그룹), other(다른 사용자)에게 실행 권한을 부여합니다.
    # chmod go+x test.sh
    # chmod g+x,o+x test.sh
    
    // user(소유자)에게 읽기, 쓰기권한 | group(그룹)과 other(다른 사용자)에게 읽기 권한만 부여 합니다.
    # chmod u=rw,go=r test.sh
    # chmod u=rw,g=r,o=r test.sh
    
    // user(소유자)는 읽기, 쓰기 권한 | group, other 읽기 권한 
    // 특정 디렉터리 내에 모든 파일 까지 권한을 부여합니다.(-R)
    # chmod -R u=rw,g=r,o=r test_dir/