1. 사용자 전환
1. su 명령으로 사용자 전환
2. sudo
- sudo [option][user-name] command
- sudo 명령은 로그아웃을 하지 않고 특정 사용자의 권한으로 명령을 수행할 수 있습니다.
- 이때 사용하는 패스워드는 root 사용자의 패스워드가 아니라 기존에 로그인한 사용자의 패스워드를 사용합니다.
- 즉, 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진수 방식
확장권한 실습
- /root/setuid 라는 이름으로 빈파일 생성하고 모든 사용자에 대해 실행권한을 설정합니다.
touch /root/setuid
chmod a+s /root/setuid
- setuid 권한을 설정해보세요. (문자방식)
chmod u+s /root/setuid
ls -l /root/setuid
- /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
- vagrant 사용자로 사용자전환 후, /tmp/setgid/vagrant 라는 이름의 파일 생성
tom 등의 다른 일반사용자로 사용자전환 후, /tmp/setgid/tom 파일 생성
touch /tmp/setgid/vagrant
su tom
touch /tmp/setgid/tom
- /tmp/sticky 디렉토리 생성 후 모두 쓰기권한 부여
mkdir /tmp/sticky
chmod a+w /tmp/sticky
- 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
- tom 사용자로 파일모두 삭제해보기
su tom
rm -r /tmp/sticky/*
- root 사용자로 전부 삭제
sudo -i
rm -r /tmp/sticky/*
4. 접근 제어 리스트(ACL)
- ACL를 사용하면 파일을 소유한 사용자와 사용자 그룹을 제외한 사용자와 그룹에게 별도로 권한을 부여 할 수 있습니다.
1. 접근 제어 리스트 적용 유무 확인
2. 접근 제어 리스트 정보 확인
3. 접근 제어 리스트의 마스크(ACL mask)
- ACL의 마스크는 ACL에서 지정된 사용자와 그룹이 사용할 수 있는 최대 권한을 지정합니다.
- 지정된 사용자나 그룹의 권한이 마스크에 설정된 권한을 벗어나게 되면 필터링 되어 effective가 출력되고 해당 권한이 실질적인 권한으로 적용됩니다.
- ACL이 적용된 파일의 권한을 변경할 때에는 setfacl 명령으로 권한을 변경해야 합니다.
- ACL의 마스크가 권한을 필터링하는 연산자는 AND 연산입니다.
- user02 사용자 권한이 rwx이고 마스크 권한이 r-x일 때
user02 | rwx | 111 | r-x
마스크 | r-x | 101 | r-x
- user03 사용자 권한이 r-x이고 마스크 권한이 rw- 일때
user03 | r-x | 101 | r--
마스크 | rw- | 110 | r--
- user03 사용자 권한이 r--이고 마스크 권한이 rw- 일 때
user04 | r-- | 100 | r--
마스크 | rw- | 110 | r--
4. 기본 접근 제어 리스트
- 기본 ACL은 디렉토리에만 설정 할 수 있는 ACL입니다.
- 디렉토리에 기본 ACL을 설정하게 되면 파일을 생성할 때 기본 ACL이 상속됩니다.
5. 접근 제어 리스트(ACL) 설정
- setfacel [option] ENTRt:NAME:PERMS file-name
- 사용자: u
- 사용자 그룹: g
- 마스크 : m
- 기타 사용자: o
- 기본 ACL: d
ACL 실습
- /root/acl-work 디렉토리를 생성하고 작업디렉토리로 사용합니다.
mkdir /root/acl-work
- 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
- acl-dir 에 before 라는 파일을 만들고 권한을 확인해보세요.
touch acl-dir/before
- 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
- acl-dir 에 after 라는 파일을 만들고 권한을 확인해보세요.
touch acl-dir/after
ls -l acl-dir
- acl-dir 과 그 아래의 모든 파일에 한번에 다음 권한을 설정하세요.
a. vagrant 사용자는 모든 권한이 없습니다.
setfacl -R -m u:vagrant:--- acl-dir
b. UID가 2020 인 사용자는 rwx 권한이 있습니다.
setfacl -R -m u:2020:rwx acl-dir