Linux系統(tǒng)進(jìn)程的幾個(gè)用戶ID及其轉(zhuǎn)換方法
Linux為每個(gè)進(jìn)程設(shè)置了3個(gè)ID:實(shí)際用戶id,有效和用戶id和保存的設(shè)置id。
本文引用地址:http://www.2s4d.com/article/201610/305768.htm關(guān)于這3個(gè)id,需要注意以下幾個(gè)方面:
1.只有root才能改變進(jìn)程的實(shí)際用戶id。例如,用戶從終端login程序登陸,此時(shí)login程序的3個(gè)id都是root。然后正確輸入用戶名密碼之后,login程序于是setuid到注冊(cè)的id。于是3個(gè)id都被改成了注冊(cè)的用戶id。然后exec shell程序。非root用戶注冊(cè)進(jìn)入shell之后,他的實(shí)際用戶id是絕對(duì)不會(huì)被更改的。除非logout之后,重新注冊(cè)shell。一些su改變用戶的操作實(shí)際上都是改變shell進(jìn)程的有效用戶id,并不是shell進(jìn)程的實(shí)際用戶id。
2.exec程序時(shí),可執(zhí)行文件有一個(gè)設(shè)置id位,該位的設(shè)置與否與進(jìn)程的有效用戶id和保存的設(shè)置id有很大關(guān)系??梢杂胠l命令查看,如果有s標(biāo)記的話說(shuō)明設(shè)置了,否則沒(méi)有。首先沒(méi)有設(shè)置的情況,3個(gè)id均不會(huì)改變和調(diào)用者的進(jìn)程的id一樣?,F(xiàn)在是設(shè)置了的情況,實(shí)際用戶id仍然不會(huì)改變,有效用戶id則設(shè)置為可執(zhí)行文件的屬主用戶,保存的設(shè)置id設(shè)置成有效用戶id一樣。這樣的程序有很多,比如passwd,su等。例如,passwd程序,一個(gè)普通用戶foo通過(guò)shell執(zhí)行passwd,首先shell進(jìn)程fork產(chǎn)生一個(gè)子進(jìn)程,然后子進(jìn)程exec passwd程序。由于passwd設(shè)置了設(shè)置id位,并且passwd是屬于root用戶。于是子進(jìn)程設(shè)置有效用戶id位為root,保存的設(shè)置用戶id也設(shè)置成了root。passwd執(zhí)行完畢時(shí),再改變有效用戶id和保存的設(shè)置用戶id為以前的實(shí)際用戶id的值。
3.保存的設(shè)置-用戶- ID 是由exec從有效用戶I D復(fù)制的。在exec按文件用戶I D設(shè)置了有效用戶I D后,即進(jìn)行這種復(fù)制,并將此副本保存起來(lái)。
評(píng)論