스테이스와 폴킷

스테이스와 폴킷

루트로 실행하기를 거부하는 프로그램이 있습니다. 그는 "실제 사용자"가 이 프로그램을 실행하기를 원하지만 실행 중에 일부 보호된 경로를 수정하기 위해 권한 상승을 원합니다.

strace인수를 사용하여 호출하지 않는 한 이것은 잘 작동 -f하지만 필요할 때 polkit 창이 나타나지 않고 프로그램이 권한이 없다고 불평하고 종료됩니다.


setUID가 무엇인지는 잘 모르지만 명령은 다음과 같습니다.$ strace -f script.bash

답변1

스트레스 용도프로세스의 시스템 호출을 추적합니다.

보안상의 이유로 권한이 있는 프로그램(예: pkexec)은사용자 ID 설정프로세스를 추적하는 프로세스가 루트가 아닌 경우(또는 Linux에서는 루트가 SYS_PTRACE없거나SYS_ADMIN 능력.)

을 실행하면 strace script.bashstrace는 스크립트를 실행하는 셸을 성공적으로 추적하고(추가 권한은 없음) 셸 스크립트에 의해 실행되는 프로그램은 추적하지 않습니다. 따라서 스크립트가 실행되면 pkexecpkexec는 모든 권한으로 실행됩니다.

그러나 strace -f script.bash스크립트를 실행하는 셸은 추적됩니다.그리고 스크립트가 실행되는 모든 프로그램. 스크립트가 실행되면 pkexecpkexec에는 setuid 권한이 없으며 불평하고 종료됩니다.

pkexec와 pkexec가 실행하는 모든 것을 추적하는 한 가지 방법은 strace를 루트로 실행하는 것입니다.

sudo strace -f script.bash그러나 스크립트(및 pkexec)가 루트로 실행되므로 실행하고 싶지 않습니다 .

대신 일반 사용자로 시작한 후 스크립트에 strace를 추가하세요. 다음과 같이 스크립트를 수정하세요.

#!/bin/bash
echo please run sudo strace -f -p $$ while this script is doing its read
read -n 1 -r -s reply
if [[ $reply == [Yy] ]]; then
    pkexec "$NAME_INST" "$@"
fi

관련 정보