>  기사  >  운영 및 유지보수  >  리눅스 UID의 용도는 무엇입니까

리눅스 UID의 용도는 무엇입니까

藏色散人
藏色散人원래의
2023-03-13 09:40:502927검색

Linux uid의 기능은 사용자를 식별하는 것이며 각 사용자는 UID를 가지고 있습니다. Linux에는 세 가지 UID 식별자가 있습니다: 1. RUID, 실제 UID, 실제 사용자 ID 2. EUID, 유효 UID, 유효 사용자 ID; 3 , SUID, 저장된 세트 사용자 ID, 저장된 세트 사용자 ID.

리눅스 UID의 용도는 무엇입니까

이 튜토리얼의 운영 환경: linux5.9.8 시스템, Dell G3 컴퓨터.

리눅스 UID의 용도는 무엇인가요?

Linux의 UID

Linux에서는 UID를 사용하여 사용자(예: alice, bob, root)를 식별합니다.
Android에서는 UID를 사용하여 애플리케이션 또는 시스템 서비스를 식별합니다.

1.

1.1의 Linux UID 프로세스당 세 개의 UID 값

사용자당 하나의 UID.

커널은 각 프로세스에 대해 3개의 UID ID를 유지합니다. 이 세 가지 UID 식별자는 RUID(실제 UID, 실제 사용자 ID), EUID(유효 UID, 유효 사용자 ID), SUID(저장된 세트-사용자 ID, 저장 세트 사용자 ID)입니다.

  • RUID: 현재 로그인한 사용자, 생성하기 위해 프로그램을 실행하는 프로세스의 RUID는 이 사용자의 UID입니다.
  • EUID: 현재 프로세스가 실제로 실행되는 UID를 나타냅니다. 일반적인 상황에서 EUID는 RUID와 동일합니다. 그러나 프로세스에 해당하는 실행 파일에 SUID 권한(즉, rws의 s)이 있는 경우 프로세스의 EUID는 실행 파일 소유자의 UID입니다. .
  • SUID
  • : SUID 권한과 관련된 EUID 사본입니다.

1.2 바이너리 파일에 대한 SUID 권한passwd 실행 파일을 예로 들어 보겠습니다.

비밀번호 파일의 권한은 다음과 같습니다: -rwsr-xr-x

passwd의 소유자는 루트이지만 다른 사용자도 passwd에 대한 실행 권한을 갖고 있으며 passwd 자체에는 SUID 권한(rws의 s)이 있습니다. ).
그러면 루트가 아닌 사용자가 passwd 실행 파일을 실행하면 생성된 프로세스의 -rwsr-xr-x
passwd的所有者是root,但是其他用户对于passwd也有执行权限,并且passwd自身具有SUID权限(rws的s)。
那么,当非root用户执行passwd这个可执行文件的时候,产生的进程的EUID,就是root用户的UID。换言之,这种情况下,产生的进程,实际以root用户的ID来运行二进制文件。

需要说明的是,SUID权限具有时效性仅在执行该文件的过程中有效

二、setuid、setresuid函数

2.1 setuid函数

函数原型:int setuid(uid_t uid);

在Linux中, setuid(uid)函数的执行步骤为:
(1)如果由Root权限进程(EUID为0的进程)调用,则将进程的RUID,EUID和SUID都设置为uid,返回0
(2)如果由普通权限进程调用,且uid等于RUID或uid等于SUID,则将进程的EUID设置为uid,返回0
(3)如果由普通权限进程调用,且uid不等于RUID或SUID,则设置errno为EPERM,并返回-1(表示执行失败)

上文中,执行password的进程,EUID是password的所有者的UID,也就是root用户的UID,也就是0。所以,属于情况(1)。

su文件同样是-rwsr-xr-xEUID

루트 사용자의 UID가 됩니다. 즉, 이 경우 생성된 프로세스는 실제로 루트 사용자의 ID로 바이너리 파일을 실행합니다.

SUID 권한은 시간에 민감합니다

: 파일 실행 중에만 유효합니다 .

2.setuid, setresuid 함수
2.1 setuid 함수

함수 프로토타입: int setuid(uid_t uid);

Linux에서는 setuid (uid) 함수의 실행 단계는 다음과 같습니다.
    (1) 루트 권한이 있는 프로세스(EUID 0인 프로세스)에 의해 호출되는 경우 프로세스의 RUID, EUID 및 SUID를 uid로 설정하고 0을 반환합니다
  • (2) 호출되는 경우 일반 권한이 있는 프로세스에 의해 호출되고 uid가 RUID와 같거나 uid가 SUID와 같으면 해당 프로세스의 EUID를 uid로 설정하고 0
    을 반환합니다. (3) 일반 권한이 있는 프로세스에 의해 호출되고 uid가 그렇지 않은 경우 RUID 또는 SUID와 같으면 errno를 EPERM으로 설정하고 -1을 반환합니다(실행 실패를 나타냄)
  • 위에서 비밀번호를 실행하는 프로세스의 EUID는 비밀번호 소유자의 UID, 즉 루트의 UID입니다. 사용자는 0입니다. 따라서 (1)의 경우에 속한다.

    su 파일에는 -rwsr-xr-x 권한도 있습니다. 따라서 Android에서는 일반 프로세스가 Runtime.getRuntime().exec("su")를 통해 쉘 프로세스를 시작하여 su를 실행하는 경우에도 (1)의 상황에 해당합니다.

2.2 setresuid 함수

참조 https://blog.csdn.net/damotiansheng/article/details/39674115
함수 프로토타입: int setresuid(uid_t ruid, uid_t euid, uid_t suid); 만족도 Setresuid는 다음 조건 중 하나일 때 실행됩니다

: ① 현재 프로세스의 euid가 루트(AID_ROOT) ② ruid, euid, suid 세 매개변수가 각각 현재 프로세스의 특정 UID 값과 같습니다

예: 🎜🎜🎜현재 프로세스의 RUID=100, EUID=0, SUID=300🎜인 경우 원래 euid=0🎜🎜현재 프로세스의 RUID=100이므로 setresuid(200,300,100)를 실행할 수 있습니다. , EUID=300,SUID =200🎜 이 세 매개변수는 모두 현재 UID 중 하나이므로 setresuid(200,300,100)를 실행할 수 있습니다. 🎜 그러나 400은 현재 UID와 동일하지 않기 때문에 setresuid(100,200,400)를 실행할 수 없습니다. UID. 🎜🎜🎜🎜🎜3. getuid, geteuid 함수 🎜🎜getuid는 현재 프로세스의 🎜RUID를 반환합니다.🎜🎜 geteuid는 현재 프로세스의 🎜EUID를 반환합니다.🎜🎜🎜관련 권장 사항: "🎜Linux 비디오 튜토리얼🎜"🎜🎜

위 내용은 리눅스 UID의 용도는 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.