Setuid 및 setgid 작동하지 않습니다.


1

나는 setuid와 setgid에 문제가있다. 이 C 코드를 작성했습니다.

int main() {
    setuid(0);
    setgid(0);
    system("/path/to/script.sh");
    return 0;
}

gcc를 사용하여 컴파일 :

gcc test.c -o test

그런 다음 나는 chmod +s. 에서 script.sh 오직 id 명령. 다음은 test 실행 파일 :

-rwxr-sr-x  1 root   root   8464 mag 15 20:14 test

프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

uid=1000(user) gid=1000(user) gruppi=1000(user)

왜 출력을 얻지 못하는거야? id 루트에 의해 실행됩니까?

답변:


1

setuid 및 setgid를 사용하여 다른 사용자로 쉘 스크립트를 실행할 수 없습니다. 그것은 보안 기능이며, 그것에 대해 더 많이 읽을 수 있습니다. 이 UL 게시물에 대한 매우 포괄적 인 답변입니다.


스크립트는 setuid 또는 setgid가 아니며 실행 파일에 의해 호출됩니다.
Ignacio Vazquez-Abrams

아, 나는 아직도 쉘 스크립트가 호출되고 있기 때문에 여전히 똑같은 것으로 추측 할 수 있습니다. 왜냐하면이 쉘 스크립트는 직접적으로 수행되는 것에 대한 보호를 우회하는 간단한 방법 일 것이기 때문입니다.하지만 확실히 말할 수는 없습니다.
Mella

0

MAN 페이지에서 인용 한 setuid()

따라서 루트 사용자를 임시로 삭제하고자하는 사용자 ID 루트 프로그램은,        권한이없는 사용자의 신원을 추측 한 다음 다시 회복하십시오.        이후 루트 권한은 setuid ()를 사용할 수 없습니다. 너는 이것을 성취 할 수있다.        seteuid (2)와 함께.

성공하면 0이 반환됩니다. 에러시, -1이 리턴되고, errno는        적절하게 설정하십시오.

   Note:  there  are cases where setuid() can fail even when the caller is
   UID 0; it is a grave security error to  omit  checking  for  a  failure
   return from setuid().

그 중에서도 사용자가 될 수 없음을 의미합니다. root 이 명령을 통해.

게시 된 코드가 이러한 명령에서 반환 된 값을 확인한 경우 명령이 실패한 것으로 나타났습니다.

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