日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux/unix下setuid/seteuid/setreuid/setresuid

發布時間:2023/12/10 linux 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux/unix下setuid/seteuid/setreuid/setresuid 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

其中setresuid()具有最清晰的語法:

?

setresuid()被執行的條件有:

?

①當前進程的euid是root

②三個參數,每一個等于原來某個id中的一個

?

如果滿足以上條件的任意一個,setresuid()都可以正常調用,并執行,將

?

進程的ID設置成對應的ID。

?

例子:

?

如果ruid=100,euid=0,suid=300

?

則setresuid(200,300,100)可以執行,因為原來的euid=0.

?

如果ruid=100,euid=300,suid=200

?

則setresuid(200,300,100)也可以執行,因為這三個新的id都是原來id中的某一個。

?

但是setresuid(100,200,400)就不能執行,因為400不等于原來三個id中的任意一個。

?

?

?

setresuid()有個性質,英文名稱是all-or-nothing effect,意思是,如果setresuid()

?

對某一個ID設置成功了,其他的失敗了,比如只改變了ruid,suid和euid都改失敗了

?

那么程序會將ruid改回原來的值,即保證要么三個ID都能成功修改,要么三個都沒能修改成功。

?

PS:FreeBSD和Linux支持setresuid,Solaris不支持setresuid,但有自己的實現方式。

?

?

?

seteuid()也有較清晰的語法:

?

? 無論什么情況,它只改變進程euid,而不改變ruid和suid。

?

? 如果原來的euid==0,則新的euid隨意設,都可以成功改變。

?

? 如果原來的euid!=0,不同的系統的處理方式是不一樣的:

?

-Solaris和Linux只允許新的euid等于原來三個id中的任意一個;

-但是FreeBSD只允許新的euid等于ruid和suid中的一個;

貌似FreeBSD這個限制是多余的,因為新的euid==原來的euid的時候應該是可以的,但是它會報錯,不允許。

?

?

?

setreuid()有點小復雜:

?

? 它會修改ruid和euid,也某些情況下,也會修改suid。

?

? 而且不同的系統對setreuid也有不同的處理方式:

?

-在Solaris和Linux中,setreuid(geteuid(),getuid())可以實現ruid和euid的交換

-FreeBSD則會失敗;

?

?

?

setuid()

?

如果原來的euid==0,則該函數將會設置所有的id都等于新的id。

?

如果原來的三個id為:ruid=300,euid=0,suid=100

?

則setuid(200)執行以后,ruid=200,euid=200,suid=200

?

?

?

如果原來的euid!=0,但是新的id等于原來ruid和suid中的一個,那么也是可以執行的。否則就不能執行。

?

比如原來的三個id為:ruid=100,euid=200,suid=300

?

則setuid(300)可以執行,執行結束以后ruid=100,euid=300,suid=300(也就是說只改變了euid)。

?

setuid(400)就不能執行。

?

?

?

不同的系統有不同的處理方式:

?

-Linux和Solaris:如果euid不等于0,那么新的id必須等于ruid或者suid中的一個(就是我們上面說的);

-FreeBSD待定,還沒搞清楚;

?

setuid()的行為不僅取決于系統,還取決于進程的優先級:

?

-Linux和Solaris:如果euid==0,那么將三個id都設置為新的id;否則,只設置euid;

-FreeBSD:不管euid值,如果執行成功,直接設置所有的id都為新的id;

?

轉載于:https://www.cnblogs.com/bittorrent/p/3260483.html

總結

以上是生活随笔為你收集整理的linux/unix下setuid/seteuid/setreuid/setresuid的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。