ownership, permission

Date:     Updated:

카테고리:

태그:

Ownership

  • 소유권(ownership)

    • 개체에 대한 소유자와 소유 그룹

    • Linux 시스템의 모든 개체(파일 및 디렉터리)는 소유자와 소유 그룹이 지정되어 있음

    • 파일 생성 시 파일을 생성한 계정이 파일의 소유자가 됨

    • 파일 생성 시 파일을 생성한 계정의 기본 그룹이 파일의 소유 그룹이 됨

    • 명령어를 이용해 소유자와 소유 그룹 변경 가능

    • 확인

      [root@KH-Linux~]# ls -l [파일 이름]

      제목 없음

소유권 변경

파일

  • 만든 사람이 소유

화면 캡처 2022-11-20 202405

  • 파일의 소유자 변경

    [ktest@localhost ~]$ chown test01 /home/ktest/1.txt
    

    화면 캡처 2022-11-20 214727

  • root 계정으로 변경 시도

    [root@localhost ~]# chown test01 /home/ktest/1.txt
    [root@localhost ~]# ls -al /home/ktest/1.txt
    

    화면 캡처 2022-11-20 214943

  • 소유 그룹 변경

    [root@localhost ~]# ls -al /home/ktest/1.txt
    -rw-rw-r-- 1 test01 test01 0 11월 20 20:23 /home/ktest/1.txt
    

    화면 캡처 2022-11-20 215251

    [root@localhost ~]# chgrp ktest /home/ktest/1.txt
    [root@localhost ~]# ls -al /home/ktest/1.txt
    

    화면 캡처 2022-11-20 220058

디렉터리

  • 소유권 변경

    [ktest@localhost ~]$ mkdir ./test
    [ktest@localhost ~]$ touch ./test/1.txt
    [root@localhost ~]# chown test01:test01 /home/ktest/test/
    [root@localhost ~]# ls -ld /home/ktest/test
    

    image-20221120225757239

  • 디렉터리안의 파일 소유권 확인

    [root@localhost ~]# ls -al /home/ktest/test/1.txt
    

    화면 캡처 2022-11-20 225925

  • 하위 파일까지 소유권 변경

    [root@localhost ~]# chown -R test01:test01 /home/ktest/test/1.txt
    [root@localhost ~]# ls -al /home/ktest/test/1.txt
    

    화면 캡처 2022-11-20 230208

Permission

  • 허가권(Permission)
    • 멀티 유저 환경에서 개체(파일, 디렉터리 등)에 접근할 수 있는 자격

    • 개체를 읽거나(read), 쓰거나(write), 실행(execute)하는 행위

    • 소유자(user), 소유 그룹(group), 나머지 사용자(other) 단위로 권한을 부여 함

    • 확인

      [root@KH-Linux~]# ls -l [파일 이름]

      화면 캡처 2022-11-20 230918

      화면 캡처 2022-11-20 231105

      화면 캡처 2022-11-20 231119

    • 파일 형식을 제외한 10자리의 문자

