이 중 하나에서 영감을 받아이전에 답변된 질문, 소유자가 아닌 사용자가 프로그램을 실행하려고 하는데 프로세스의 RUID와 EUID가 동일하게 유지됩니다. (내가 답을 잘못 읽지 않는 한 이것이 차이를 얻는 방법이 아닙니다.)
그런 다음 다른 사용자로 프로그램을 열려고 시도했지만 sudo
여전히 결과가 없습니다.
기존 프로세스를 모두 스캔했는데(제 생각에는) ps axo euid,ruid,comm -e g
그 중 어느 것도 다른 RUID와 EUID를 갖고 있지 않습니다.
차이점을 어떻게 달성하거나 프로세스를 찾을 수 있습니까? 일부 단계에서 실수를 했을 수도 있으므로 일부 특정 명령이 도움이 될 것입니다.
답변1
자신에게 속하지 않은 실행 파일을 호출하는 데는 아무런 문제가 없습니다. 시스템의 대부분의 실행 파일은 루트에 속하며 이를 실행해도 사용자에게 추가 권한이 부여되지 않습니다.
이것은 단지사용자 ID 설정다음으로 시작하는 실행 파일유효한 UID실행 파일의 소유자로 설정되어 있지만실제 UID여전히 호출 프로세스의 실제 UID입니다.
sudo
setuid 루트이므로 유효 UID 0과 실제 UID로 실행됩니다. 그러나 다른 명령을 호출하면 대상 사용자에 대한 유효 UID와 실제 UID가 설정됩니다. sudo
RUID와 다른 EUID를 관찰하려면 자신을 캡처해야 합니다 . 비밀번호를 묻는 메시지가 표시 되지 않으면 sudo
곧 비밀번호를 볼 수 없습니다.
passwd
루트가 아닌 사용자로 명령을 실행하면 다양한 UID를 쉽게 관찰할 수 있습니다. 메시지가 표시되면 ps
다른 터미널에서 실행합니다.
ps -o user,ruser -C passwd
다른 EUID 및 RUID를 사용하여 실행 중인 모든 프로세스를 찾으려면 다음을 사용할 수 있습니다.
ps -e -o user= -o ruser= | awk '$1 != $2'
setuid 프로세스를 찾지 못하는 것이 정상입니다. 대부분의 setuid 프로세스는 수명이 짧습니다.
답변2
누군가 명령이 uid와 다른 euid를 표시하기를 원하는 경우 id
(맨 페이지의 동작) 한 가지 방법은 임시 c 프로그램에서 명령을 실행하는 것입니다.
$ sudo gcc -o test.bin -xc - <<EOF
#include <stdlib.h>
#include <unistd.h>
int main() { seteuid(0); system("id"); }
EOF
$ sudo chmod +s test.bin && ./test.bin && sudo rm test.bin
결과는 다음과 같습니다.
uid=1000(user) gid=1000(user) euid=0(root) egid=0(root) groups=0(root),1000 ...