Setuid(Setuid)

Setuid

Unix 액세스 권한 플래그 setuid 및 setgid(set user id 및 set group [1]id의 줄임말)를 사용하면 사용자는 각각 실행 파일의 소유자 또는 그룹의 파일 시스템 권한으로 실행 파일을 실행하고 디렉토리의 동작을 변경할 수 있습니다.컴퓨터 시스템의 사용자가 특정 작업을 수행하기 위해 일시적으로 상승된 권한으로 프로그램을 실행할 수 있도록 하는 데 자주 사용됩니다.제공된 가정된 사용자 ID 또는 그룹 ID 권한이 항상 상승하는 것은 아니지만 최소한 고유합니다.

깃발setuid그리고.setgid는 로그인 비밀번호를 변경하기 위해 시스템파일 [2]또는 데이터베이스를 변경하는 기능 등 통상 사용자에게 부여된 권한과는 다른 권한을 필요로 하는 태스크에 필요합니다.단, 추가 권한이 필요한 작업 중 일부는 다음과 같이 즉시 명확하지 않을 수 있습니다.ping이 명령어는 네트워크인터페이스상의 제어 패킷을 송수신 할 필요가 있습니다.

파일 모드

setuid그리고.setgid비트는 보통 4의 값으로 표시됩니다.setuid및 2의 경우setgid파일 모드의 상위 8진수로 지정합니다.예를들면,6711양쪽을 가지고 있다setuid그리고.setgid비트(4 + 2 = 6)가 설정되고 소유자(7)에 대한 파일 읽기/쓰기/삭제 가능, 그룹(첫 번째 1) 및 기타(두 번째 1)에 의해 실행 가능.대부분의 구현에는 이러한 비트가 심볼적으로 표현되어 있습니다.앞의 예에서는, 다음과 같은 경우가 있습니다.u=rwx,go=x,ug+s.

일반적으로.chmod에는 디렉토리로 제한된 재귀 모드가 없기 때문에 기존 디렉토리 트리를 다음과 같은 명령을 사용하여 수동으로 변경해야 합니다.find /path/to/directory -type d -exec chmod g+s '{}' '\'.

영향들

setuid그리고.setgid플래그는 파일에 적용되는지, 디렉토리 또는 바이너리 실행 파일 또는 비바이너리 실행 파일에 적용되는지에 따라 효과가 달라집니다.setuid그리고.setgid플래그는 이진 실행 파일에만 영향을 미치며 스크립트(예: Bash, Perl,[3] Python)에는 영향을 미치지 않습니다.

실행 파일에 설정된 경우

언제?setuid또는setgid속성을 실행 파일에 설정하면 파일을 실행할 수 있는 사용자는 플래그 세트에 [2]따라 파일 소유자(루트 삭제) 및/또는 파일 그룹의 권한으로 파일을 자동으로 실행합니다.이것에 의해, 시스템 설계자는 신뢰할 수 있는 프로그램의 실행을 허가할 수 있습니다.그 이외의 경우에는 실행할 수 없습니다.이것들은 항상 명백하지 않을 수 있다.예를 들어 ping 명령어는 일반 사용자가 액세스할 수 없는 네트워크 특권에 액세스할 필요가 있을 수 있습니다.따라서 setuid 플래그를 사용하여 자신의 계정에 패킷 전송에 필요한 권한이 없는 경우에도 다른 시스템에 ping할 필요가 있는 사용자가 액세스 할 수 있도록 할 수 있습니다.

보안에 미치는 영향

보안상의 이유로 호출하는 사용자는 보통 시스템에 의해 새로운 프로세스를 변경하는 것을 금지합니다.예를 들어,ptrace,LD_LIBRARY_PATH또는 시그널을 송신해, 상승한 특권을 이용합니다만, 단말로부터의 시그널은 그대로 받아들여집니다.

