program story

실제 사용자 ID, 유효 사용자 ID 및 저장된 사용자 ID의 차이점

inputbox 2020. 9. 19. 11:05
반응형

실제 사용자 ID, 유효 사용자 ID 및 저장된 사용자 ID의 차이점


나는 이미 실제 사용자 ID를 알고 있습니다. 시스템에서 사용자의 고유 번호입니다. 내 시스템에서 내 uid는

$ echo $UID
1014
$                 

다른 두 ID의 약자는 무엇입니까? 그리고 유효 사용자 ID와 저장된 사용자 ID의 사용은 무엇이며 시스템에서 사용하는 위치입니다.


실제 사용자 ID와 유효 사용자 ID를 구분하는 이유는 다른 사용자의 ID를 일시적으로 가져와야 할 수 있기 때문입니다 (대부분의 경우 root이지만 모든 사용자 일 수 있음). 당신은 단지 하나 개의 사용자 ID를 가지고 있다면, 나중에 원래의 사용자 ID로 다시 변경하는 방법이 없을 것 (당연한 말씀을 복용 이외의, 그리고 경우에 당신은 root사용하여 root모든 사용자에게 변화의 권한을).

따라서 실제 사용자 ID는 귀하가 실제로 누구인지 (프로세스를 소유 한 사람)이고 유효 사용자 ID는 운영 체제가 어떤 작업을 수행 할 수 있는지 여부를 결정하기 위해 살펴 보는 것입니다 (대부분의 경우 , 몇 가지 예외가 있습니다).

로그인 할 때 로그인 쉘은 실제 사용자 ID와 유효 사용자 ID를 암호 파일에서 제공 한 것과 동일한 값 (실제 사용자 ID)으로 설정합니다.

지금, 또한 당신이이 setuid 프로그램을 실행하는 것이 발생하고, 다른 사용자로 실행 외에 (예를 들어 root)이이 setuid 프로그램이됩니다 또한 귀하를 대신 뭔가를 할 예정. 어떻게 작동합니까?
setuid 프로그램을 실행하면 실제 ID (프로세스 소유자이므로)와 파일 소유자의 유효 사용자 ID (예 root: setuid)를 갖게됩니다.

이 프로그램은 수퍼 유저 권한으로 필요한 모든 마법을 수행 한 다음 사용자를 대신하여 무언가를 수행하려고합니다. 즉, 할 수없는 일을하려는 시도 는 실패해야합니다 . 어떻게하나요? 글쎄, 분명히 유효한 사용자 ID를 실제 사용자 ID로 변경하면됩니다!

이제 setuid 프로그램은 커널이 아는 모든 것이 당신의 ID이고 ... 당신의 ID 이기 때문에 다시 전환 할 방법이 없습니다 . 뱅, 넌 죽었어.

이것은 저장된 사용자 설정 ID의 용도입니다.


몇 가지 예를 들어 단계별로 설명하겠습니다.

짧은 배경

각 프로세스는 같은 속성이 포함되어 자신의 '프로세스 자격 증명'이 PID1, PPID, PGID, session ID또한 실제와 유효 사용자와 그룹 ID를 : RUID, EUID, RGID, EGID.

우리는 그것에 초점을 맞출 것입니다.


1 부-UID 및 GID 이해

이제 내 자격 증명으로 셸에 로그인하고 다음을 실행합니다.

$ grep $LOGNAME /etc/passwd
rotem:x:1000:1000:rotem,,,:/home/rotem:/bin/bash

내 로그 이름 (rotem), UIDGID ( 둘 다 1000) 및 로그인 한 셸과 같은 기타 세부 정보를 볼 수 있습니다.


2 부-RUID 및 RGID 이해

모든 프로세스에는 소유자가 있으며 그룹에 속합니다 .
쉘에서 지금 실행할 모든 프로세스는 내 사용자 계정의 권한을 상속하고 동일한 UID 및 GID로 실행됩니다.

간단한 명령을 실행하여 확인할 수 있습니다.

$ sleep 10 & ps aux | grep 'sleep'

그리고 프로세스 UID 및 GID를 확인하십시오.

$ stat -c "%u %g" /proc/$pid/
1000 1000

이들은 프로세스실제 사용자 ID ( RUID)와 실제 그룹 ID ( RGID)입니다 .

(*)를 확인 UID를와 GID 볼 수있는 다른 옵션의 한 줄이 얻을 수있는 방법을 .

지금은 사실 동의 EUIDEGID속성이 '중복'입니다을 그냥 같음 RUIDRGID무대 뒤에서.


3 부-EUID 및 EGID 이해

이 시점까지는 조용하고 간단했습니다. 이제 우리는 이해하기 위해 더 많은 노력을 기울여야합니다.

하자가 걸릴 ping우리의 예와 같은 명령을 사용합니다.

which명령으로 바이너리 위치를 검색 한 다음 다음을 실행합니다 ls -la.

-rwsr-xr-x  1 root root   64424 Mar 10  2017  ping

You can see that owner and group of both files are root. This is because the ping command needs to open up a socket and the Linux kernel demands root privilege for that.

But how can I use ping if I don't have root privilege?
Notice the 's' letter instead of 'x' in the owner part of the file permission.
This is a special permission bit for specific binary executable files (like ping and sudo) which is known as setuid.

This is where EUID and EGID comes into play.
What will happen is when a setuid binary like ping executes, the process changes its Effective User ID (EUID) from the default RUID to the owner of this special binary executable file which in this case is - root.
This is all done by the simple fact that this file has the setuid bit.

The kernel make the decision whether this process has the privilege by looking on the EUID of the process. Because now the EUID points to root - this operation won't be rejected by the kernel.

Notice: On latest Linux Releases the the output of the ping command will look different because of the fact that they adopted the Linux Capabilities approach instead of this setuid approach - for those who are not familiar - read here.

Part 4 - What about SUID and SGID?

The Saved user ID (SUID) is being used when a privileged process is running (root for example) and needs to do some unprivileged tasks.

In that case, the effective UID (EUID) from before will be saved inside SUID and then changed to an unprivileged value. When the unprivileged task is completed the EUID will be taken from the value of SUID and switch back to privileged account.


I hope it was clear enough.

참고URL : https://stackoverflow.com/questions/32455684/difference-between-real-user-id-effective-user-id-and-saved-user-id

반응형