일반 퍼미션

  • 허가권 종류

    화면 캡처 2022-11-20 231245

  • 파일의 퍼미션

    r

    • ktest는 other의 permission 적용

      [root@localhost ~]# touch > /home/ktest/test.txt
      [root@localhost ~]# ls -al /home/ktest/test.txt
      

      화면 캡처 2022-11-20 234122

      [ktest@localhost ~]$ vi /home/ktest/test.txt
      

      화면 캡처 2022-11-20 232415

    w

    • ktest 에서 소유권 변경후 편집 확인

      [root@localhost ~]# chown ktest:ktest /home/ktest/test.txt
      [ktest@localhost ~]$ ls -al /home/ktest/test.txt
      

      화면 캡처 2022-11-20 234500

      [ktest@localhost ~]$ echo hi > /home/ktest/test.txt
      [ktest@localhost ~]$ cat /home/ktest/test.txt
      

      화면 캡처 2022-11-20 234750

    x

    • 실행 - 현재경로 : ./파일명 , 절대경로 : 경로/파일명

      [ktest@localhost ~]$ ./test.txt
      

      화면 캡처 2022-11-20 235144

    • 실행 실패 이유는 실행퍼미인 x가 없기 때문

      [ktest@localhost ~]$ ls -al /home/ktest/test.txt
      

      화면 캡처 2022-11-20 234355

    • 실퍼미션 부여

      [root@localhost ~]# chmod u+x /home/ktest/test.txt
      [root@localhost ~]$ ls -al /home/ktest/test.txt
      

      화면 캡처 2022-11-20 235633

    • 다시 실행

      [ktest@localhost ~]$ ls -al /home/ktest/test.txt
      

      화면 캡처 2022-11-20 235832

  • 디렉터리 퍼미션

    [root@localhost test01]# mkdir /home/ktest/d
    [root@localhost test01]# ls -ld /home/ktest/d
    

    화면 캡처 2022-11-21 000035

    r

    • 디렉터리에서 r 은 ls이다

      [root@localhost test01]# echo hello > /home/test01/d/d.txt
      

      화면 캡처 2022-11-21 000535

    w

    • 디렉터리에서 w는 touch이다

      [ktest@localhost d]$ touch /home/ktest/d/d2.txt
      

      화면 캡처 2022-11-21 000703

      화면 캡처 2022-11-22 122813

    • 삭제도 생성과 마찬가지로 거부당한다

      [ktest@localhost d]$ rm -rf /home/ktest/d/d.txt
      

      화면 캡처 2022-11-22 123218

    • d 디렉터리에 w 퍼미션 부여

      [root@localhost ~]# chmod o+w /home/ktest/d
      [root@localhost ~]# ls -ld /home/ktest/d
      

      화면 캡처 2022-11-22 123738

    • 다시 생성 시도

      [ktest@localhost ~]$ touch /home/ktest/d/d2.txt
      [ktest@localhost ~]$ ls /home/ktest/d
      

      화면 캡처 2022-11-22 123940

    x

    • 디렉터리에서 x 는 cd 이다

      [root@localhost ~]# ls -al /home/ktest/d
      

      화면 캡처 2022-11-23 111418

      [ktest@localhost ~]$ cd /home/ktest/d
      

      화면 캡처 2022-11-23 111502

퍼미션 부여

  • symbolic(상대)

    [root@localhost d1]# chmod a-rwx ./d.txt
    [root@localhost d1]# ls -al ./d.txt
    

    화면 캡처 2022-11-26 152421

    [root@localhost d1]# chmod u+r,g+r,o+r ./d.txt
    

    화면 캡처 2022-11-26 154132

    [root@localhost d1]# chmod a=w ./d.txt
    

    화면 캡처 2022-11-26 154227

    [root@localhost d1]# chmod a+r ./d.txt
    

    화면 캡처 2022-11-26 154346

  • numeric(절대)

    r = 4, w = 2, x = 1

    [root@localhost d1]# chmod 777 ./d.txt
    

    화면 캡처 2022-11-26 154653

    [root@localhost d1]# chmod 000 ./d.txt
    

    화면 캡처 2022-11-26 154849

    [root@localhost d1]# chmod 755 ./d.txt
    

    화면 캡처 2022-11-26 155116

    [root@localhost d1]# chmod 644 ./d.txt
    

    화면 캡처 2022-11-26 155510

  • umask

    • 파일 , 디렉터리 생성시 자동으로 생성되는 퍼미션

    • 기본 디렉터리는 777 , 파일은 666 에서 umask(022) 를 제외

      [root@localhost ~]# umask
      

      화면 캡처 2022-11-26 160820

      777-022 = 755 = rwxr-xr-x
      [root@localhost ~]# mkdir ./test
      [root@localhost ~]# ls -ld ./test
      

      화면 캡처 2022-11-26 161004

      666-022 = 644 = rw-r--r--
      [root@localhost ~]# touch ./test/test.txt
      [root@localhost ~]# ls -al ./test/test.txt
      

      화면 캡처 2022-11-26 162434

    • umask 값을 변경 : 임시로 변경됨

      [root@localhost ~]# umask 000
      

      화면 캡처 2022-11-26 162737

    • umask 영구변경

      # vi /etc/profile
      

special permission

  • 특수 권한(Special Permission)
    • 시스템 관리의 효율성을 높이기 위해 사용하는 특별한 권한

    • 보안의 취약점이 될 수 있으므로 꼭 필요한 경우가 아니면 사용하지 않는 것이 좋음

      화면 캡처 2022-12-02 120105