한편,setuid이 기능은 많은 경우에 매우 유용하며 부적절한 사용은 보안 위험을 초래할[2] 수 있습니다.setuid속성이 신중하게 설계되지 않은 실행 프로그램에 할당됩니다.잠재적인 보안 [4]문제로 인해 많은 운영체제는setuid실행 가능한 셸 스크립트에 적용되는 경우 속성을 지정합니다.

의 존재setuid실행 가능 파일:chroot시스템 콜은 Unix에서 루트 사용자가 아닌 사용자는 사용할 수 없습니다.상세한 것에 대하여는, 의 제한을 참조해 주세요.

디렉토리에 설정되어 있는 경우

의 설정setgid디렉토리에 대한 권한을 부여하면 파일 생성 프로세스의 주 그룹이 아니라 내부에 생성된 파일 및 하위 디렉터리가 그룹 소유권을 상속하게 됩니다.작성된 서브 디렉토리는 다음 서브 디렉토리를 상속합니다.setgidbit. 정책은 생성 시에만 적용되므로 예측적으로만 적용됩니다.디렉토리 및 파일이 존재하는 경우setgid적용된 비트는 영향을 받지 않으며 비트가 설정된 디렉토리와 파일로 이동됩니다.

따라서 명시적으로 권한을 설정하지 않고 사용자 그룹 간에 파일을 사용할 수 있는 용량이 부여되지만 기존 파일 권한이 암묵적으로 변경되지 않는다는 보안 모델의 예상에 따라 제한됩니다.

setuid디렉토리의 권한 세트는 대부분의 UNIX [citation needed]Linux 시스템에서 무시됩니다., FreeBSD를 구성해서setuid와 같은 방법으로setgid이 경우 디렉터리에 작성된 모든 파일 및 하위 디렉터리가 해당 디렉터리의 소유자가 소유하도록 강제합니다. 즉, 단순한 [5]상속 형식입니다).디폴트로는 디렉토리는 다음과 같이 취급되기 때문에 일반적으로 BSD에서 파생된 대부분의 시스템에서는 필요하지 않습니다.setgid비트는 실제 값에 관계없이 항상 설정됩니다.에 기재된 바와 같이open(2), "새 파일이 생성되면 해당 [6]파일이 포함된 디렉토리의 그룹이 지정됩니다."

사용 권한 확인 중

명령줄 도구를 사용하여 파일의 권한을 8진수 또는 알파벳 형식으로 확인할 수 있습니다.stat

[ torvalds ~ ] $ stat - c %a %A ~ / test / 1770 drwxrwx--T

SUID

'root' 및 'root' 그룹이 소유한 실행 파일의 4701

'thompson'이라는 이름의 사용자가 파일을 실행하려고 합니다.모든 사용자에 대한 실행 권한('1')을 설정하여 'thompson'이 파일을 실행할 수 있도록 합니다.파일 소유자는 'root'이고 SUID 권한('4')이 설정되어 있으므로 파일이 'root'로 실행됩니다.

실행 파일이 'root'로 실행되는 이유는 사용자에게 완전한 루트 액세스 권한을 부여하지 않고도 일반적으로 허용되지 않는 특정 파일을 수정할 수 있기 때문입니다.

디폴트 사용방법은/usr/bin/passwd바이너리 파일 /usr/bin/passwd수정할 필요가 있다/etc/passwd그리고./etc/shadow모든 사용자에 대한 계정 정보 및 암호 해시를 저장하며, 이러한 해시는 'root' 사용자만 수정할 수 있습니다.

[ tompson ~ ] $ stat - c %a %U : %G %n " /usr / bin / passwd 4701 root : root /usr / bin / passwd [ tompson ~ ] $ passwd : Thompson 비밀번호 변경

프로세스의 소유자는 실행 파일을 실행하는 사용자가 아니라 실행 파일의 소유자입니다.

SGID

사용자 'root'과 그룹 'music'이 소유한 'music'이라는 이름의 디렉토리 2770

