본문 바로가기
카테고리 없음

[Linux] 특수 권한 ② setUID, setGID, Sticky Bit, 파일 속성(chattr)

by 떵해이 2020. 11. 25.
300x250

특수 권한을 공부하시기전에 기본 권한에 대해 먼저 공부하신 후에 보시길 바랍니다.

 

setUID, setGID, Sticky Bit 3가지 특수 권한은 모두 실행 권한에 관려되어 있는 개념입니다.

파일 실행에 관련된 기능으로 사용되고, 표기도 실행자리에 나타납니다.

 

간단하게 표기방법만 보고 설명하도록 하겠습니다.

 

setUID를 파일에 설정하면 user 권한에 x대신 s가 들어갑니다.

setGID를 파일에 설정하면 group 권한에 x대신 s가 들어갑니다.

Sticky Bit를 파일에 설정하면 other 권한에 x대신 t가 들어갑니다.

 

※ 7777권한이란 기존에 777(rwxrwxrwx)권한에 특수권한을 추가로 준 것입니다.

   setUID(4000) + setGID(2000) + Sticky Bit(1000) = 7000 입니다.

 

이 때까지, 권한을 표기할때 0777인데 특수 권한을 생략하고 표기했던 것 뿐입니다.

정확한 표기방법은 chmod 0777 [파일명]입니다.

 

사용법도 다 동일합니다. 언제 사용하는지만 알면 쉽습니다.

설명은 예시를 보고 나서 아래에서 하도록 하겠습니다.

 

 

예시) test1이란 파일을 권한을 주어서 확인해보도록 하겠습니다.

# chmod 7777 test1

 

결과를 보시면 - rws rws rwt 라고 나옵니다.

파일이고, setUID설정, setGID설정, Sticky Bit 설정이 된 것을 알 수 있습니다.

 

 

test1이란 파일에 다른 권한을 주어서 확인해보도록 하겠습니다.

# chmod 7644  test1

 

결과를 보시면 - rwS r-S r-T 라고 나옵니다.

다른것들은 다 똑같은데 s, s, t부분이 이번에는 대문자로 표기된 것을 알 수 있습니다.

 

여기서 색다른 결과를 알 수 있습니다.

저희가 주는 권한에 644를주면 rw- r-- r--  이 처럼 실행 권한인 x가 다 없습니다.

실행 권한인 x가 원래 없는 곳에 특수 권한을 주게 되면 소문자가 아닌 대문자 S, S, T로 들어갑니다.

 

 

아래 개념 습득 후 특수 권한이 설정된 파일들을 찾아보고 공부하면 좋습니다.

찾는 방법은 아래 명령어를 치면 나옵니다.

# find / -perm -4000  setUID 설정된 파일 찾기

# find / -perm -2000  setGID 설정된 파일 찾기

# find / -perm -1000  Sticky Bit 설정된 파일 찾기

 

○ setUID

    ▷ 해당 파일 소유자의 권한을 잠시 사용

    ▷ 파일 실행할 때 set(적용해라) UID(파일 소유자로) 이런 느낌입니다.

    ▷ 적용된 파일을 실행하면 실행 파일이 끝날 때 까지 파일 소유자의 UID가 됩니다.

        (UID는 계정을 나타내는 고유 번호이기 때문에 그 계정을 사용하는 것과 동일합니다.)

    ▷ 설정을 잘못하면 굉장히 보안상 위험하므로 설정시에 유의해야합니다.

 

권한 주는 법

# chmod 4000 [파일명]

# chmod u+s [파일명] (제거 # chmod u-s [파일명])

 

 

우리가 흔히 쓰는 사용 예시

/etc/passwd를 보면 소유주인 root만 w권한이 있으니 다른 사람은 변경할 수 없습니다.

 

그런데 저희는 계정을 만들면서 매번 passwd명령어를 통해 패스워드를 설정 or 변경을 해왔습니다.

비밀번호를 설정하면 /etc/passwd에 적히고 그 적힌 비밀번호는 /etc/shadow로 이동됩니다.

그 말은 계속 저희가 w권한을 이용해왔다는 말입니다.

 

위의 권한은 불가능해 보이지만 /bin/passwd라는 명령어 파일이 setUID권한이 주어져있기 때문입니다.

s가 표기되어 있으므로 setUID가 적용된 파일이란 것을 알 수 있습니다.

 

 

참고! 안에 중요한 파일들을 마음대로 읽을 수 있게 되기 때문에 주의해서 사용해야 합니다.

분   류 기   능 사용 권한
/bin 기본적인 명령어 일반 사용자
/sbin 시스템 관리 명령어 root(관리자)
/usr/bin /bin에 있는 명령어를 제외한 기본적인 명령어 일반 사용자
/usr/sbin /sbin에 있는 명령어를 제외한 시스템 관리 명령어 root(관리자)

 

