我們知道,如果設定了可執行檔案的設定使用者id位,那麼在執行此檔案的時候,程序的有效使用者id將會設定成該檔案的所有者使用者id,這使得我們可以以該檔案的所有者的使用者許可權對該檔案進行操作。比較典型的乙個例子就是 passwd 命令。passwd命令允許我們更改當前登陸使用者的密碼而不需要具有root使用者許可權。由於該命令需要寫/etc/passwd檔案,但我們通過ll命令檢視該檔案的相關許可權可以看到:
wang@wang-lenovo-rescuer-15isk:~$ ll /etc/passwd
-rw-r--r-- 1 root root 2496 11月 29 10:55 /etc/passwd
只有root使用者才具備寫passwd檔案的許可權。可見passwd命令是設定了設定使用者id位的。
通過再次對/usr/bin/passwd 檔案使用ll命令我們可以證實這一結論:
wang@wang-lenovo-rescuer-15isk:~$ 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
由exec函式儲存
(摘自unix環境高階程式設計第三版)
我們還要注意到,儲存的設定使用者/組id是由exec函式複製有效使用者id位而得到的。
對於沒有設定設定使用者/組id位的檔案
對應的程序的有效使用者id一般就是其實際使用者id,所以儲存的設定使用者id也就是實際使用者id,進而可以看到這三者是相等的。
對於設定了設定使用者/組id位的檔案
對應的程序的有效使用者id等於檔案所有者使用者id,所以儲存的設定使用者id便是檔案的所有者使用者id,此時程序的有效使用者id和儲存的設定使用者id相等,與程序的實際使用者id不等。
當程序儲存了設定使用者id後,就可以在其生命週期中的合適的場景下,進行有效使用者和儲存的設定使用者許可權之間的切換,這有助於保證程序不會因在全部時間內都保持額外的許可權而造成的可能的安全問題。
共享儲存(UNIX環境高階程式設計筆記)
共享儲存允許兩個或者多個程序共享乙個給定的儲存區。因為資料不需要在客戶程序和伺服器程序之間進行複製,所以這是最快的一種ipc。通常,使用訊號量同步共享儲存訪問。呼叫的第乙個函式通常是shmget,它獲得乙個共享儲存標識。include int shmget key t key,size t size...
儲存空間的分配(UNIX環境高階程式設計筆記)
1 malloc,分配指定位元組的儲存區。此儲存區中的初值不確定。2 calloc,為指定數量指定長度的物件分配儲存空間。該空間的每一bit都初始化為0。3 realloc,增加或減少以前分配區的長度。當長度增加後,可能需要將以前分配區的內容移動到另乙個足夠大的區域,以便在尾端提供增加的儲存區,而新...
《unix環境高階程式設計》筆記2
第四章 檔案和目錄 本章將描述檔案系統特徵和檔案性質 1 stat fstat和lstat函式 原型 include int stat const char restrict pathname,struct stat restrict buf int fstat int filedes,struct...