[Linux]권한 및 소유권 관리를 위한 리눅스 명령어들

이 번에는 리눅스 파일 및 디렉토리의 권한 및 소유권 관리를 위한 명령어들을 정리해 봅니다. chmod는 주로 shell script 파일의 실행권한을 부여할 때 사용하고 chown 명령어는 외부 자료나 외부 패키지를 설치하고 소유권을 부여할 때 사용합니다. 그리고 chattr은 주요 환경 설정 파일이나 삭제해서는 안되는 실행 파일에 설정해서 임의의 변경이나 삭제 등으로부터 파일을 보호할 수 있습니다.

  • chmod : 파일 및 디렉토리의 권한 수정
  • chown : 파일 및 디렉토리의 소유자계정 및 소유그룹 변경
  • chgrp : 파일 및 디렉토리의 소유그룹 변경
  • chattr / lsattr : 파일의 속성을 변경/출력
  • setfacl / getfacl : 그룹에 속해있지 않는 사용자에게 해당 그룹 소유의 파일에 권한(rwx)을 설정/설정값 출력

chmod [옵션] 권한 {파일|디렉토리}

  • 파일 및 디렉토리에 읽기/쓰기/실행 권한을 부여 또는 제거하는 명령어
  • UNIX와 Linux는 파일/디렉토리에 대한 접근 권한 및 종류를 나타내기 위해 16bit 사용
     1 ~  4 bit : 파일/디렉토리의 종류(`file` 명령으로 확인)
     5 ~  7 bit : 특수권한 (4-setuid, 2-setgid, 1-sticky bit)
     8 ~ 10 bit : owner 권한
    11 ~ 13 bit : group 권한
    14 ~ 16 bit : other 권한
    
  • [옵션] -R: 하위 디렉토리 및 파일에 모두 적용
  • owner/group/other 권한 부여 방법
    – 권한은 문자(rwx)와 숫자([0-7])로 표현 가능(0:—, 1:–x, 2:-w-, 3:-wx, 4:r–, 5:r-x, 6:rw-, 7:rwx)

    권한 파일 디렉터리
    r 파일 내용을 볼 수 있는 권한 디렉터리 내부의 내용을 볼 수 있는 권한
    w 파일의 내용을 수정할수 있는 권한 디렉터리 내부에 파일 생성 및 삭제 할 수 있는 권한
    x 파일의 내용을 실행시킬 수 있는 권한 디렉터리 내부로 접근 할 수 있는 권한

    – 파일/디렉토리 생성 시 초기 권한은 “/etc/login.defs” 파일의 UMASK 지시자에 설정된 값(default값 022)를 따른다

  • owner/group/other 권한 부여 예제
  • ## 지정된 파일 또는 디렉토리에 대해 모든 사용자에게 모든 권한 부여 ##
    chmod 777 {file명 | directory명}
    chmod u=rws,g=rwx,o=rwx{file명 | directory명}
    chmod a=rwx {file명 | directory명}
    ## 지정된 파일 또는 디렉토리에 대해 +/-를 사용해 권한을 추가 부여 또는 삭제 ##
    chmod 754 {file명 | directory명}
    chmod u=rwx,g-w,u-wx {file명 | directory명}
    
  • 특수권한 설정
    – passwd, su 명령어 및 /tmp 디렉토리는 특수권한이 설정되어 있음
    – setuid(4)

    • root만 접근가능한 파일이나 명령에 대해, 일반 사용자로 접근하는 것이 필요할 경우
    • 사용자가 파일을 실행했을 때 해당 사용자의 권한이 아닌 파일의 소유자 권한으로 실행
    • chmod u+/-s {파일|디렉토리}
    • `find / -perm -4000 -ls` 명령어를 통해 확인
    • ls -lF $(which passwd) & ls -lF $(which su)
      -rwsr-xr-x. 1 root root 27936  3월 23  2019 /bin/passwd*
      -rwsr-xr-x. 1 root root 32208  3월 22  2019 /bin/su*
      

    – setgid(2)

    • 유효 그룹 ID(EGID)를 사용자의 실제 그룹ID에서 파일 소유자의 그룹ID로 변경
    • chmod g+/-s {파일명|디렉토리}
    • `find / -perm -2000 -ls` 명령어를 통해 확인
    • chmod g+s dir1
      ls -ldF dir1
      drwxr-sr-x 2 root root 6  8월  7 07:31 dir1/
      

    – sticky bit(1)

    • 파일의 sticky bit는 무시, 특정 디렉토리를 누구나 자유롭게 사용할 수 있도록 설정
    • 다른 사용자가 생성한 파일 삭제 불가(`chmod o+w` 권한이 있을 경우 수정은 가능)
    • chmod o+/-t 디렉토리
    • `find / -type d -perm -1000 -ls` 명령어를 통해 확인
    • ls -ldF /tmp
      drwxrwxrwt. 11 root root 4096 Feb 14 23:08 /tmp/
      