torvalds라는 이름의 사용자는 주로 torvalds라는 그룹에 속하지만, 다음으로 engineers라는 그룹에 속하며, 'music'이라는 이름의 디렉토리 아래에 'electronic'이라는 이름의 디렉토리를 만듭니다.'electronic'이라는 이름의 새 디렉토리의 그룹 소유권은 '엔지니어'를 상속합니다.이는 'imagine'이라는 이름의 새 파일을 만들 때도 마찬가지입니다.txt'

SGID가 없었다면 새 디렉토리/파일의 그룹 소유권은 사용자 '토벌즈'의 주 그룹이기 때문에 '토벌즈'가 되었을 것입니다.

[ torvalds ~ ] $ groups torvalds torvalds : torvalds engineers [ torvalds ~ ] $ stat - c "%a %U : %G %n" . / music / 2770 root: engineers . / [ torvalds ~ ] $ mkds ~ ] $ mkdr . / mkdr . / mkdr . / markdr . / markdr . / markdr . / music . / c : %g /txt [ torvalds ~ ]$ stat - c %U : %G %n . / music / imagine 。txt torvalds: ./music/music.txt [ torvalds ~ ] $ touch ~ / test [ torvalds ~ ] $ stat - c %U : %G %n " ~ / test torvalds ~ / test

스틱 비트

1770은 사용자 'torvalds'와 그룹 'torvald'가 소유한 'video games'라는 이름의 디렉토리에 있습니다.

torvalds라는 이름의 사용자는 'videogames'라는 이름의 디렉토리 아래에 'tekken'이라는 이름의 파일을 만듭니다.'엔지니어' 그룹의 일원이기도 한 'wozniak'라는 이름의 사용자는 'tekken'이라는 이름의 파일을 삭제하려고 시도하지만 소유자가 아니기 때문에 삭제할 수 없다.

스틱 비트가 없었다면 'wozniak'은 파일을 삭제했을 수 있습니다. 왜냐하면 'videogames'라는 이름의 디렉토리는 'engineer'가 읽고 쓸 수 있기 때문입니다.디폴트 사용법은/tmp폴더입니다.

[torvalds /home/shared/]달러 그룹 torvalds torvalds:torvalds 기술자들[torvalds /home/shared/]달러stat -c"%가%U:%G%n"./videogames/은 1770torvalds:./videogames/달러 반향'NEW FILE의<[torvalds /home/shared/]엔지니어들 videogames/tekken[torvalds /home/shared/]달러 su-wozniak 암호:[wozniak ~/]달러 그룹 wozniak wozniak:wozni.10월. engineers [ wozniak ~/] $ cd / home / shared / videogames [ wozniak / home / shared / videogames / ] $rm tekken rm : cannot remove 'tekken' : 작업이 허용되지 않습니다.

SGID를 사용하는 스틱비트

그룹 'syslog'와 사용자 'root'이 소유한 'syslog'라는 이름의 디렉토리 상의 3171

주로 그룹 'torvalds'에 속하지만 다음으로 그룹 'engineers'에 속하는 'torvalds'라는 이름의 사용자는 디렉토리 'blog' 내에 'thinks'라는 이름의 파일 또는 디렉토리를 작성합니다.그룹 '엔지니어'에 속한 'wozniak' 사용자는 소유자가 아니고 스틱비트가 설정되어 있기 때문에 'thoughts'라는 이름의 파일 또는 디렉토리를 삭제, 이름 변경 또는 이동할 수 없습니다.그러나 'thinks'가 파일인 경우 'wozniak'은 편집할 수 있습니다.

스틱 비트가 최종 결정을 내립니다.스틱 비트와 SGID가 설정되지 않은 경우, "wozniak" 사용자는 "thinks"라는 이름의 파일의 이름을 바꾸거나 이동 또는 삭제할 수 있습니다. 왜냐하면 "blog"라는 이름의 디렉토리는 그룹별 읽기 및 쓰기를 허용하고 wozniak은 그룹에 속하며 기본 0002 umask는 그룹별로 새 파일을 편집할 수 있기 때문입니다.스틱 비트와 SGID는 읽기 전용 umask 또는 추가 전용 애트리뷰트 등의 애트리뷰트와 조합할 수 있습니다.

