리눅스 퍼미션 관리
퍼미션 종류
1. 상대 모드 (심볼릭 모드)
사용자 종류 | 기능 |
---|---|
u | user 퍼미션 수정 |
g | group 퍼미션 수정 |
o | 타인의 퍼미션 수정 |
a | 모든 퍼미션 수정 |
퍼미션 | 기능 |
---|---|
r | 읽기 퍼미션 |
w | 쓰기 퍼미션 |
x | 실행 퍼미션 |
연산자 | 기능 |
---|---|
+ | 퍼미션 추가 |
- | 퍼미션 삭제 |
= | 퍼미션을 일치시킴 |
# chmod ug+rwx 1
# chmod ug-rwx 1
# chmod ug=rwx 1
# chmod ugo+rwx 1
# chmod a-rwx 1
# chmod u-x,g-xw,o-rx 1
2. 절대 모드 (수치 모드)
사진첨부
# chmod 700 1
# chmod 070 1
# chmod 007 1
# chmod 777 1
소유권 변경 명령어
파일의 소유자나 소유그룹을 변경한다.
- chown [옵션] 소유자:소유그룹 파일명
chown [옵션] 소유자:소유그룹 파일명
- -R (경로와 그 하위 파일들을 모두 변경한다.)
# touch 1
# chown user1:user1 1
# ls –al
# chown root 1
# ls –al
# chown :root 1 = chgrp root 1
# ll
umask
1. 특징
- 허가권 지정 명령어로 일반 파일인 경우 666 , 디렉토리인 경우 777 에서 umask 값을 뺀 값을 기본 허가권으로 조정한다.
- umask(027) 변경해도 로그아웃 하면 umask(022)로 변경된다. ( /etc/profile 값을 수정하면 변경된 값을 계속 유지 할수 있다. )
시스템전체 설정 ( /etc/profile ) 또는 개인적으로 설정 ( .profile .bashrc .cshrc ) 한 경우 로그인과 동시에 적용 되어 진다. - 유닉스는 파일 생성시 실행 권한(‘x’)을 갖지 못하지만, 디렉토리 생성시는 실행권한을 갖는다.
- 퍼미션 상속 과 cp, mv 퍼미션 의미없음.( umask 퍼미션이 적용됨 )
2. 기본 퍼미션 설정하기
Umask | 디렉토리 허가권(777) | 파일 허가권 (666) |
---|---|---|
002 | 775 | 664 |
007 | 770 | 660 |
020 | 757 | 646 |
070 | 707 | 606 |
022 | 755 | 644 |
# umask
# touch file1
# mkdir dir1
# ll
# umask 070
# umask
# touch file2
# mkdir dir2
# ll
퍼미션 (Permission)
- 파일 종류 확인 : ls -F ( 실행파일 * , 디렉토리 /, 링크파일 @ ) 파일 퍼미션 확인 : ll ( ls -l )
- 소유자 변경 ( chown ) , 그룹 변경( chgrp ), 퍼미션변경( chmod ) 하위 디렉토리 및 파일 모두 변경할 때 사용 ( -R 옵션 ).
기본 퍼미션
- r( 4)=read / w( 2 )=write / x( 1)=execute
사진첨부
- ls -l /dev | more
- Block Device ( 저장장치 : 하드디스크, 플로피디스크, CD-ROM )
- Character Device ( 입출력장치 : 마우스, 키보드, 프린터 )
- ls -l /dev | more
사진첨부
- 이진파일과 일반파일 실행퍼미션만 주고 실행해보기
- 슈퍼유저인 root사용자는 실행권한 만 빼고 퍼미션과 소유권을 초월한다.
Ex. 퍼미션
사진첨부
방법
# mkdir /dir1
# touch /dir1/1.txt
# chmod 555 /dir1
# chmod 457 /dir1/1.txt
# useradd user1
# useradd user2
# useradd user3
# useradd sales
# useramod -G sales user2
# cat /etc/group | grpe sales
# chown user1:sales /dir1/1.txt
결과
- user1
# su - user1
$ cd /dir1
cat < 1.txt // 읽기
cat > 1.txt // 쓰기
./1.txt // 실행
사진첨부
user1은 읽기만 가능하고 쓰기, 실행은 거부된다.
- user2
# su - user2
$ cd /dir1
cat < 1.txt // 읽기
cat > 1.txt // 쓰기
./1.txt // 실행
사진첨부
user2는 읽기, 실행만 되고 쓰기는 안 된다.
- user3
# su - user3
$ cd /dir1
cat < 1.txt // 읽기
cat > 1.txt // 쓰기
./1.txt // 실행
사진첨부
user3은 읽기, 쓰기, 실행 모두 다 된다.
참고
- ls -ld /dir1
- ls -ld /dir1/1.txt
setuid 와 setguid
- ‘SetID/SetGID’는 파일에 대한 소유권을 다른 사용자에게 할당하여, 소유권이 없는 사용자도 파일에 대한 소유권을 갖게할 수 있는 기능을 수행한다. 일반적으로 소유자가 root 인 실행 파일에 적용한다.
사진첨부
# chmod 4755 my.exe
# chmod 2755 my.exe
# chmod 1755 my.exe
# chmod u+s my.exe
# chmod g+s my.exe
- 결과 확인 :
ll
Ex. 쉘이 실행되는 동안 관리자 권한으로 모든 작업 가능하게 하기
# cp /bin/ksh /home/user1
# chmod 4755 /home/user1/ksh
# ll /home/user1/ksh
# su - user1
$ id
$ ./ksh
# id
Sticky bit
# useradd user1
# useradd user2
# mkdir /work
# chmod 1777 /work
# su - user1
$ cd /work
$ touch 1
$ chmod 777 1
$ mkdir dir1
$ chmod 777 dir1
# su - user2
$ cd /work
$ rm -rf 1 --- 삭제에러 ( others에 모든 권한이 있어도 삭제되지 않는다. )
$ vi 1 --- 편집성공
$ cat 1 --- 읽기성공
$ rm -rf dir1 --- 삭제에러 ( others에 모든 권한이 있어도 삭제되지 않는다. )
- 파일에 쓰기 권한이 없어도 디렉토리 쓰기 권한이 있는 경우, 디렉토리 권한에 의해서 파일을 삭제할 수 있다.
- 만약, 특정 디렉토리를 공유 목적으로 사용할 경우, 사용자들에 의해서 파일이 생성될 수있으나, 디렉토리 파일을 삭제할 수 없도록 제한하려면 ‘Sticky’ 권한을 설정해야 한다.
- 예를 들어, 디렉토리 쓰기(touch, cp, vi 편집기) 권한이 있어도 파일 삭제(rm, mv, vi 편집기 수정 작업) 권한을 제외할 경우 사용한다.
- 단, 파일에 대한 소유권을 갖고 있는 소유자, 그룹, Root 는 이 기능에서 제외된다.
ACL (Access Control List)
사용자 하나와 그룹 하나에게만 권한을 줄 수 있는 파일 퍼미션을 확장하여, 여러 명의 사용자와 그룹에게 접근 권한을 줄 수 있는 것이 ACL(Access Control List) 임
- getfacl : 파일의 ACL 상태를 확인한다.
setfacl : 파일에 ACL을 설정하거나 삭제할 수 있다.
# setfacl [option] [u/g/o:사용자/그룹:상대모드/절대모드] [File/Directory]
- -m : Modify의 약자로 권한을 지정하거나 수정할 때 사용
- -x : 사용자를 제거할 때 사용
- -R : 디렉토리의 경우 하위 디렉토리와 파일까지 권한을 변경
- -b : 권한 및 mask 등 지정한 권한을 전부 제거
- -d : 자신의 디렉토리 내에서 생성되는 폴더 / 파일에 자동으로 ACL 퍼미션을 상속
# setfacl -m u:user1:rw-, g:sales:r-x, o:rwx 1
# setfacl -m u:일반사용자:rw- 파일명
# setfacl -m g:그룹사용자:rw- 파일명
# setffacl -m o:rwx 파일명
- 규칙
- 퍼미션을 문자로 줄 경우 rw- 처럼 세 자리를 전부 다 사용해야 한다. rw 라고만 하면 명령어 에러가 난다.
- ACL 퍼미션을 설정한 경우만 MASK 가 생성되어짐
- 소유자 와 그룹소유자 퍼미션을 변경하면
자동으로
가장 큰 퍼미션으로 MASK 퍼미션이 변경되어짐 - MASK 퍼미션을 직접 설정한 경우, ACL 퍼미션은 MASK 퍼미션을 넘지 못함
- 퍼미션을 문자로 줄 경우 rw- 처럼 세 자리를 전부 다 사용해야 한다. rw 라고만 하면 명령어 에러가 난다.
Ex. ACL
- 일반 파일은 아래의 첫 번째 결과처럼 user나 group 부분에 아무런 사용자명이나 그룹명이 등록되어 있지 않다.
# mkdir /dir1
# cd /dir1
# touch 1.txt
# getfacl 1.txt
↓ 이렇게 뜸.
# file: 1.txt
# owner: root
# group: root
user::rw-
group::r--
otehr::r--
- 소유자가 root인 파일을 일반 사용자가 수정할 수 있도록 ACL을 적용
# useradd user1
# setfacl -m u:user1:rwx 1.txt
# getfacl 1.txt
↓ 이렇게 뜸.
# file: 1.txt
# owner: root
# group: root
user::rw-
user:user1:rwx
group::r--
mask::rwx
otehr::r--
mask::rwx
가 생성되었다.
# setfacl -m m:r-- 1.txt
# getfacl 1.txt
↓ 이렇게 뜸.
# file: 1.txt
# owner: root
# group: root
user::rw-
user:user1:rwx #effective:r--
group::r--
mask::r--
otehr::r--
effective:r--
, mask::r--
가 생성되었다.
# su - user1
$ ls -l 1
-rw-r—r--+ 1 root root 0 Dec 4 10:10 1
# setfacl -x user:user1 /dir1/1
: 사용자를 제거할 때 사용
# getfacl /dir1/1
# setfacl -b /dir1/1
권한 및 mask 등 지정한 권한을 전부 제거
# getfacl /dir1/1
# setfacl -m d:u:user1:rwx /dir1
: /test 폴더에 user1 유저에게 rwx권한을 주며, /test 폴더 아래 생성되는 파일/폴더에 동일한 퍼미션값을 상속함
# getfacl /dir1
# touch /dir1/2
# getfacl /dir1/2
# mkdir /dir1/dir2
# getfacl /dir1/dir2
참고
# setfacl -m u:500:rwx /test
- /test 폴더에 500 UID의 유저에게 rwx권한을 준다.
# setfacl -m u:user1:rwx /test
- /test 폴더에 user1 유저에게 rwx권한을 준다.
# setfacl -R -m user:user1:rwx /test
- 디렉토리의 경우 하위 디렉토리와 파일까지 권한을 변겅
Ex. ACL 퍼미션
사진첨부
방법
# useradd user1 (~ 7)
# groupadd sales
# groupadd humans
# gpasswd -a user2 sales
# gpasswd -a user7 humans
# mkdir /dir1
# chmod 575 /dir1
# chown user1:sales /dir1
# setfacl -m d:u:user3:r-x,d:u:user4:rwx /dir1
# setfacl -m u:user3:r-x,u:user4:rwx /dir1
# getfacl /dir1
# cd /dir1
# touch a
# getfacl a
# setfacl -b a
# getfacl a
# chmod 555 a
# chown user6:humans a
# touch b
# getfacl b
결과
# su - user1
$ ls /dir1
$ touch /dir1/c
$ cd /dir1
$ cat < a
$ cat > a
$ ./a
- user1
사진첨부
폴더 : 읽기(O), 쓰기(X), 실행(O)
파일 : 읽기(O), 쓰기(X), 실행(O)
- user2
사진첨부
폴더 : 읽기(O), 쓰기(O), 실행(O)
파일 : 읽기(O), 쓰기(X), 실행(O)
- user3
사진첨부
폴더 : 읽기(O), 쓰기(X), 실행(O)
파일 : 읽기(O), 쓰기(X), 실행(O)
- user4
사진첨부
폴더 : 읽기(O), 쓰기(O), 실행(O)
파일 : 읽기(O), 쓰기(X), 실행(O)
- user5
사진첨부
폴더 : 읽기(O), 쓰기(X), 실행(O)
파일 : 읽기(O), 쓰기(X), 실행(O)
- user6
사진첨부
폴더 : 읽기(O), 쓰기(X), 실행(O)
파일 : 읽기(O), 쓰기(X), 실행(O)
- user7
사진첨부
폴더 : 읽기(O), 쓰기(X), 실행(O)
파일 : 읽기(O), 쓰기(X), 실행(O)
참고
- ACL 백업
# getfacl -R --skip-base / > backup.acl
- ACL 복구
# setfacl --restore=backup.acl
- ACL 제거
# setfacl -b dir1
sudo (Super User Do)
- 인증받은 사용자가 특정 명령을 root 권한으로 실행하는 명령어 이다.
- su 명령을 이용하여 root 계정으로 들어가면 모든 권한을 가지게 되어 보안상 매우 위험하다. 그래서 특정 작업만 수행할 수 있는 권한을 주는 것이 가능한데, sudo 명령으로 이와같은 제한적인 권한 부여가 가능하다.
/etc/sudoers
sudo 명령을 내릴 수 있는 사용자와 명령을 정의한 파일
visudo
/etc/sudoers 파일을 수정하는 명령어
참고
# vi /etc/sudoers
vi 편집기로는 수정할 수 없다. (read-only 파일) ` : wq -> wq! `
# visudo
user1 ALL=/usr/sbin/useradd, /usr/bin/passwd
%sales ALL=/usr/sbin/useradd, /usr/bin/passwd
# useradd user1
# passwd user1
# su - user1
$ whoami
$ useradd user2
에러
$ /usr/sbin/useradd user3
에러
$ sudo /usr/sbin/useradd user4
성공
$ sudo /usr/bin/passwd user4
성공
$ sudo /usr/bin/userdel -r user4
에러
파일 속성 설정으로 파일 변형 막기
- chattr : 파일 속성 변경 명령어
- lsattr : 파일 속성 출력 명령어
# which lsattr
# which chattr
# rpm -qf /usr/bin/chattr (chattr 패키지 확인)
+
연산자는 속성을 추가한다.-
연산자는 속성을 제거한다.=
연산자는 주어진 속성만 유지한다.
Ex. 연습 01
- i 옵션 주면 읽기만 가능하다.
# touch bbb.lst
# ls -l bbb.lst
# chmod 777 bbb.lst
# ls -l bbb.lst
-rwxrwxrwx 1 root root 0 Oct 8 16:43 bbb.lst
# chattr +i bbb.lst
# lsattr bbb.lst
----i-------- bbb.lst
# rm -rf bbb.lst ( 에러 )
# chattr -i bbb.lst
# lsattr bbb.lst
------------- bbb.lst
# rm -rf bbb.lst ( 성공 )
Ex. 연습 02
- a 옵션만 주면 읽기와 추가만 가능하다.
# touch bbb.lst
# ls -l bbb.lst
# chmod 777 bbb.lst
# ls -l bbb.lst
-rwxrwxrwx 1 root root 0 Oct 8 16:43 bbb.lst
# chattr +a bbb.lst
# lsattr bbb.lst
----a-------- bbb.lst
# cat < bbb.lst ( 성공 )
# cat >> bbb.lst ( 성공 )
# rm -rf bbb.lst ( 에러 )
# chattr -a bbb.lst
# lsattr bbb.lst
------------- bbb.lst
# rm -rf bbb.lst ( 성공 )