1. 程式人生 > >UNIX環境程式設計筆記——儲存的設定使用者ID

UNIX環境程式設計筆記——儲存的設定使用者ID

可執行檔案的設定使用者ID位

我們知道,如果設定了可執行檔案的設定使用者ID位,那麼在執行此檔案的時候,程序的有效使用者ID將會設定成該檔案的所有者使用者ID,這使得我們可以以該檔案的所有者的使用者許可權對該檔案進行操作。比較典型的一個例子就是 passwd 命令。passwd命令允許我們更改當前登陸使用者的密碼而不需要具有root使用者許可權。由於該命令需要寫/etc/passwd檔案,但我們通過ll命令檢視該檔案的相關許可權可以看到:

[email protected]:~$ ll /etc/passwd
-rw-r--r-- 1 root root 2496 11月 29 10:55 /etc/passwd

只有root使用者才具備寫passwd檔案的許可權。可見passwd命令是設定了設定使用者ID位的。
通過再次對/usr/bin/passwd 檔案使用ll命令我們可以證實這一結論:

[email protected]:~$ ll /usr/bin/passwd 
-rwsr-xr-x 1 root root 59640 1月  25  2018 /usr/bin/passwd*

如果需要對可執行檔案的這一特殊位進行設定,可以使用chmod *+s [filename]

儲存的設定使用者ID

與可執行檔案的設定使用者ID位相關的是與之對應的程序的儲存的設定使用者ID位。
回顧一下,如果設定了可執行檔案的設定使用者ID位,那麼當作業系統將該檔案載入進記憶體進行執行的時候,這一程序的有效使用者ID便設定成該檔案的所有者使用者ID。
現在,讓我們看一下與一個程序相關聯的ID都有哪些:

ID名 含義
實際使用者ID,實際組ID 我們實際上是誰
有效使用者ID,有效組ID, 附屬組ID 用於檔案訪問許可權檢查
儲存的設定使用者ID, 儲存的設定組ID 由exec函式儲存

(摘自UNIX環境高階程式設計第三版)
我們還要注意到,儲存的設定使用者/組ID是由exec函式複製有效使用者ID位而得到的。

對於沒有設定設定使用者/組ID位的檔案

對應的程序的有效使用者ID一般就是其實際使用者ID,所以儲存的設定使用者ID也就是實際使用者ID,進而可以看到這三者是相等的。

對於設定了設定使用者/組ID位的檔案

對應的程序的有效使用者ID等於檔案所有者使用者ID,所以儲存的設定使用者ID便是檔案的所有者使用者ID,此時程序的有效使用者ID和儲存的設定使用者ID相等,與程序的實際使用者ID不等。

當程序儲存了設定使用者ID後,就可以在其生命週期中的合適的場景下,進行有效使用者和儲存的設定使用者許可權之間的切換,這有助於保證程序不會因在全部時間內都保持額外的許可權而造成的可能的安全問題。