Linux uid의 기능은 사용자를 식별하는 것이며 각 사용자는 UID를 가지고 있습니다. Linux에는 세 가지 UID 식별자가 있습니다: 1. RUID, 실제 UID, 실제 사용자 ID 2. EUID, 유효 UID, 유효 사용자 ID; 3 , SUID, 저장된 세트 사용자 ID, 저장된 세트 사용자 ID.
이 튜토리얼의 운영 환경: linux5.9.8 시스템, Dell G3 컴퓨터.
리눅스 UID의 용도는 무엇인가요?
Linux의 UID
Linux에서는 UID를 사용하여 사용자(예: alice, bob, root)를 식별합니다.
Android에서는 UID를 사용하여 애플리케이션 또는 시스템 서비스를 식별합니다.
사용자당 하나의 UID.
커널은 각 프로세스에 대해 3개의 UID ID를 유지합니다. 이 세 가지 UID 식별자는 RUID(실제 UID, 실제 사용자 ID), EUID(유효 UID, 유효 사용자 ID), SUID(저장된 세트-사용자 ID, 저장 세트 사용자 ID)입니다.
-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权限具有时效性:仅在执行该文件的过程中有效。
函数原型: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-x
EUID
SUID 권한은 시간에 민감합니다: 파일 실행 중에만 유효합니다 .
2.setuid, setresuid 함수
2.1 setuid 함수
-rwsr-xr-x
권한도 있습니다. 따라서 Android에서는 일반 프로세스가 Runtime.getRuntime().exec("su")를 통해 쉘 프로세스를 시작하여 su를 실행하는 경우에도 (1)의 상황에 해당합니다. 참조 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 값과 같습니다
위 내용은 리눅스 UID의 용도는 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!