본문 바로가기

Server/linux공통

허가권(퍼미션)과 소유권 permission, chown, chmod

허가권(퍼미션)과 소유권

ls -l /boot/login 명령으로 파일구조 파악

-rwxr-xr-x 1 root root 20284 11월 17 2010 login
파일유형 링크수 사용자 그룹 파일크기 날짜 연도/시간 파일명
퍼미션 링크 소유권

 

 

퍼미션(Permission) : 파일이나 디렉토리의 엑세스(접근)을 제한하는 것 또는 허가권 이라 한다.

소유권(Ownership) : 파일이나 디렉토리에 대한 소유권한 해당 파일과 디렉토리를 생성한자의 소유권이라 말한다.

UID또는 GID로도 표기된다.

 

리눅스 시스템에 있는 모든 파일이나 디렉토리에는 엑세스 할 수 있는 권한과 소유권이 부여되어 있습니다.

허가권은 파일의 소유권을 가진 사용자가 그 파일에 엑세스 할 수 있게 하고, 또는 지정내 그룹내 사용자가 사용가능하게합니다.

 

참고 : 압축파일 해제 시 생성된 디렉토리 소유권이 숫자로 표시될 때

리눅스 시스템을 설치하고 /home 계정 디렉토리를 압축한 후에 이를 다른 시스템으로 복사하여 압축을 풀게 되면

새로운 시스템의 /etc/passwd와 /etc/group 파일에는 기존 파일에 대해 사용자가 정보가 없기 때문에

UID와 GID로 소유권이 표시됩니다. 따라서 이러한 것을 막기 위해서는 백업할 때 항상 /etc/passwd /etc/group을 같이 보관하거나

기존의 사용자 정보를 새로운 시스템의 이들 파일에 기록해 주어야 합니다.

 

허가권

파일 구조의 파일 유형 필드 에서 허가권은 다음과 같은 형식으로 구성되어 있습니다. (커맨드 ls -l)


 

 

파일 또는 디렉토리에 엑세스 할 수 있는 사용자(user), 그룹(group), 다른 사용자(other) 등 세가지의 사용자 필드가 있으며,

각각의 필드에 다음 표와 같이 읽기(Read), 쓰기(Write), 실행 허가 (eXecute) 등 세가지의 권한이 부여 될 수 있습니다.

 

사용자나 그룹 다른사용자 필드에 " - " 라고 표기되는경우에는 권한이 없다는걸 말합니다.

 

예제

-rw------- 1 root root  2800  2월  5 11:20 anaconda-ks.cfg

drwxr-xr-x 7 root root  4096  2월  5 11:17 bin

drwxr-xr-x 2 root root  4096  2월  5 11:17 conf

-rw-r--r-- 1 root root 21315  2월  5 11:20 install.log

-rw-r--r-- 1 root root  3320  2월  5 11:19 install.log.syslog

 

anaconda-ks.cfg 를 예를들면 사용자, 그룹은 root 이고 그에대한권한은 사용자에대한(root) 읽기 쓰기만 가능합니다.

 

소유권 변경(chown)

다른 리눅스 시스템에서 복사한 파일의 소유권이 사용자 자신의 소유권과 일치하지 않으면, 그 파일의 소유권을 자신의 소유권으로

바꿔야 할 때가 발생하는데 그 때 사용하는 명령어가 chown 이다. 

 

#chown [사용자명] [경로] 

경로의 파일(또는 디렉토리) 를 사용자명으로 변경한다.

 

#chown [.그룹명] [경로]

경로의 파일(또는 디렉토리) 를 그룹명으로 변경한다.

 

#chown [사용자명.그룹명] [경로]

경로의 파일(또는 디렉토리) 를 해당 사용자명 그룹명 으로 변경한다.

 

#chown -R [사용자명.그룹명] [경로]

해당하위 디렉토리까지 모두 변경한다.

 

허가권 변경(chmod)

