setuid 없이 setuid 바이너리를 일시적으로 실행하시겠습니까?

setuid 없이 setuid 바이너리를 일시적으로 실행하시겠습니까?

현재 xpra를 설정하고 있으며 가상 드라이버를 사용하여 루트가 아닌 사용자로 X 인스턴스를 실행하려고 하지만 시스템 Xorg 바이너리는 SUID입니다. 시스템이 자동으로 업데이트되므로 SUID가 아닌 바이너리 복사본을 생성하고 유지하고 싶지 않습니다. 또한 예를 들어 tmp 디렉토리에서 삭제를 수행하기 위해 복사와 같은 해킹을 사용하지 않으려고 노력하고 있습니다. 여기에는 미묘한 보안 허점이 있을 수 있지만 본능적으로 가능하다고 믿는 깔끔한 한 줄로 만드는 것을 선호합니다. 기능이 공개됩니다). 내가 아는 한 심볼릭 링크는 허용 비트 마스킹 기능을 제공하지 않지만 허용됩니다.

현재 가장 좋은 해결책은 bin 디렉토리에 nosuid 바인드 마운트를 수행하는 것입니다. 이는 트릭을 수행하는 것처럼 보이지만 위에서 언급한 것처럼 시스템 트리/fstab에 혼란을 남기지 않는 솔루션을 선호합니다(예: 예를 들어 일부 마법의 환경 변수는 nosuid 마운트와 동일한 방식으로 suid를 비활성화하거나 suid 메커니즘을 우회하는 일부 명령줄 실행 jutsu를 비활성화합니다.

어떤 아이디어가 있나요?

답변1

동적으로 링크된 경우 X다음과 같이 동적 링커를 호출할 수 있습니다.

/lib/ld.so /path/to/X

(귀하의 시스템에 적응하십시오 ld.so(예 /lib/ld-linux.so.2: ).

예:

$ /lib64/ld-linux-x86-64.so.2 /bin/ping localhost
ping: icmp open socket: Operation not permitted

답변2

당신이 가지고 있다면 strace, 그리고그것아니요setuid가 루트이면

strace -e '!all'프로그램명[논쟁]

작동해야합니다.  트랙(1)(오류 발생 시) 다음과 같이 말합니다.

setuid 비트를 사용하는 프로그램은 추적 시 유효한 사용자 ID 권한이 없습니다.

권한이 없는 사용자가 사용하면 보안 문제가 발생하기 때문입니다.할 수 있다setuid 프로그램을 추적합니다(추적을 통해 프로세스의 메모리를 검사하고 수정할 수 있기 때문입니다). 그리고 SETUID INSTALLATION이라는 특수 섹션에서 위의 사항을 약간 방지합니다.

strace루트에 setuid를 설치하면... setuid 및 setgid 프로그램~ 할 것이다올바른 유효한 권한으로 실행하고 추적하세요. ...전체 루트 권한을 가진 신뢰할 수 있는 사용자만 이러한 작업을 수행할 수 있습니다.

따라서 strace루트에 setuid를 설치하면 위의 트릭이 작동하지 않습니다. 그러나 일반적으로 이것은 사실이 되어서는 안됩니다. 그리고 그런 경우에도 SUID가 아닌 비공개 업데이트를 만들어서 할 수 있습니다 ( 자동 업데이트를 사용하더라도 그렇게 하면 안 될 것 strace같습니다./bin/strace필요개인 사본을 업데이트하세요. )

명령은 무엇인지 -e알려주세요.strace이자형통풍구가 추적됩니다.  -e all"모든 이벤트 추적"(기본값)을 의미하므로 -e '!all'추적이 없음을 의미합니다. 1strace 이는 실제로 프로그램(X 프로그램)이 실행되는 것을 기다리고 지켜보는 것 외에는 아무것도 하지 않는   결과를 낳습니다 . 어쨌든 원하지 않는 출력이 생성되면 출력을 로 리디렉션합니다 . ( 이는 콘솔 출력을 볼 필요 /dev/null가 없다고 가정합니다.

!all!

관련 정보