Setuid
유닉스 계열 시스템에서, 접근 권한 플래그인 setuid와 setgid(set user identity와 set group identity의 약자)[1]는 사용자가 실�…
유닉스 계열 시스템에서, 접근 권한 플래그인 setuid와 setgid(set user identity와 set group identity의 약자)[1]는 사용자가 실행 파일을 해당 파일 소유자나 그룹의 파일 시스템 권한으로 실행할 수 있게 하며, 디렉터리에서의 동작 방식을 변경할 수 있게 한다. 이는 컴퓨터 시스템의 사용자가 특정 작업을 수행하기 위해 일시적으로 상승된 권한으로 프로그램을 실행할 수 있도록 하는 데 자주 사용된다. 이때 제공되는 사용자 ID나 그룹 ID 권한이 항상 상승된 것은 아니지만, 최소한 특정 권한을 갖게 된다.
setuid와 setgid 플래그는 사용자가 일반적으로 부여받는 권한과는 다른 권한이 필요한 작업(예: 시스템 파일 수정 또는 로그인 암호 변경을 위한 데이터베이스 변경 등)에 필요하다.[2] 추가 권한이 필요한 작업 중 일부는 즉각적으로 명확하지 않을 수 있는데, 예를 들어 네트워크 인터페이스에서 제어 패킷을 전송하고 수신해야 하는 ping 명령어가 이에 해당한다.
효과
setuid와 setgid 플래그는 파일, 디렉터리, 바이너리 실행 파일 또는 비바이너리 실행 파일 중 어디에 적용되느냐에 따라 서로 다른 효과를 가진다. setuid와 setgid 플래그는 바이너리 실행 파일에만 효과가 있으며 스크립트(예: Bash, Perl, Python)에는 효과가 없다.[3]
실행 파일에 설정된 경우
setuid 또는 setgid 속성이 실행 파일에 설정되면, 해당 파일을 실행할 수 있는 모든 사용자는 설정된 플래그에 따라 파일 소유자(일반적으로 루트) 및 파일 그룹의 권한으로 해당 파일을 자동으로 실행하게 된다.[2] 이는 파일을 실행하는 프로세스의 유효 사용자 ID를 파일 소유자로 설정하거나 유효 그룹 ID를 파일 그룹으로 설정함으로써 이루어진다. 이를 통해 시스템 설계자는 사용자가 원래는 실행할 수 없는 신뢰할 수 있는 프로그램을 실행하도록 허용할 수 있다. 이는 항상 명확하지는 않을 수 있다. 예를 들어, ping 명령어는 일반 사용자가 접근할 수 없는 네트워크 권한이 필요할 수 있으므로, 계정에 패킷 전송을 위한 권한이 없더라도 시스템을 핑(ping)해야 하는 사용자가 이를 수행할 수 있도록 setuid 플래그가 부여될 수 있다.
보안 영향
보안상의 이유로, 시스템은 일반적으로 호출자가 상승된 권한을 악용하기 위해 ptrace를 사용하거나, PATH 또는 LD_LIBRARY_PATH와 같은 환경 변수를 지정하거나, 프로세스에 신호를 보내는 등의 방법으로 새로운 프로세스를 변경하는 것을 금지한다. 다만, 터미널에서 보내는 신호는 계속 수락된다.
setuid 기능은 많은 경우에 매우 유용하지만, 주의 깊게 설계되지 않은 실행 파일 프로그램에 setuid 속성이 할당되면 부적절한 사용으로 인해 보안 위험이 발생할 수 있다.[2] 잠재적인 보안 문제로 인해,[4] 많은 운영 체제는 실행 가능한 셸 스크립트에 setuid 속성이 적용되면 이를 무시한다.[5]
setuid 실행 파일의 존재는 유닉스에서 chroot 시스템 호출을 루트가 아닌 사용자가 사용할 수 없는 이유를 설명한다. 자세한 내용은 chroot의 제한 사항을 참조하라.
디렉터리에 설정된 경우
디렉터리에 setgid 권한을 설정하면 해당 디렉터리 내에서 생성된 파일과 하위 디렉터리는 파일 생성 프로세스의 기본 그룹 대신 해당 디렉터리의 그룹 소유권을 상속받는다. 생성된 하위 디렉터리도 setgid 비트를 상속받는다. 이 정책은 생성 시점에만 적용되므로 미래지향적이다. setgid 비트가 설정될 때 이미 존재하는 디렉터리와 파일은 영향을 받지 않으며, 해당 디렉터리로 이동된 디렉터리와 파일도 마찬가지이다.
이를 통해 사용자 그룹은 권한을 명시적으로 설정하지 않고도 파일 작업을 할 수 있으나, 기존 파일 권한이 암시적으로 변경되어서는 안 된다는 보안 모델의 기대에 의해 제한된다.
대부분의 BSD 계열 시스템에서는 기본적으로 디렉터리가 실제 값과 관계없이 setgid 비트가 항상 설정된 것처럼 처리되므로 일반적으로 이 기능은 필요하지 않다.[6]
FreeBSD에서 suiddir 옵션으로 마운트된 UFS 파일 시스템의 디렉터리에 setuid 비트를 설정하면, 그 안에 생성된 파일과 하위 디렉터리는 파일 생성 프로세스의 사용자 ID 대신 해당 디렉터리의 소유권을 상속받는다.[7]
보안
이 비트들이 설정된 실행 파일은 버퍼 오버런 및 경로 삽입을 포함한 보안 취약점을 피하기 위해 신중하게 설계 및 구현되어야 한다. 취약한 애플리케이션에 대한 성공적인 버퍼 오버런 공격은 공격자가 악용된 프로세스의 권한으로 임의 코드를 실행할 수 있게 한다. 취약한 프로세스가 setuid 비트를 사용하여 root 권한으로 실행되는 경우, 코드는 루트 권한으로 실행되어 사실상 공격자에게 해당 프로세스가 실행 중인 시스템에 대한 루트 접근 권한을 부여하게 된다.
setuid 또는 setgid 프로세스의 경우 프로세스의 환경이 특히 중요하다. 권한 있는 프로세스에 의해 환경이 적절하게 정리되지 않으면, 이를 시작한 권한 없는 프로세스에 의해 동작이 변경될 수 있다.[8] 예를 들어, GNU libc는 한때 setuid와 신뢰할 수 없는 공유 라이브러리에서 코드를 실행할 수 있게 하는 환경 변수를 사용하는 익스플로잇에 취약했던 적이 있다.[9]
역사
setuid 비트는 데니스 리치에 의해 발명되었으며[10] 유닉스의 첫 번째 버전에 포함되었다.[10] 그의 고용주였던 당시의 벨 전화 연구소는 1972년에 특허를 출원했다. 이 특허는 1979년에 US 4135240 "데이터 파일 내용의 보호"라는 특허 번호로 승인되었으며, 같은 해에 퍼블릭 도메인으로 헌정되었다.[11][8][12]
이 특허는 1996년에 만료되었다.[13]
같이 보기
각주
- ↑ von Hagen, William (2010년 5월 13일). 《Ubuntu Linux Bible》. John Wiley & Sons. 3–59쪽. ISBN 9780470881804.
- ↑ 가 나 다 Frisch, Æleen (2009년 2월 9일). 《Essential system administration》. O'Reilly. 351쪽. ISBN 9780596550493.
- ↑ Billimoria, Kaiwan N. (2018). 《Hands-On System Programming with Linux: Explore Linux system programming interfaces, theory, and practice》. Packt Publishing Ltd. 250쪽. ISBN 978-1-78899-674-7.
- ↑ “Unix - Frequently Asked Questions”.
- ↑ Keith Bostic (1988년 10월 12일). “Re: System V Release 4 ...”. 뉴스그룹: comp.unix.wizards.
The current Berkeley distribution (4.3BSD-tahoe) does not allow setuid/gid shell scripts.
- ↑ – FreeBSD System Calls 매뉴얼 페이지 "새 파일이 생성되면 해당 파일을 포함하는 디렉터리의 그룹이 부여된다."
- ↑ – FreeBSD System Calls 매뉴얼 페이지
- ↑ 가 나 Brown, Neil (2010년 11월 23일). “Ghosts of Unix past, part 4: High-maintenance designs”. 《LWN.net》. 2014년 3월 30일에 확인함.
- ↑ Edge, Jake (2010년 10월 27일). “Two glibc vulnerabilities”. 《LWN.net》. 2014년 3월 30일에 확인함.
- ↑ 가 나 McIlroy, M. Douglas (1987). 《A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986》 (PDF) (기술 보고서). CSTR. Bell Labs. 139.
- ↑ Robbins, Arnold (2025). 《Linux Application Development by Example: The Fundamental APIs》 2판. Addison-Wesley Professional. ISBN 978-0135325520. 2026년 4월 17일에 확인함.
AT&T assigned the patent to the public, allowing anyone to use its technology.
- ↑ Dordal, Pete (2010). “Computer Ethics, Fall 2010 Week 11”. 2026년 4월 17일에 확인함.
1973: ATT somehow manages to patent the setuid bit, claiming it's hardware. This patent was dedicated to the public domain in 1979.
- ↑ “Summary of key software patents”.
외부 링크
- Chen, Hao; 와그너, 데이비드; and Dean, Drew; Setuid Demystified (pdf)
- Tsafrir, Dan; 다 실바, 딜마; and Wagner, David; The Murky Issue of Changing Process Identity: Revising Setuid Demystified (pdf)
- Pollock, Wayne; Unix File and Directory Permissions and Modes
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.