허가권을 변경할 때는 chmod 명령어를 사용하는데 기호모드(symbolic method)이나 숫자 모드(absoulute method)가 사용됩니다.

기호 모드:  쓰기, 실행 허가권에 대해서 r,w,x 문자를 사용하는 방법

숫자 모드는 : 권한을 의미하는 문자 대신 숫자로 표기하는 방법

허가권을 부여 또는 추가할 때는 + 를 사용하여 제거시 - 기호를 사용 그대로 둘 때에는 = 를 사용

 

chmod [옵션] 기호모드조합 파일 (예 chmod u+rwx /bin/date, chomod o-rx /bin/date)

chmod [옵션] 숫자모드조합 파일 (예 chmod 755 /bin/date, chomod 644 /bin/date)

 

기호(상징) 모드(Symbolic Method)

기호 의미
+ 허가권 부여
- 허가권 제거
= 허가권 유지
s UID GID 권한부여
! Sticky bit  권한부여
u 사용자 권한
g 그룹 권한
o 다른 사용자 권한
a 사용자, 그룹, 다른 사용자 모두

 

 

기호모드를 사용하여 허가권을 부여할 때는 사용자 대상(u,g,o)에 대해서 읽기(r),쓰기(w),실행(x) 권한을 부여할 것인가

뺄 것인지를 플러스(+) 또는 마이너스(-) 기호를 사용하여 부여합니다. 

 

예) /bind/date 파일에서 사용자권한 rwx에서 쓰기권한을 제외

#chmod u-w /bin/date

예)사용자 쓰기권한 추가 그룹과 다른사용자에게 실행권한을 제외

#chmod u+w,g-x,o-x /bin/date

예)원상태로돌리기 (사용자는 모든권한,그룹과 다른 사용자는 읽기 실행 권한만 부여)

chmod go+x /bin/date

 

동일적용할경우에는 따로적용할 때의  ","를 사용하는것고 달리 묶어 사용한다.

go+x (그룹과 다른 사용자에 대해 엑세스 권한을 부여한다)

 

허가권 부여 기호 예제

 
허가권
예제 사용자 그룹 타인 설명
허가 기호 rwx rwx rwx r=읽기 w=쓰기 x=실행
원래의 허가 기호 상태 rwx r-x r-x /bin/date 의 파일구조
chmod g+w /bin/date rwx rwx r-x 그룹에 쓰기 권한 부여
chmod g-wx+r /bin/date rwx  r-- r-x 그룹에 쓰기 및 실행 권한 제거 오직 읽기 만 가능
chmod o-rwx /bin/date rwx r-- --- 타인의 모든권한 제거
chmod o+rw /bin/date rwx r-- rw- 타인의 읽기 쓰기 권한만 부여
chmod a-w /bin/date r-x r-- r-- 사용자 타인 그룹 모드가 쓰기 권한 제거
chmod u-x /bin/date r-- r-- r-- 사용자의 실행 권한 제거
chmod u+wx,g+x,o+x /bin/date rwx r-x r-x 사용자는 모든권한 그룹과 타인에겐 실행 권한 추가
chmod a-x /bin/date rw- r-- r-- 사용자, 그룹, 타인의 실행 권한 제거

 

 

숫자(절대) 모드

기호모드 보다는 숫자를 사용하는 절대모드가 더 편리합니다.

3자리의 8진수 숫자 표기법을 사용한다. 

완전한 표기법은 4자리의 사용자, 10단위에는 그룹, 1단위에는 다른 사용자를 지정하여 사용합니다.

 

 

절대 모드로 표시법은 해당 숫자 부분의 숫자들을 더하여 허가를 변경합니다.

예)사용자 필드에서 읽기와 쓰기 실행 권한을 허용하고자 한다면 400+200+100=700 

예)그룹 모드에서 읽기와 실행만 허용 40+10=50

예)다른사용자 모드에서 읽기와 실행만 허용 4+1=5

