xyz
루트 권한을 사용 하는 사용자 만 내 프로그램을 실행할 수 있도록하고 싶습니다 . 이를 위해 setuid 비트를 다음과 같이 설정합니다.
chmod u+s program1.sh
ls -l program1.sh
rwsr-x--- 1 root house 1299 May 15 23:54 program1.sh
또한 사용자 xyz
를 house
그룹에 추가 xyz
하여 root 만 program1.sh를 실행할 수 있도록했습니다 .
program1.sh에는
id -u
유효 ID를 보여줄 수 있습니다.
program1.sh
루트로 실행 하면 root
. 그러나 xyz
계정으로 실행하면 xyz
. 루트 권한으로 실행되지 않은 것 같습니다. 나는 여기서 무엇이 잘못되었는지 모른다.
setuid 비트가있는 쉘 스크립트 (예 : rwsr-xr-x의 perms)를 실행할 때 스크립트는 스크립트를 소유 한 사용자가 아니라 스크립트를 실행하는 사용자로 실행됩니다. 이것은 어떤 사용자가 실행하는지에 관계없이이를 소유 한 사용자로 실행되는 바이너리 (예 : / usr / bin / passwd)에 대해 setuid가 처리되는 방식과 반대입니다.
이 페이지를 확인하십시오 : https://access.redhat.com/site/solutions/124693이것은 운영 체제에서 취한 보안 조치입니다. 대신 sudo 와 함께 스크립트를 사용해야합니다 .
스크립트에 setuid를 정말로 사용해야하는 경우 작업을 수행 할 바이너리를 만들 수 있습니다. 새 파일 "program.c"를 만들고 다음 코드를 복사합니다.
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
setuid(0);
system("./program.sh"); #This line is dangerous: It allows an attacker to execute arbitrary code on your machine (even by accident).
return 0;
}
다음 명령을 사용하여 코드를 컴파일하고 실행합니다.
$ gcc program.c -o program
$ sudo chown root.root program
$ sudo chmod 4755 program
$ ./program
이렇게하면 작동합니다. setuid는 컴파일 된 파일에 대해 작동하며이 파일은 다른 파일을 루트로 실행할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다