setuid

  • Setuid (4000 = u+s)
    • 파일을 실행하는 동안 해당 파일의 소유주의 권한으로 실행

    • 일반적인 실행은 파일을 이용하려는 사용자의 소유권에 의해 실행권한이 부여되지만, setuid 권한이 적용 되어 있는 파일은 실행되는 동안은 사용자가 아닌 파일의 소유주의 권한을 할당 받음

    • 실행 파일에만 설정이 가능 함

    • 소유자의 허가권에서 실행 권한이 x가 아닌 s로 표시 됨(예 : rwsr–r–)

    • 예 (passwd)

      패스워드를 변경하면 /etc/shadow 파일의 읽기 및 쓰기 권한을 가지고 있어야지 패스워드를 기록할수 있음

      passwd 실행 파일에 setuid 권한이 부여 되어 있으므로 passwd 명령이 실행되는 동안은 소유주의 권한(root)으로 동작하게 됨

  • 실습

    • passwd

      # ls -l /usr/bin/passwd 
      

      화면 캡처 2022-12-02 120858

    • permission : 4755 -> 755

      # chmod 755 /usr/bin/passwd
      # ls -l /usr/bin/passwd
      

      화면 캡처 2022-12-02 121259

    • 바뀐 퍼미션으로 비밀번호 변경(root 제외 테스트)

      퍼미션이 755 일때
          
      [test01@localhost ~]$ passwd
      

      화면 캡처 2022-12-02 121748

    • setuid 적용 후 다시 비밀번호 변경

      # chmod 4755 /usr/bin/passwd
                 또는
      # chmod u+s /usr/bin/passwd 
      # ls -l /usr/bin/passwd
      

      화면 캡처 2022-12-02 120858

      [test01@localhost ~]$ passwd
      

      화면 캡처 2022-12-02 122803

setgid

  • Setgid (2000 = g+s)

    • 파일을 실행하는 동안 해당 파일의 소속 그룹 권한으로 실행

    • 파일이 실행되는 동안은 사용자가 아닌 파일의 소속 그룹 권한을 할당 받음

    • 파일 및 디렉터리에서 설정 가능

    • 소속 그룹의 허가권에서 실행 권한이 x가 아닌 s로 표시 됨(예 : rwxr-sr–)

    • 디렉터리 적용

      setgid가 적용된 디렉터리의 하위에 생성되는 디렉터리도 동일하게 setgid가 설정 됨

      setgid가 적용된 디렉터리 안에서 새로운 디렉터리를 생성하면 setgid에 명시된 소속그룹으로 설정됨

  • 실습

    • setgid 가 적용된 파일 찾기

      [root@localhost ~]# find / -perm -2000
      

      화면 캡처 2022-12-02 123345

    • /usr/bin/wall 의 setgid 를 변경

      [root@localhost ~]# chmod g-s /usr/bin/wall
      [root@localhost ~]# ls -l /usr/bin/wall
      

      화면 캡처 2022-12-02 123826

    • wall을 사용하여 message 전달시도

      [ktest@localhost ~]$ wall hi
      

      화면 캡처 2022-12-02 124250

    • setgid 복구 후 다시 시도하기

      [root@localhost ~]# chmod g+s /usr/bin/wall
      [root@localhost ~]# ls -l /usr/bin/wall
      

      화면 캡처 2022-12-02 124522

      [ktest@localhost ~]$ wall hi
          
      Broadcast message from ktest@localhost.localdomain (pts/1) (Fri Dec  2 12:46:03 2022):
          
      hi
      

      화면 캡처 2022-12-02 124628

stickbit

  • Sticky bit (1000 = o+t)
    • 모든 소유권에 모든 허가권을 부여하지만 삭제는 소유주만 가능 함
    • 디렉터리에 설정 함
    • 나머지 사용자(other)의 허가권에서 실행 권한이 x가 아닌 t로 표시 됨(예 : rwxr-xr-t) - /tmp, /var/tmp에 적용되어 있음
    • 기본 소유권과 허가권을 먼저 확인하기 때문에 기본 허가권에 삭제 권한이 있으면 삭제가 가능 함
  • 실습

    • 디렉터리 안에서 ktest 로 만든 파일을 test01 로 삭제되는지 확인

      [root@localhost ~]# mkdir /stickytest
      [root@localhost ~]# chmod 777 /stickytest
      [ktest@localhost stickytest]$ touch ./1.txt
      [test01@localhost stickytest]$ rm -rf 1.txt
      [test02@localhost stickytest]$ ls -l
      

      화면 캡처 2022-12-06 154806

    • 1xxx 부여후 /stickytest 디렉터리 안에서 ktest 로 만든 파일을 test01 로 삭제되는지 확인

      [root@localhost stickytest]# chmod 1777 /stickytest
      [root@localhost stickytest]# ls -ld /stickytest/
      

      화면 캡처 2022-12-06 175002

      [ktest@localhost stickytest]$ touch ./1.txt
      [test01@localhost stickytest]$ rm -rf ./1.txt
      

      화면 캡처 2022-12-06 175330

      stickbit 때문에 소유자가 다른 파일은 삭제 불가

확장 퍼미션 : ACL

  • 확장 권한(ACL)

    • 기본적인 소유권과 허가권 외의 세부설정이 필요한 경우 사용되는 permission

    • 파일 및 디렉터리에 특정 소유자/소유 그룹의 권한을 부여할 때 사용 함

    • 파일 및 디렉터리의 세부 정보 중에서 권한 정보(rw-r–r–.)의 마지막 10번째 값으로 권한 ACL설정 여부를 확인 함

      화면 캡처 2022-12-06 201014

File ACL

  • 디렉터리 및 파일 생성

    # mkdir /aclfiletest
    # touch /aclfiletest/file1
    
  • getfacl : 확장 퍼미션 확인

    • 파일 및 디렉터리에 설정된 권한 ACL 확인

    • 사용법 - [root@KH-Linux~]# getfacl [옵션] <파일 이름="">

      화면 캡처 2022-12-06 201613

      [root@localhost ~]# getfacl /aclfiletest/file1
      

      화면 캡처 2022-12-06 201950

      [root@localhost ~]# getfacl /aclfiletest/file1
      

      화면 캡처 2022-12-06 202007

  • setfacl : 확장 퍼미션 부여

    • 파일 및 디렉터리에 설정된 권한 ACL 설정

    • 사용법 - [root@KH-Linux~]# setfacl <옵션> <정책> <파일 이름="">

      화면 캡처 2022-12-06 210646

      [root@localhost ~]# setfacl -m u:ktest:rw /aclfiletest/file1
      
  • 확인

    • 퍼미션 확인

      [root@localhost ~]# ll /aclfiletest/file1
      

      화면 캡처 2022-12-06 210923

    • w 퍼미션 확인

      ktest 로 vi 파일 편집
          
      [ktest@localhost ~]$ vi /aclfiletest/file1 
      

      화면 캡처 2022-12-06 212648

    • r 퍼미션 확인

      test01 로 vi 파일 편집
          
      [test01@localhost ~]$ vi /aclfiletest/file1 
      

      화면 캡처 2022-12-06 212706

  • setfacl 설정후 그룹 퍼미션은 그룹의 아닌 추가된 사용자의 퍼미션으로 활용된다

    [root@localhost ~]# getfacl /aclfiletest/file1 
    

    화면 캡처 2022-12-06 213302

  • mask 는 실제 사용가능한 퍼미션의 범위

    • 최대 퍼미션을 부여하더라도 ktest 확장퍼미션 영향 없다

    • mask의 변화는 group 퍼미션에 영향 없다

      [root@localhost ~]# chmod 777 /aclfiletest/file1 
      [root@localhost ~]# getfacl /aclfiletest/file1 
      

      화면 캡처 2022-12-07 113632

    • mask 를 제어해서 ktest 의 퍼미션을 제한하는 첫번째 방법

      r퍼미션만 부여
          
      [root@localhost ~]# chmod 747 /aclfiletest/file1 
      [root@localhost ~]# getfacl /aclfiletest/file1 
      

      화면 캡처 2022-12-07 115112

      확인
          
      [ktest@localhost ~]$ vi /aclfiletest/file1
      

      화면 캡처 2022-12-07 115213

    • mask 를 제어해서 test01 의 퍼미션을 제한하는 두번째 방법

      [root@localhost ~]# setfacl -m u:test01:rw /aclfiletest/file1
      [root@localhost ~]# setfacl -m m::r /aclfiletest/file1 
      [root@localhost ~]# getfacl /aclfiletest/file1 
      

      화면 캡처 2022-12-07 121748

Directory ACL

  • ktest 디렉터리 rwx 퍼미션 부여

    [root@localhost ~]# mkdir /acldirtest
    [root@localhost ~]# setfacl -m u:ktest:rwx /acldirtest
    [root@localhost ~]# getfacl /acldirtest
    

    화면 캡처 2022-12-07 212231

  • ktest, test01로 접근하여 파일 생성되는지 확인

    ktest로 파일 생성
      
    [ktest@localhost ~]$ touch /acldirtest/file1
    [ktest@localhost ~]$ ll /acldirtest/
    

    화면 캡처 2022-12-07 212701

    test01로 파일생성
      
    [test01@localhost ~]$ touch /acldirtest/file1
    

    화면 캡처 2022-12-07 213016

Default ACL

  • 디렉터리에 새로 생성되는 파일/디렉터리 에 기본적으로 부여

  • 디렉터리 퍼미션 확인

    [root@localhost ~]# mkdir /acldefaulttest
    [root@localhost ~]# ls -ld /acldefaulttest/
    

    화면 캡처 2022-12-07 213325

    [root@localhost ~]# getfacl /acldefaulttest/
    

    화면 캡처 2022-12-07 213325

  • other 중에 ktest만 파일을 생성할수 있도록 퍼미션을 부여

    [root@localhost ~]# setfacl -m u:ktest:rwx /acldefaulttest/
    [root@localhost ~]# getfacl /acldefaulttest/
    

    화면 캡처 2022-12-08 125140

  • 파일/디렉터리 생성되는지 확인

    [ktest@localhost ~]$ mkdir /acldefaulttest/d1
    [ktest@localhost ~]$ touch /acldefaulttest/1.txt
    [ktest@localhost ~]$ ll /acldefaulttest/
    

    화면 캡처 2022-12-08 125642

  • Default ACL 적용후 파일 과 디렉터리 생성 비교

    [root@localhost ~]# setfacl -m d:u:ktest:rwx /acldefaulttest/
    [root@localhost ~]# getfacl /acldefaulttest/
    

    화면 캡처 2022-12-08 203712

    [ktest@localhost ~]$ mkdir /acldefaulttest/d2
    [ktest@localhost ~]$ touch /acldefaulttest/2.txt
    [ktest@localhost ~]$ ll /acldefaulttest/
    

    화면 캡처 2022-12-08 203940

    Default ACL 적용전 생성된 파일 
      
    [ktest@localhost ~]$ getfacl /acldefaulttest/1.txt
    

    화면 캡처 2022-12-08 204038

    Default ACL 적용후에 생성된 파일
      
    [ktest@localhost ~]$ getfacl /acldefaulttest/2.txt 
    

    화면 캡처 2022-12-08 204056

R 옵션

  • 하위 구조 까지 모두 확인

    [root@localhost ~]# getfacl -R /acldefaulttest/
    

    화면 캡처 2022-12-08 232601

    화면 캡처 2022-12-08 232638

ACL 백업

하위구조 포함

# getfacl -R --skip-base /acldefaulttest/ > /root/backup-acl.bak

기존 ACL 제거 및 초기화

[root@localhost ~]# setfacl -b /acldefaulttest/
[root@localhost ~]# getfacl /acldefaulttest/

화면 캡처 2022-12-08 232943

기존 ACL 복원

 pwd로 현재 위치 파악이 매우 중요하다
 
 [root@localhost ~]# cd /
 [root@localhost /]# pwd

화면 캡처 2022-12-08 233126

[root@localhost /]# setfacl --restore=/root/backup-acl.bak
[root@localhost /]# getfacl /acldefaulttest/

화면 캡처 2022-12-08 233522


맨 위로 이동하기

centos 카테고리 내 다른 글 보러가기

댓글 남기기