모두더해 700+50+5=755 가 됩니다.

 

 

 4자리의 퍼미션 구조

절대 모드 퍼미션 표기 방식에서 일반적으로 3자리 표기법을 많이 사용하는데 4자리 표기법에 사용되는 값들을 알아봅시다.

 

StickyBit(값1000)

모든 사용자가 쓰고 삭제할 수 있는 디렉토리에 적용 

예)/tmp 디렉토리가 stickybit ,값으로 설정되어있다

test@test2:~$ ls -l / | grep tmp

drwxrwxrwt   2 root root  4096 Feb 17 11:17 tmp

이 비트를 적용한 디렉토리 내에서는 누구나 파일을 쓰고 삭제할 수 있지만 파일 삭제는 오직 파일사용자만이 가능

부여방법 : chmod 1777 디렉토리or파일명

 

sticky bit 퍼미션을 부여하면 파일 구조의 타인 필드 마지막에 x대신 t문자가 표시되며 어떤 사용자도 쓰기 권한을 가지지만,

삭제 권한은 오직 그 파일을 생성한 사용자에게만 있다.

 

퍼미션을 1750으로 부여시 다른사용자 권한 필드의 마지막에 t가 아닌 I로 표시되는데 sticky bit를 부여한 파일은 사용자에겐 읽기 및 쓰기 권한도 없음을 의미,

 

setGID setUID

파일을 실행할 때 그 파일의 사용자 또는 그룹의 권한으로 실행되도록 하는것을 말합니다.

이러한 퍼미션은 시스템에서 작업이 이뤄질 수 있도록 루트 권한이 필요한 경우나,

어떠한 시스템 자원을 이용하기 위한 경우에 필요합니다.

예를들어 /bin/ping 파일에 다음과 같이 setUID되어 있습니다.

root@test2:/home/test# ls -l /bin/ping

-rwsr-xr-x 1 root root 35712 Nov  8  2011 /bin/ping

 

/bin/ping 에서 SetUID를 제거하게 되면 일반 사용자가 이 명령을 실행하는데 오류가 발생됩니다. 이를 이해하기 위해서

/bin/ping 파일에 755의 허가권을 부여하여 SetUID를 제거한 후 dumca 사용자로 전환하여 ping 테스트해봅니다

 

 

ping localhost

명령을 허용하지 않음

 

상기 화면에서 보는 바와 같이 SetUID를 제거하게 되면 일반 사용자가 ping 명령을 사용할 때 오류가 발생함을 알 수 있습니다.

허가권을 다시 4775 또는 u+s로 SetUID를 부여하면 일반 사용자도 ping 명령을 사용할 수 있음을 알수 있습니다.

 

이번에는 /tmp/dumca 파일에 setUID의 퍼미션을 부여하여 파일 구조를 살펴봅니다.

chomod 4750 /tmp/dumca

 

SetUID를 부여하게 되면  파일 구조에서 사용자 필드의 r 권한 대신 s문자료 표시됨을 알 수 있다.

상기 예제 화 같이 setUID를 부여하면 그룹 필드의 s 문자가 표시됩니다.

 

SetGID를 부여하면 그룹 필드에 s문자가 표시됩니다.

보안상 문제로 리눅스 배포판 내에 포함된 파일 외에 사용자가 설치하지 않은 파일에 

이러한 퍼미션이 있는지를 체크하여 삭제해 주어야 함을 주의해야합니다.

 

정리

4이면 setuid의 의미이며, 일반유저가 소유자 권한으로 실행 할 수 있도록 임시로 조치해 준다.

2이면 setgid의 의미이고, 일바유저가 그룹 사용자 권한으로 실행 할 수 있도록 해 준다.

1이면 sticky bit의 의미이며, 그룹 사용자에게 쓰기 권한을 부여하지 않더라고 작성할 수 있게되며 대신 남의 파일은 삭제할 수 없다.