這篇文章主要介紹“l(fā)inux uid的作用是什么”,在日常操作中,相信很多人在linux uid的作用是什么問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”linux uid的作用是什么”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
為思明等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及思明網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)制作、網(wǎng)站制作、思明網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
linux uid的作用是標(biāo)識(shí)一個(gè)用戶,每個(gè)用戶有一個(gè)UID;linux中有三個(gè)UID標(biāo)識(shí)分別是:1、RUID,Real UID,實(shí)際用戶ID;2、EUID,Effective UID,有效用戶ID;3、SUID,Saved Set-user-ID,保存的設(shè)置用戶ID。
每個(gè)用戶有一個(gè)UID。
內(nèi)核為每個(gè)進(jìn)程維護(hù)3個(gè)UID標(biāo)識(shí)。這三個(gè)UID標(biāo)識(shí)分別是RUID(Real UID,實(shí)際用戶ID)、EUID(Effective UID,有效用戶ID)、SUID(Saved Set-user-ID,保存的設(shè)置用戶ID)。
RUID:我們當(dāng)前以哪個(gè)用戶登錄,我們運(yùn)行程序產(chǎn)生進(jìn)程的RUID就是這個(gè)用戶的UID。
EUID:指當(dāng)前進(jìn)程實(shí)際以哪個(gè)UID來(lái)運(yùn)行。一般情況下EUID等于RUID;但如果進(jìn)程對(duì)應(yīng)的可執(zhí)行文件具有SUID權(quán)限(也就是rws的s),那么進(jìn)程的EUID是可執(zhí)行文件的所有者的UID。
SUID:EUID的一個(gè)副本,與SUID權(quán)限有關(guān)。
以passwd這個(gè)可執(zhí)行文件為例。
password文件的權(quán)限為:-rwsr-xr-x
passwd的所有者是root,但是其他用戶對(duì)于passwd也有執(zhí)行權(quán)限,并且passwd自身具有SUID權(quán)限(rws的s)。
那么,當(dāng)非root用戶執(zhí)行passwd這個(gè)可執(zhí)行文件的時(shí)候,產(chǎn)生的進(jìn)程的EUID,就是root用戶的UID。換言之,這種情況下,產(chǎn)生的進(jìn)程,實(shí)際以root用戶的ID來(lái)運(yùn)行二進(jìn)制文件。
需要說(shuō)明的是,SUID權(quán)限具有時(shí)效性:僅在執(zhí)行該文件的過(guò)程中有效。
函數(shù)原型:int setuid(uid_t uid);
在Linux中, setuid(uid)函數(shù)的執(zhí)行步驟為:
(1)如果由Root權(quán)限進(jìn)程(EUID為0的進(jìn)程)調(diào)用,則將進(jìn)程的RUID,EUID和SUID都設(shè)置為uid,返回0
(2)如果由普通權(quán)限進(jìn)程調(diào)用,且uid等于RUID或uid等于SUID,則將進(jìn)程的EUID設(shè)置為uid,返回0
(3)如果由普通權(quán)限進(jìn)程調(diào)用,且uid不等于RUID或SUID,則設(shè)置errno為EPERM,并返回-1(表示執(zhí)行失敗)
上文中,執(zhí)行password的進(jìn)程,EUID是password的所有者的UID,也就是root用戶的UID,也就是0。所以,屬于情況(1)。
su文件同樣是-rwsr-xr-x
權(quán)限。所以,安卓中,普通進(jìn)程通過(guò)Runtime.getRuntime().exec(“su”),發(fā)起一個(gè)shell進(jìn)程,去執(zhí)行su的時(shí)候,同樣屬于情況(1)。
函數(shù)原型:int setresuid(uid_t ruid, uid_t euid, uid_t suid);
滿足以下條件之一時(shí),setresuid被執(zhí)行:
①當(dāng)前進(jìn)程的euid是root(AID_ROOT)
②三個(gè)參數(shù)ruid、euid、suid中的每一個(gè),都和當(dāng)前進(jìn)程的某個(gè)UID值 相等
例如:
如果當(dāng)前進(jìn)程的RUID=100,EUID=0,SUID=300
則setresuid(200,300,100)可以執(zhí)行,因?yàn)樵瓉?lái)的euid=0
如果當(dāng)前進(jìn)程的RUID=100,EUID=300,SUID=200
則setresuid(200,300,100)可以執(zhí)行,因?yàn)檫@三個(gè)參數(shù)都是當(dāng)前UID中的某一個(gè);
但setresuid(100,200,400)不能執(zhí)行,因?yàn)?00不等于當(dāng)前UID中的任意一個(gè)。
getuid返回當(dāng)前進(jìn)程的RUID
geteuid返回當(dāng)前進(jìn)程的EUID
到此,關(guān)于“l(fā)inux uid的作用是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!