새싹 9일차(리눅스)

고유진·2024년 5월 24일

새싹

목록 보기
7/9

1. 사용자 전환

1. su 명령으로 사용자 전환

  • su [ - ][user-name]

2. sudo

  • sudo [option][user-name] command
  1. sudo 명령은 로그아웃을 하지 않고 특정 사용자의 권한으로 명령을 수행할 수 있습니다.
  2. 이때 사용하는 패스워드는 root 사용자의 패스워드가 아니라 기존에 로그인한 사용자의 패스워드를 사용합니다.
  3. 즉, sudo 명령을 사용하는 시점에만 특정 사용자의 권한을 얻고 명령을 수행한 후는 다시 기존 사용자의 권한으로 돌아오게 됩니다.

2. 확장 권한의 종류

1. setuid

  • setuid는 실행권한이 있는 바이너리 파일 또는 스크립트 파일에만 사용합니다.
  • setuid가 설정되어 있는 파일을 실행하면 파일을 실행한 사용자가 아니라 파일을 소유하고 있는 사용자의 권한으로 프로세스를 실행하게 됩니다.

2. setgid

  • setgid는 setuid처럼 바이너리 파일 또는 스크립트 파일에 설정되어 있으면 명령을 실행할 때 프로세스의 사용자 그룹이 파일의 사용자 그룹으로 실행됩니다.
  • 하지만 setgid는 일반적으로 바이너리 파일보다 디렉토리에 설정하여 사용하는 경우가 많습니다.

3. sticky bit

  • stick bit를 설정하면 파일을 소유한 사용자만 파일을 삭제할 수 있습니다.
  • stick bit는 디렉토리에만 설정할 수 있습니다.

3. 확장 권한 설정

1. 심볼릭 방식

  • setuid 설정(해제) : u+s (u-s)
  • setgid 설정(해제) : g+s (g-s)
  • stick bit 설정(해제) : o+s (o-s)

2. 8진수 방식

  • 8진수 방식으로 표준 권한을 설정할 때에는 chmod ### FILE 형식을 사용합니다.

  • 8진수 방식으로 확장 권한을 설정하려면 8진수를 하나 더 추가하여 chmod #### FILE 형식으로 사용합니다.

  • setuid 설정(해제) : 4

  • setgid 설정(해제) : 2

  • stick bit 설정(해제) : 1

확장권한 실습

  1. /root/setuid 라는 이름으로 빈파일 생성하고 모든 사용자에 대해 실행권한을 설정합니다.
touch /root/setuid
chmod a+s /root/setuid
  1. setuid 권한을 설정해보세요. (문자방식)
chmod u+s /root/setuid
ls -l /root/setuid
  1. /tmp/setgid 라는 디렉토리 생성 후 소유그룹을 wheel 로 변경하고 모든 사용자의 쓰기권한 + setgid 을 주세요.
mkdir /tmp/setgid
charp wheel /tmp/setgid
chmod a+w /tmp/setgid
chmod g+s /tmp/setgid
ls -ld /tmp/setgid
  1. vagrant 사용자로 사용자전환 후, /tmp/setgid/vagrant 라는 이름의 파일 생성
    tom 등의 다른 일반사용자로 사용자전환 후, /tmp/setgid/tom 파일 생성
touch /tmp/setgid/vagrant
su tom
touch /tmp/setgid/tom
  1. /tmp/sticky 디렉토리 생성 후 모두 쓰기권한 부여
mkdir /tmp/sticky
chmod a+w /tmp/sticky
  1. stickybit 권한 설정 후 각 사용자로 파일 생성해보기.
    ( /tmp/sticky/root , /tmp/sticky/vagrant , /tmp/sticky/tom )
chmod o+t /tmp/sticky
touch /tmp/sticky/root
touch /tmp/sticky/vagrant
touch /tmp/sticky/tom
  1. tom 사용자로 파일모두 삭제해보기
