실제 사용자 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의 용도입니다.
몇 가지 예를 들어 단계별로 설명하겠습니다.
짧은 배경
각 프로세스는 같은 속성이 포함되어 자신의 '프로세스 자격 증명'이 PID
1, 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), UID 및 GID ( 둘 다 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 볼 수있는 다른 옵션 과 의 한 줄이 얻을 수있는 방법을 .
지금은 사실 동의 EUID
와 EGID
속성이 '중복'입니다을 그냥 같음 RUID
과 RGID
무대 뒤에서.
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.
'program story' 카테고리의 다른 글
X-Frame-Options Allow-From 여러 도메인 (0) | 2020.09.19 |
---|---|
YouTube API 버전 3으로 동영상 길이를 어떻게 얻나요? (0) | 2020.09.19 |
JavaScript : 값으로 객체를 전달하는 방법? (0) | 2020.09.18 |
Git의 파일에 대한 변경 사항을 선택적으로 되돌 리거나 체크 아웃 하시겠습니까? (0) | 2020.09.18 |
Android에서 홈 버튼 누름 감지 (0) | 2020.09.18 |