Linux 소유권, 허가권, 특수 권한INFRA/Linux2024. 6. 27. 23:38
Table of Contents
소유권(ownership)
- chown : 파일의 소유권 변경, change owner
- Linux 시스템의 모든 개체(파일 및 디렉터리)는 소유자와 소유 그룹이 지정되어 있음
- 파일 생성 시 파일을 생성한 계정이 파일의 소유자가 됨
[root@localhost test]# ls -l file1
-rw-r--r-- 1 root root 0 5월 27 15:31 file1
--소유자는 test03, 소유그룹은 test04로 바꿈
-- .이용해서 둘 중 하나만 바꿀 수 있음
[root@localhost test]# chown test03.test04 file1
[root@localhost test]# ls -l file1
-rw-r--r-- 1 test03 test04 0 5월 27 15:31 file1
- 리눅스는 abc계정생성하면 abc 그룹 생성됨 윈도우는 ~ users 그룹에 abc 포함됨
- -R : 하위 디렉터리 및 파일 전체의 소유권 변경
[root@localhost test]# ls -l
합계 28
-rw-r--r-- 1 root root 0 5월 28 15:10 abc
-rw------- 1 root root 985 5월 24 10:12 anaconda-ks.cfg
-rw-r--r-- 1 test03 test03 0 5월 27 15:31 file1
--test디렉터리에 있는 소유자.소유그룹 변경
[root@localhost test]# chown -R test02.test02 .
[root@localhost test]# ls -l
합계 28
-rw-r--r-- 1 test02 test02 0 5월 28 15:10 abc
-rw------- 1 test02 test02 985 5월 24 10:12 anaconda-ks.cfg
-rw-r--r-- 1 test02 test02 0 5월 27 15:31 file1
허가권(Permission)
- chmod
- 개체(파일 및 디렉터리)의 허가권 변경
- 파일 기본값 : 644
- 디렉터리 기본값 : 755 → 755인 이유 : 5여야 다른 사용자들도 ls cd 가능
- umask
- 개체가 생성될 때 부여되는 기본 permission 설정
- 기본값 022
- 개체(파일, 디렉터리 등)에 접근할 수 있는 자격
허가권 구분
- 앞에서부터 3자리씩 소유자(user), 소유 그룹(group), 나머지 사용자(other)로 구분
- 마지막(10번째 문자) . 은 확장 권한(권한 ACL)을 나타냄
①소유자(user) | 파일의 소유자일 경우 적용되는 권한 |
②소유 그룹(group) | 파일의 소유 그룹 멤버 일 경우 적용되는 권한 |
③나머지 사용자(other) | 소유자 또는 소유 그룹의 멤버가 아닌 나머지 사용자일 경우 적용되는 권한 |
허가권(Permission) 종류
- 파일을 삭제하려면 디렉터리에 w 권한이 있어야 한다.
- 파일 자체의 w권한 : 파일 내용을 수정하는 권한
- 파일을 삭제하는 권한 : 디렉터리의 w권한에 의해 결정
실습
- 파일 실습
--root 사용자: rw- 가능, root 그룹: r 가능, other : r 가능
[root@localhost test]# ls -l file2
- rw- r-- r-- 1 root root 0 5월 27 16:11 file2
--r 가능
[test03@localhost test]$ cat file2
permission_test
--w 불가능
[test03@localhost test]$ cat >file2
-bash: file2: 허가 거부
- 디렉터리 실습
- test01/dir1/file1 : 755 755 644
[test20@localhost test01]$ ls -l
합계 0
drwxr-xr-x 2 root root 19 5월 28 16:15 dir1
--열림
[test20@localhost test01]$ ls dir1
file1
--루트에서 허가권 변경
[root@localhost test01]# chmod 751 dir1
--안열림
[test20@localhost test01]$ ls -l
합계 0
drwxr-x--x 2 root root 19 5월 28 16:15 dir1
ls: cannot open directory 'dir1': 허가 거부
- 실습_0
--other도 write 가능하도록 변경
[root@localhost test]# chmod 646 file2
--변경되었다
[test03@localhost test]$ cat >file2
change_test
[test03@localhost test]$ cat file2
change_test
--other은 write만 가능하도록 변경
[root@localhost test]# chmod 642 file2
[root@localhost test]# ls -l file2
-rw-r---w- 1 root root 19 5월 27 16:51 file2
[test03@localhost test]$ cat file2
cat: file2: 허가 거부
[test03@localhost test]$ cat >>file2
blind write
[root@localhost test]# cat file2
change
blind write
- 실습_1
--파일 생성
[root@localhost test]# vi secret
--계정 추가
[root@localhost test]# useradd sajang
--만들어진 계정확인
[root@localhost test]# tail -5 /etc/passwd
test01:x:1000:1000:test01:/home/test01:/bin/bash
test02:x:1001:1001::/home/test02:/bin/bash
test03:x:1002:1002::/home/test03:/bin/bash
test04:x:1003:1003::/home/test04:/bin/bash
sajang:x:1004:1004::/home/sajang:/bin/bash
--소유자 변경
[root@localhost test]# chown sajang secret
--허가권 변경
[root@localhost test]# chmod 700 secret
--소유자,허가권 변경됨
[root@localhost test]# ls -l secret
-rwx------ 1 sajang root 9 5월 27 17:31 secret
--파일 기본값은 rw-r--r-- 644
--변경되더라도 루트는 퍼미션 제한이 없어서 모든 파일 볼수있음
- 실습_2
1. 현재 존재하는 일반 사용자 계정 정보 확인
# cat /etc/passwd
2. root 계정의 UID확인
# id
# head -3 /etc/passwd
3. 현재 패스워드에 적용된 해시알고리즘 확인
# cat /etc/shadow ---> $6$ --> sha512
4. 계정 생성 2개(계정 생성 시 패스워드 설정)
4-1. salelee 계정생성
- 계정 사용만료일 지정(24년07월31일)
# useradd -e 2024-07-31 salelee
# passwd salelee
새 암호 : ~~~~
4-2. salekim 계정 생성
- 계정 생성 완료 후 계정 사용만료일을 24년12월31일로 설정
# useradd salekim
# passwd salekim
새 암호 : ~~~~
# chage -E 2024/12/31 salekim
5. salegroup 그룹 생성
# cat /etc/group --> 확인
# groupadd salegroup
6. salegroup 구성원으로 salelee, salekim 추가 후 확인
# usermod -G salegroup salelee
# usermod -G salegroup salekim
# cat /etc/group --> 확인
7. /test/sale 디렉토리 생성
# cd /test
# mkdir sale
- sale 디렉토리에 다음과 같이 설정
- 소유자 salekim, 소유그룹 : salegroup
# ls -l sale
drwxr-xr-x root root sale
# chown salekim.salegroup sale
# ls -l sale
drwxr-xr-x salekim salegroup sale
- 퍼미션(허가권) rwxrwxr-x로 변경
# chmod 775 sale == chmod g+w sale
# ls -l sale
drwxrwxr-x salekim salegroup sale
- sale/sale.txt 파일 생성 후
# cd sale
# touch sale.txt
* sale.txt에 대해 소유자 salekim, 소유그룹 : salegroup설정 후
# ls -l
-rw-r--r-- root root sale.txt
# chown salekim.salegroup sale.txt
# ls -l
-rw-r--r-- salekim salegroup sale.txt
* salekim계정에서 /test/sale 디렉토리로 이동 후
$ su - salekim
암호 : ~~~~
$ id
(salekim)
$ cd /test/sale
$ ls -l
-rw-r--r-- salekim salegroup sale.txt
$ cat > sale.txt --> 내용 추가 가능? ==> OK!!!
* salelee계정에서 /test/sale 디렉토리로 이동 후
$ su - salelee
암호 : ~~~~
$ id
(salelee)
$ cd /test/sale
$ ls -l
-rw-r--r-- salekim salegroup sale.txt
$ cat sale.txt --> 기존 내용 확인 가능? ==> OK!!!
$ cat >> sale.txt --> 내용 추가 가능? ==> 추가 불가능
$ rm -rf sale.txt --> 삭제 가능? ==> OK!!!
이유? sale 디렉토리의 소유그룹 항목에 w가 존재하기 때문...
$ ls -l /test
drwxrwxr-x salekim salegroup sale
$ touch /test/sale/sale1.txt --> 파일 생성 가능? OK!!!
이유? sale 디렉토리의 소유그룹 항목에 w가 존재하기 때문
umask
- 리눅스 시스템에서 자원을 생성할 때 설정되는 기본 권한을 통합 관리하기 위해 사용
- 디렉터리는 777 권한, 파일은 666 권한에서 umask 022 값을 뺀 값이 기본 권한으로 설정 됨
- 디렉터리 755, 파일 644
특수 권한
SetUID (4000 = u+s)
- 파일을 실행하는 동안 해당 파일의 소유주 권한으로 실행
- root는 권한 제한이 없다.
- 실행 파일에만 설정이 가능
- 소유자의 허가권에서 실행 권한이 x가 아닌 s로 표시 됨(예 : rwsr--r--)
- ex) passwd
- 패스워드를 변경하면 /etc/shadow 파일의 읽기 및 쓰기 권한을 가지고 있어야지 패스워드를 기록할 수 있음
- passwd 실행 파일에 SetUID 권한이 부여 되어 있으므로 passwd 명령이 실행되는 동안은 소유주의 권한(root)으로 동작하게 됨
--비밀번호를 일반계정도 직접 바꿀수있는데 소유권에 왜 w가 없는가?
[root@localhost test]# ls -l /etc/shadow
-r-------- 1 root root 1871 5월 28 17:35 /etc/shadow
[test02@localhost ~]$ cat /etc/shadow
cat: /etc/shadow: 허가 거부
--명령어도 파일 형태로 존재한다. (ping.exe 처럼)
[root@localhost test]# which passwd
/usr/bin/passwd
--/usr/bin/passwd는 계정정보를 가진게 아니라 암호를 변경할 수 있는 파일을 의미
--setuid : /usr/bin/passwd를 건들이는 순간 일시적으로 소유자 퍼미션 획득.
--즉 일반계정도 패스워드 바꾸려고 건들이는 순간 소유자 퍼미션(=root)을 받아서 비밀번호 변경가능
[root@localhost test]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 32656 5월 15 2022 /usr/bin/passwd
--파일생성
[root@localhost test]# touch file11
[root@localhost test]# ls -l file11
-rw-r--r-- 1 root root 0 5월 29 15:16 file11
[root@localhost test]# umask
0022
--권한변경
[root@localhost test]# chmod 4644 file11
--S : 실행파일도 아닌데 SetUID를 섷정하면 뜸
[root@localhost test]# ls -l file11
-rwSr--r-- 1 root root 0 5월 29 15:16 file11
--SetGID 설정
[root@localhost test]# chmod 2600 file11
[root@localhost test]# ls -l file11
-rw---S--- 1 root root 0 5월 29 15:16 file11
Sticky bit (1000 = o+t)
- 모든 소유권에 모든 허가권을 부여하지만 삭제는 소유주만 가능
- 디렉터리에 설정함
--tmp 디렉터리는 sticky bit 걸려있음
[root@localhost ~]# ls -l / | grep tmp
drwxrwxrwt. 23 root root 4096 5월 29 15:48 tmp
--삭제안됨
[test02@localhost tmp]$ rm -rf s-test
rm: cannot remove 's-test': 명령을 허용하지 않음
확장 ACL
[root@localhost test]# ls -l
합계 0
-rw-r----- 1 salekim salegroup 0 5월 29 16:30 xfile
[root@localhost test]# getfacl xfile
# file: xfile
# owner: salekim
# group: salegroup
user::rw-
group::r--
other::---
--ACL 설정변경
--sajang에게 xfile에 대한 특정 권한이 부여
--소유자나 소유 그룹에 속하지 않더라도 xfile 대해 6 권한 가능
[root@localhost test]# setfacl -m u:sajang:6 xfile
[root@localhost test]# ls -l
합계 0
-rw-rw----+ 1 salekim salegroup 0 5월 29 16:30 xfile
[root@localhost test]# getfacl xfile
# file: xfile
# owner: salekim
# group: salegroup
user::rw-
user:sajang:rw-
group::r--
mask::rw-
other::---
* 확장 ACL
: 특정 계정에게만 퍼미션 설정
- LAB Scenario
> 계정 생성
salekim / salelee / sajang
> 그룹 생성 및 계정 추가
salegroup 그룹생성
salegroup 그룹에 salekim / salelee만 추가
> test디렉토리에
xfile이라는 영업부에 속해있는 직원들만 접근 가능한 파일 생성
> xfile 파일에는
salekim / sajang ==> rw
salelee ==> r
# rm -rf /test/*
# cd /test
# ls ==> 아무내용도 없게 설정
# touch xfile
# ls -l
-rw-r--r-- root root xfile
# chown salekim:salegroup xfile
# chmod 640 xfile
# ls -l
-rw-r----- salekim salegroup xfile
# getfacl xfile
내용 확인
# setfacl -m u:sajang:6 xfile
# getfacl xfile
내용 확인
* 파일 속성 관리
# cd /test
# cat > testfile
testtest
(Ctrl + d)
# lsattr testfile
# chattr +a testfile
==> a(append)속성추가
# lsattr testfile
# cat testfile
# rm -rf testfile ==> root도 삭제 불가
# chattr -a testfile
# chattr +i testfile
==> i(immutable)속성추가
# lsattr testfile
# rm -rf testfile ==> root도 삭제 불가
# cat >> testfile ==> root도 내용 추가 불가
파일 속성
[root@localhost test]# ls
testfile xfile
[root@localhost test]# lsattr testfile
---------------------- testfile
[root@localhost test]# chattr +a testfile
[root@localhost test]# lsattr testfile
-----a---------------- testfile
--rwx와 상관없이 root의 명령도 듣지않음. +a옵션을 줘서 무조건 추가만 된다.
[root@localhost test]# rm -rf testfile
rm: cannot remove 'testfile': 명령을 허용하지 않음
--지워짐
[root@localhost test]# chattr -a testfile
[root@localhost test]# ls -l testfile
-rw-r--r-- 1 root root 18 5월 29 17:27 testfile
-- +i : immutable 파일을 변경 불가능하게 만듬
[root@localhost test]# chattr +i testfile
[root@localhost test]# lsattr testfile
----i----------------- testfile
--root도 못지우고 내용 추가도 안됨
[root@localhost test]# rm -rf testfile
rm: cannot remove 'testfile': 명령을 허용하지 않음
[root@localhost test]# cat >>testfile
-bash: testfile: 명령을 허용하지 않음
'INFRA > Linux' 카테고리의 다른 글
Linux 디스크 관리 (0) | 2024.06.28 |
---|---|
RAID 구성+복구 실습 -> Window+Linux (1) | 2024.06.27 |
Linux 계정 관리 (0) | 2024.06.27 |
Linux Software 관리 (0) | 2024.06.27 |
vi 편집기 (0) | 2024.06.27 |