○ setGID

    ▷ 해당 파일의 그룹 권한을 잠시 사용

    ▷ 파일을 실행할 때 set(적용해라) GID(파일의 그룹으로) 이런 느낌입니다.

    ▷ 보통 setUID를 쓰고, setGID는 사용빈도가 높지 않습니다. (잘안씀)

    ▷ 디렉토리에 setGID를 설정하게 되면 내부에 파일들도(새로 만들어도) 모두 setGID가 적용됩니다.

        (setUID는 불가능 합니다. 유닉스 계열에서 파일의 소유자를 바꾸는 것은 관리자인 root만

        가능하게 설정되어 있기 때문입니다.)

 

권한 주는 법

# chmod 2000 [파일명]

# chmod g+s [파일명] (제거 # chmod g-s [파일명])

 

 

간단 예시

/usr/bin/wall 이라는 명령어가 setGID가 설정되어 있습니다.

명령어를 사용할 때 tty(TeleTYpewriter)라는 그룹으로 속해서 명령어를 사용할 수 있게 됩니다.

tty(터미널)그룹에 들어가 명령어가 실행될 수 있었던 것입니다.

원래는 root만 가능한 명령어이지만 setGID를 통해 일반 유저도 wall명령어를 사용할 수 있습니다.

 

wall(write to all)은 모든 유저(모든 터미널)에게 메세지를 보내는 명령어 입니다.

옵션도 있지만 궁금하시면 한번 찾아보시길 바랍니다.

 

# wall [보낼 메세지]를 입력하면 같은 터미널에 있는 사람들에게 메세지를 보낼 수 있습니다.

여러개의 터미널을 켜서 다른 계정으로 로그인 하셔서 확인해보실 수 있습니다.

 

○ Sticky Bit

    ▷ 특정 디렉토리를 누구나 자유롭게 사용할 수 있게 하기 위해서 사용 (디렉토리만 효과있음)

        (이런 특성을 이용해 공용 디렉토리, 자유게시판 등등에 활용되고 있습니다.)

    ▷ 이 설정을 하면 디렉토리의 소유자 or 파일 소유자 or 관리자가 아닌 사용자들은

        파일을 삭제하거나 변경하지 못하도록 되어있습니다.

    ▷ 하지만 디렉토리 or 파일 생성은 누구나 할 수 있습니다.

 

권한 주는 법

# chmod 1000 [파일명]

# chmod o+t [파일명] 또는 # chmod u+t [파일명]

  (제거 # chmod o-t [파일명] 또는 # chmod u-t [파일명])

 

 

※ 꿀팁 : 리눅스에서 권한 공부를 하다보면 완벽히 이해하려면 이것을 꼭 알아야합니다.

            디렉토리의 권한이 바로 밑 파일까지 적용됩니다.

 

Sticky Bit가 설정된 디렉토리의 소유자는 그 디렉토리 안에 관리자인 root가 만든 파일도 변경 가능

 

 

대표적 예시

/tmp 디렉토리 같이 공용 디렉토리에 사용합니다.

 

○ 파일 속성

    ▷ 허가권, 소유권과는 다른 개념으로 파일을 관리할 수 있습니다.

    ▷ chattr의 명령어로 파일 속성을 변경하여 파일 손상을 방지 합니다.

    ▷ lsattr의 명령어로 파일 속성을 확인 할 수 있습니다.

 

옵션과 속성이 더 있습니다. 대표적인 것만 작성했습니다.

# lsattr [파일명] : 파일의 속성을 출력

# chattr [+속성] [파일명] : 파일의 속성 추가

# chattr [-속성] [파일명] : 파일의 속성 삭제

 

i (immutable)속성 : i속성을 가지는 파일은 관리자라도 변경, 삭제 등 조작 불가능

a (append only)속성 : a속성을 가지는 파일은 내용추가 기능, 관리자라도 삭제는 불가능

 

예시

# lsattr test1 명령어로 test1파일 속성 확인

 

 

# chattr +i test1 명령어로 test1파일에 i속성 추가

# lsattr test1 명령어로 test1파일 속성 확인

 

 

# rm -rf test1 명령어로 test1파일 강제 삭제를 시도했습니다.

그러나 i속성으로 인하여 삭제 불가능 (관리자라고 해도 불가능)

참고로 이 파일이 속한 디렉토리도 삭제가 안됩니다.

 

 

삭제를 하려면 i속성을 제거해야합니다.

# chattr -i test1 

# lsattr test1

 

 

이제 다시 삭제를 시도해봅니다.

# rm -rf test1 명령어로 깨끗하게 삭제되었습니다.

 

 

이 파일에 속성을 부여하는 것은 rm명령어로 디렉토리를 실수로 날리는 것을 방지하거나

중요한 파일들을 속성을 부여해놓으면 삭제를 하는 사고를 방지 할 수 있습니다.

 

또 이 속성은 lsattr명령으로만 확인을 할 수 있습니다. ls명령어로는 보이지 않습니다.

반응형

댓글