天天看點

與程序相關的幾個ID,set-user-ID和set-group-ID

程式檔案是一個二進制檔案。在Unix中,二進制檔案和文本檔案都叫普通檔案。不同檔案的不同解釋,這就靠應用程式來解釋了。

與jin程序相關的ID有以下三種:實際使用者ID(real user ID), 有效使用者ID(effective user ID)和 儲存的設定使用者ID(saved set-user-ID)。

正常情況下,一個程式檔案,被使用者之行起來,那麼這個程序的有效使用者ID就是實際使用者ID,兩者相等。實際使用者ID就是執行這個進行的使用者的使用者ID。

現在,假若,這個程式檔案的stat結構體中的st_mode成員的set-user-ID,被設定為有效,那麼,程式被運作起來了以後,有效使用者ID(effective user ID)就不等于實際使用者ID了,它等于程序要打開的檔案的擁有者的使用者ID了。

程序操作檔案時,看有沒有權限操作這個檔案,比較的是程序的有效使用者ID和要操作的檔案的擁有者ID兩者之間的關系。

舉個例子:

passwd 指令,需要讀寫/etc/passwd ,  -rw-r--r--. 1 root root 2133 10月 23 2014 /etc/passwd, 但是/etc/passwd的擁有者是root,隻有root使用者才可以讀寫。

-rwsr-xr-x. 1 root root 30768 2月  22 2012 /usr/bin/passwd 指令擁有者是root,其他使用者擁有執行的權利。

如果passwd被普通使用者執行,那麼怎麼會更改/etc/passwd裡面的内容呢 ?問題來了。。。。

是這樣的,passwd指令程式檔案是被置了set-user-ID标志的,那麼程式檔案被運作起來變成程序後,程序的實際使用者ID就是執行該程式的使用者的ID,***高潮來了***程序的有效使用者ID是/etc/passwd 的實際擁有者使用者ID了,就是root的ID了,這樣,該程序對這個檔案就臨時有了root權限了。

繼續閱讀