su tom
rm -r /tmp/sticky/*
  1. root 사용자로 전부 삭제
sudo -i
rm -r /tmp/sticky/*

4. 접근 제어 리스트(ACL)

  • ACL를 사용하면 파일을 소유한 사용자와 사용자 그룹을 제외한 사용자와 그룹에게 별도로 권한을 부여 할 수 있습니다.

1. 접근 제어 리스트 적용 유무 확인

  • ls -l을 사용

2. 접근 제어 리스트 정보 확인

  • getfacel file-name

3. 접근 제어 리스트의 마스크(ACL mask)

  • ACL의 마스크는 ACL에서 지정된 사용자와 그룹이 사용할 수 있는 최대 권한을 지정합니다.
  • 지정된 사용자나 그룹의 권한이 마스크에 설정된 권한을 벗어나게 되면 필터링 되어 effective가 출력되고 해당 권한이 실질적인 권한으로 적용됩니다.
  • ACL이 적용된 파일의 권한을 변경할 때에는 setfacl 명령으로 권한을 변경해야 합니다.
  • ACL의 마스크가 권한을 필터링하는 연산자는 AND 연산입니다.
  1. user02 사용자 권한이 rwx이고 마스크 권한이 r-x일 때
    user02 | rwx | 111 | r-x
    마스크 | r-x | 101 | r-x
  2. user03 사용자 권한이 r-x이고 마스크 권한이 rw- 일때
    user03 | r-x | 101 | r--
    마스크 | rw- | 110 | r--
  3. user03 사용자 권한이 r--이고 마스크 권한이 rw- 일 때
    user04 | r-- | 100 | r--
    마스크 | rw- | 110 | r--

4. 기본 접근 제어 리스트

  • 기본 ACL은 디렉토리에만 설정 할 수 있는 ACL입니다.
  • 디렉토리에 기본 ACL을 설정하게 되면 파일을 생성할 때 기본 ACL이 상속됩니다.

5. 접근 제어 리스트(ACL) 설정

  • setfacel [option] ENTRt:NAME:PERMS file-name
  • ENTRY
  • 사용자: u
  • 사용자 그룹: g
  • 마스크 : m
  • 기타 사용자: o
  • 기본 ACL: d

ACL 실습

  1. /root/acl-work 디렉토리를 생성하고 작업디렉토리로 사용합니다.
mkdir /root/acl-work
  1. acl-dir 디렉토리를 생성하고 다음 권한들을 설정하세요.
cd /root/acl-work
mkdir acl-dir

a. 소유자는 tom으로 권한은 rwx 입니다.

chown tom acl-dir
chmod u+rwx acl-dir

b. 소유그룹은 wheel 로 권한은 r-x 입니다.

chgrp wheel acl-dir
chmod g+rx acl-dir
ls -ld acl-dir

c. 기타사용자는 권한이 r-x입니다.

chmod o+rx acl-dir

d. vagrant 사용자는 rwx권한이 있습니다.

setfacl -m u:vagrant:rwx acl-dir
getfacl acl-dir

e. testuser 사용자는 모든권한이 없습니다.

setfacl -m u:testuser:--- acl-dir

f. tester 그룹은 모든 권한이 없습니다.

setfacl -m g:testuser:--- acl-dir
  1. acl-dir 에 before 라는 파일을 만들고 권한을 확인해보세요.
touch acl-dir/before
  1. acl-dir 디렉토리에 default-acl 을 다음과 같이 설정하세요.
    a. vagrant 사용자는 rwx 권한이 있습니다.
setfacl -m d:u:vagrant:rwx acl-dir/before

b. testuser 사용자는 r-x 권한이 있습니다.

setfacl -m d:u:testuser:r-x acl-dir/before

c. GID가 2024인 그룹은 권한이 없습니다.

setfacl -m d:g:2024:--- acl-dir/before
  1. acl-dir 에 after 라는 파일을 만들고 권한을 확인해보세요.
touch acl-dir/after
ls -l acl-dir
  1. acl-dir 과 그 아래의 모든 파일에 한번에 다음 권한을 설정하세요.

a. vagrant 사용자는 모든 권한이 없습니다.

setfacl -R -m u:vagrant:--- acl-dir

b. UID가 2020 인 사용자는 rwx 권한이 있습니다.

setfacl -R -m u:2020:rwx acl-dir

0개의 댓글