setuid를 파일 시스템 기능으로 바꾸는 방법

setuid를 파일 시스템 기능으로 바꾸는 방법

에서 영감을 받다이 문제다음은 다음과 같습니다.

일부 취약점은 이러한 파일을 악용하여 권한을 루트로 승격시키기 때문에 setuid 바이너리가 위험하다는 것을 알고 계신 분들도 있을 것입니다.

setuid를 더 안전한 다른 방법으로 대체하려는 흥미로운 아이디어가 떠오르는 것 같습니다.

어떻게?

답변1

Linux의 파일 시스템 기능이 추가되어 setuid만 사용할 때보다 더 세밀하게 제어할 수 있습니다. 사용자(보통 루트)에게 유효 권한을 완전히 승격하려면 setuid를 사용하십시오. 기능(7) 맨페이지는 다음 설명을 제공합니다.

권한 확인을 수행하기 위해 기존 Unix 구현에서는 권한이 있는 프로세스(유효 사용자 ID가 0이고 수퍼유저 또는 루트라고 함)와 권한이 없는 프로세스(유효 UID가 0이 아님)라는 두 가지 유형의 프로세스를 구별합니다. 권한이 있는 프로세스는 모든 커널 권한 검사를 우회하는 반면, 권한이 없는 프로세스는 프로세스 자격 증명(일반적으로 유효 UID, 유효 GID 및 보충 그룹 목록)을 기반으로 전체 권한 검사를 받습니다.

커널 2.2부터 Linux는 전통적으로 수퍼유저와 관련된 권한을 독립적으로 활성화 및 비활성화할 수 있는 기능이라는 여러 단위로 나눕니다. 기능은 각 스레드의 속성입니다.

응용 프로그램이 chroot()(보통 루트 사용자에게만 허용됨)를 호출할 수 있어야 하는 경우 CAP_SYS_CHROOTsetuid 대신 바이너리에 설정할 수 있습니다. 이는 setcap 명령을 사용하여 수행할 수 있습니다:

setcap CAP_SYS_CHROOT /bin/mybin

~처럼RPM 버전 4.7.0, 패키지 파일에 기능을 설정하는 데 사용할 수 있습니다 %caps.

페도라 15에는출시 대상여기에서 추적된 모든 setuid 바이너리를 제거합니다.오류 보고서. 버그 보고서에 따르면 이 목표는 달성되었습니다.

Wikipedia에 관한 기사기능 기반 보안관심 있는 사람이라면 누구나 읽어볼 수 있는 좋은 책입니다.

관련 정보