set-user-ID 메커니즘은 Unix에서 어떻게 작동합니까?


12

누군가 유닉스에서 set-user-ID 메커니즘을 설명해 주시겠습니까? 이 디자인 결정의 근거는 무엇입니까? 효과적인 사용자 ID 메커니즘과 다른 점은 무엇입니까?

답변:


10

유닉스에서 파일에 대한 일반적인 읽기, 쓰기 및 실행 권한을 알 수 있습니다.

그러나 많은 응용 프로그램에서 이러한 유형의 권한 구조 (예 : 주어진 사용자에게 주어진 파일을 읽을 수있는 모든 권한을 부여하거나 전혀 파일을 읽을 수있는 권한을 부여하지 않음)는 너무 거칠습니다. 이러한 이유로 Unix에는 다른 권한 비트 인 set-user-ID비트가 포함됩니다. 이 비트가 실행 파일에 대해 설정되면 소유자 이외의 사용자가 파일을 실행할 때마다 해당 사용자는 소유자의 다른 파일에 액세스 할 때 소유자의 모든 파일 읽기 / 쓰기 / 실행 권한을 얻습니다!

파일의 set-user-ID 비트를 설정하려면 다음을 입력하십시오.

 chmod u+s filename

group-other 실행 권한도 설정했는지 확인하십시오. 그룹 다른 읽기 권한도 있으면 좋을 것입니다. 이 모든 것은 단일 진술로 수행 할 수 있습니다

 chmod 4755 filename

저장된 UID라고도합니다. Set-UID 비트가 켜진 파일은 저장된 UID가 파일 소유자의 UID가됩니다. 그렇지 않으면 저장된 UID가 실제 UID가됩니다.

효과적인 uid 란 무엇입니까?

이 UID는 프로세스의 특권을 평가하여 특정 조치를 수행하는 데 사용됩니다. EUID! = 0 인 경우 EUID를 Real UID로 또는 Superuser UID로 변경할 수 있습니다. EUID = 0이면 다른 것으로 변경할 수 있습니다.

그러한 프로그램의 예는 passwd입니다. 전체를 나열하면 Set-UID 비트가 있고 소유자가 "root"임을 알 수 있습니다. "mtk"와 같은 일반 사용자 passwd는 다음과 같이 시작합니다.

Real-UID = mtk  
Effective-UID = mtk  
Saved-UID = root

참조 링크 1
참조 링크 2


5

man credentials이 경우 좋은 정보원입니다. SO 에 대한이 Questiin도 참조하십시오 . 역사적 설명은이 보관 된 게시물을 참조하십시오 .

"UID 설정"및 "유효한 UID"메커니즘을 호출하는 대신 UID의 전체 개념을이를 호출해야합니다. 다양한 UID의 존재에 대한 이론적 근거는 권한 분리와 관련된 다양한 문제입니다. 일반 (권한이없는) 사용자라도 권한이있는 사용자 만 할 수있는 작업 (액세스 리소스)을 수행해야하는 경우가 있습니다. 이를 쉽게 달성하기 위해 프로그램은 UID를 변경할 수 있습니다. 이 중 세 가지 유형이 있습니다.

  • 실제 UID-프로세스를 소유 한 UID

  • 효과적인 UID-프로세스가 현재 실행되는 UID-특정 순간에 프로세스의 실제 기능을 결정합니다. 이것은 또한 psUSER 필드에 표시되는 것입니다.

  • 저장된 UID-실제 UID와 유효 UID 간을 전환하는 데 사용되는 자리 표시 자

마지막의 필요성은 일반 사용자 수 있다는 사실에서 발생하는 경우에만 이 세 사이에 전환 아무것도 과 (플러스 실제 UID 이후 변경되지 않아야로드 사용자가 있었다 일반적으로 어떻게 든 알 필요가있는이 setuid 프로그램, 더 큰 혼란을 일으킬 것입니다).


1

mtk의 발음은 좋은 것입니다.

passwd예는 권한 에스컬레이션 중 하나입니다. passwd는 루트 만 변경할 수있는 파일을 변경해야하므로 항상 루트로 실행됩니다. 이것은 암호 실행 파일이 버퍼 오버 플로우 등을 일으키지 않도록하는 것이 중요하므로, 영리한 일반 사용자가 의도하지 않은 용도로 사용할 수 있습니다.

또 다른 근거는 su루트로 로그인 한 경우 와 동일한 방식으로 사용자를 보호하는 것입니다. 특정 작업에 대한 권한 을 축소하거나 제한 하기 위해 에스컬레이션하지 않습니다. 예를 들어, 물건에 접근 할 필요가없고 필요한 물건 (예 : 로거) 인 물건을 가지고있는 데몬 서비스를 시작할 수있는 권한이있는 경우 suid를 실행하면 해당 물건에만 액세스 할 수 있음을 의미합니다 내 또는 다른 사람이 아닙니다.

실행 파일에 suid 비트가 설정되지 않은 경우에도 프로그래밍 방식으로 uid를 설정할 수 있지만 에스컬레이션에는 작동하지 않습니다. 즉, 일반 사용자이고 어떤 시점에서 uid를 설정하는 프로그램을 작성하는 경우 해당 프로그램은 루트로 전환 할 수 없습니다. 아파치는 이런 식으로 작동한다고 생각합니다. 일반적으로 루트로 시작되며 uid를 권한이없는 사용자 (예 : "httpd")로 전환하는 자식을 분기시키는 프로세스가 하나 있습니다. 이러한 하위 프로세스는 실제 웹 서버 작동 방식입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.