chown [-hR] 소유자:소유그룹 {파일|디렉토리}

  • chown은 root 사용자만 사용. 그래서 보통 sudo와 함께 사용
  • 옵션 -R : 하위 디렉토리 및 파일에 모두 적용
  • 옵션 -h: 심볼릭(소프트) 링크 파일 자체의 소유자 및 소유그룹 변경
    심볼릭 링크 파일에 -h 옵션을 사용하지 않으면 링크된 원본 파일의 소유자자:소유그룹이 변경된다.
  • chown 소유자 {파일|디렉토리} : 소유자만 변경
  • chown :소유그룹 {파일|디렉토리} : 소유그룹만 변경(==`chgrp [-R] 소유그룹 {파일|디렉토리}`)

chattr [옵션] [오퍼레이터][속성] {파일명|디렉토리} / lsattr 파일명

  • chattr [옵션] [오퍼레이터][속성] {파일명|디렉토리}
    • [옵션]
      -R: 현재 디렉터리 이하의 모든 디렉터리와 파일의 속성을 변환
      -V : 변환된 속성의 자세한 정보를 출력
    • [오퍼레이터]
      +: 속성 추가
      -: 속성 제거
      =: 지정된 속성만 설정(“=”만 사용할 경우 모든 속성 초기화)
    • [속성]
      i: 파일의 삭제(rm),이름변경(mv),데이터 수정 및 추가, 링크 모두 방지
      a: 데이터 추가(>>)만 가능
      A: 파일에 접근할 때 atime의 수정 방지
      d: dump 명령어로 백업할 때 제외(“/etc/fstab” 파일의 다섯 번째 필드 참고)
  • lsattr 파일명: 지정한 파일에 chattr 명령어로 설정된 속성 출력
  • 사용 예
    touch file1 && lsattr file1
    ---------------- file1
    chattr +a +i file1 && lsattr file1 
    ----ia---------- file1
    chattr -a file1 && lsattr file1
    ----i----------- file1
    

setfacl [옵션] 권한설정 {파일명|디렉토리명} / getfacl [옵션] {파일|디렉토리}

  • setfacl [옵션] 권한설정 {파일명|디렉토리명}
    • [옵션]
      -m: 권한 추가(–modify)
      -x: 권한 삭제
      -b: 모든 권한 초기화(–remove-all)
      -k: 기본 권한 삭제(–remove-default)
      -R: 지정한 디렉토리의 파일 및 하위디렉토리에 대해 재규적으로 ACL 설정
    • 권한설정 – [기본권한]대상:권한
      기본권한
          d:
      대상
          u:uid: – 특정 사용자에 대해 ACL 설정. uid 대신 사용자 이름을 입력해도 된다.
          g:gid: – 특정 그룹에 대해 ACL 설정. gid 대신 그룹 이름을 입력해도 된다.
          m:: – Effective rights mask
          o:: – 다른 사용자에 대해 ACL 설정
      권한
          문자로 r, w, x, -를 아무렇게 조합하거나 숫자로 0에서 7까지의 수를 입력해도 된다.
          예: r, w, rwx, r–, -, —, 0, 7, 000, 007

    • 사용 예
      ## /shared 디렉토리에 새로운 파일이 생성될 때 jeno사용자에게 rwx 기본 권한 부여 ##
      setfacl -m d:u:jeno:rwx /shared
      
      ## root사용자에서 읽기 권한 부여 ##
      setfacl -m u:root:r <파일명>
      
      ## root사용자에게 부여된 ACL 제거하기 ##
      setfacl -x u:root <파일명>
      
      ## 모든 사용자 및 그룹에게 읽기/쓰기 권한 부여 ##
      setfact -m m::rw 파일명
      
      ## file1의 ACL정보를 file2에 그대로 적용 ##
      getfact file1 | setfact --set-file=- file2
      
  • getfacl [옵션] {파일명|디렉토리명}
    • [옵션]
      -a: 파일의 ACL 출력(default)
      -d: 기본 ACL 출력
      -R: 모든 파일과 디렉토리를 재귀적으로 탐색하여 ACL 정보 출력
      -p 절대경로: 파일명에 절대경로까지 포함
    • 사용 예
      getfacl /etc/passwd
      getfacl: Removing leading '/' from absolute path names
      # file: etc/passwd
      # owner: root
      # group: root
      user::rw-
      group::r--
      other::r--
      

함께 읽어보면 좋은 Contents

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다