[torvalds /home/shared/]달러 그룹 torvalds torvalds:torvalds 기술자들달러stat -c"%가%U:%G%n"./blog/ 3171 뿌리[torvalds /home/shared/]:./blog/달러 반향'NEW FILE의<[torvalds /home/shared/]엔지니어들 ./blog/thoughts달러 su-wozniak 암호[torvalds /home/shared/]:[wozniak ~/]달러 cd/home/shared/blog는 경우에는wozniak /home/shared/blo.g/ $ groups wozniak wozniak : wozniak 엔지니어 [ wozniak / home / shared / blog / ]$ stat - c %a %U : %G %n" . / thinks 664 torvalds : engineers . / thinks [ wozniak / home / shared / blog / blog / noz ]$rm : ]$rm : wozniak : ]삭제할 수 없습니다.niak/thinks': 작업이 허용되지 않습니다. [ wozniak / home / shared / blog / ] $ mv thinks 숙고: 'thinks'를 'pondering'으로 이동할 수 없습니다. 작업 허용되지 않습니다. [ wozniak / home / shared / blog / ] $ echo 'REWrite!' > 생각 [ wozniak / home / shared / blog / ] $ cat 생각 다시 쓰기!

보안.

개발자는 버퍼 오버런경로 주입 의 보안 취약성을 방지하기 위해 이 비트를 사용하는 프로그램을 실행 파일에 신중하게 설계하고 구현합니다.취약한 응용 프로그램에 대한 버퍼 오버런 공격이 성공하면 공격자가 악용된 프로세스의 권한으로 임의 코드를 실행할 수 있습니다.취약한 프로세스가 다음 명령을 사용하는 경우setuid로서 하기에는 조금root이 코드는 루트 권한으로 실행되며, 사실상 공격자가 취약한 프로세스가 실행되고 있는 시스템에 대한 루트 액세스 권한을 부여합니다.

의 경우 특히 중요합니다.setuid프로세스는 프로세스의 환경입니다.환경이 권한 있는 프로세스에서 제대로 검사되지 않은 경우 환경을 [7]시작한 권한 없는 프로세스에 의해 환경이 변경될 수 있습니다.예를 들어, GNU libc는 한때 다음과 같은 부정 이용에 취약했습니다.setuid신뢰할 수 없는 공유 [8]라이브러리에서 코드를 실행할 수 있는 환경 변수입니다.

역사

setuid비트는 Dennis Ritchie[9] 의해 발명되어 에 포함되었습니다.su그의 고용주, 당시 벨 전화 연구소는 1972년에 특허를 출원했다; 특허는 1979년에 특허 번호로서 부여되었다.[9]US 4135240 "데이터 파일 콘텐츠 보호"그 특허는 나중에 공개되었다.[10]

「 」를 참조해 주세요.

레퍼런스

  1. ^ von Hagen, William (2010-05-13). Ubuntu Linux Bible. pp. 3–59. ISBN 9780470881804.
  2. ^ a b c Frisch, Æleen (2009-02-09). Essential system administration. O'Reilly. p. 351. ISBN 9780596550493.
  3. ^ Billimoria, Kaiwan N. (2018). Hands-On System Programming with Linux: Explore Linux system programming interfaces, theory, and practice. Packt Publishing Ltd. p. 250. ISBN 978-1-78899-674-7.
  4. ^ "Unix - Frequently Asked Questions".
  5. ^ "chmod -- change file modes". freebsd.org.
  6. ^ "open, openat -- open or create a file for reading, writing or executing". freebsd.org.
  7. ^ Brown, Neil (November 23, 2010). "Ghosts of Unix past, part 4: High-maintenance designs". LWN.net. Retrieved 30 March 2014.
  8. ^ Edge, Jake (October 27, 2010). "Two glibc vulnerabilities". LWN.net. Retrieved 30 March 2014.
  9. ^ a b McIlroy, M. Douglas (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (PDF) (Technical report). CSTR. Bell Labs. 139.
  10. ^ "Summary of key software patents".

외부 링크