這個問題很深。。。
你的問題剛好是我期中考的上機考選項之一。。。
系統的第一個user mode process是systemd或者是init,前者是比較新的方式,可以平行化的初始化系統,後者的平行化程度較低
重點來了:無論是systemd或者init的執行者都是root
動機:要怎樣實作登入系統呢?
首先以root的權限執行login process(例如:由systemd執行),login process驗證帳號、密碼正確以後,他執行setuid(1000)及setgid(1000)(這裡假設login process查詢/etc/passwd以後,發現使用者的uid和gid都是1000)
UNIX在這個地方用上一個聰明的設計,當root變身為其他使用者以後,effective uid和real uid都變成1000,這樣就可以確保登入系統的使用者不會拿到root的權限
應用:例如設計遊戲伺服器
現在的遊戲伺服器都是使用Linux,因此必須建立一個software server一直聽網路上的封包,這個software類似於login process
當使用者登入以後,就切換成該使用者的權限,這樣即使駭客想要破壞遊戲伺服器,他也得先攻破Linux的保護機制
如果自行設計保護機制當然也可以,但再加上Linux的預設保護機制當然就更好
大家的ftp server也是用類似的方法設計的
a0985707420 在 2021年4月9日 星期五上午9:41:06 [UTC+8] 的信中寫道: