問題 :1. 對於unix的檔案來說有以下幾個id , userid , effective userid ,groupid ,effective groupid,問題是這幾個id有什麼區別,怎樣賦值
2. unix當中的suid 與 sgid 的作用是什麼
1.這四個id是什麼?
userid 與 groupid 比較好理解,就是表示當前的使用者是誰,誰在執行這個程式,一般這2個字段在登陸時決定,在乙個登陸會話期間, 這些值基本上不改變。(比如使用者 foo 登入了乙個 shell,那麼 userid = foo 、groupid = foo)。
effctiveid與groupid 定了程序在執行時的許可權。核心在決定程序是否有檔案訪問許可權時,是採用了程序的有效使用者id來進行判斷的。
2.它們之間的關係?
那麼effctiveid 與 userid 之間的關係呢 ?
乙個程序如果沒有suid或sgid位,則euid=uid egid=gid。而如果設定了suid與sgid,則euid和egid變成被執行的程式的所有者的uid和gid。
(eg : kevin使用者的uid和gid分別為204和202,foo使用者的uid和gid為 200,201,myfile是屬於foo使用者的。
1. 如果myfile沒有設定suid,kevin執行myfile程式形成的程序的euid=uid=204,egid=gid=202,核心根據這些值來判斷程序對資源訪問的限制,其實就是kevin使用者對資源訪問的許可權,和foo沒關係。 )
2. 如果myfile設定了suid,則euid和egid變成被執行的程式的所有者的uid和gid,例如kevin使用者執行myfile,euid=200,egid=201,uid=204,gid=202,則這個程序具有它的屬主foo的資源訪問許可權。)
3.看了上面的例子,自己思考下為什麼要增加suid與sgid
suid的作用就是這樣:讓本來沒有相應許可權的使用者執行這個程式時,核心認為是檔案的所有者在執行這個程式
例子一:
使用者修改密碼,是通過執行命令passwd來實現的。最終必須要修改/etc/passwd檔案,而passwd的檔案的屬性是:
#ls -l /etc/passwd -rw-r--r-- 1 root root 2520 jul 12 18:25 passwd
我們可以看到passwd檔案只有對於root使用者是可寫的,而對於所有的他使用者來說都是沒有寫許可權的。 那麼乙個普通的使用者如何能夠通過執行passwd命令修改這個passwd檔案呢?為了解決這個問題,suid/sgid便應運而生。而且at&t對它申請了專利。 呵呵。
乙個程式設定了為suid位時,核心就知道了執行這個程式的時候,應該認為是檔案的所有者在執行這個程式。即該程式執行的時候,有效使用者id是該程式的所有者。舉個例子:
[root@sgrid5 bin]# ls -l passwd
-r-s--s--x 1 root root 16336 feb 14 2003 passwd
雖然你以test登陸系統,但是當你輸入passwd命令來更改密碼的時候,由於passwd設定了suid位,因此雖然程序的實際使用者id是test對應的id,但是程序的有效使用者id則是passwd檔案的所有者root的id,因此可以修改/etc/passwd檔案。
例子二:
ping命令應用廣泛,可以測試網路是否連線正常。ping在執行中是採用了icmp協議,需要傳送icmp報文。但是只有root使用者才能建立icmp報文,如何解決這個問題呢?同樣,也是通過suid位來解決。
[root@sgrid5 bin]# ls -l /bin/ping
-rwsr-sr-x 1 root root 28628 jan 25 2003 /bin/ping
我們可以測試一下,如果去掉ping的suid位,再用普通使用者去執行命令,看會怎麼樣。
[root@sgrid5 bin]#chmod u-s /bin/ping
[root@sgrid5 bin]# ls -l ping
-rwxr-xr-x 1 root root 28628 jan 25 2003 ping
[root@sgrid5 bin]#su test
[test@sgrid5 bin]$ ping byhh.net
ping: icmp open socket: operation not permitted
1. sgid的風險比suid小得多,所以出於系統安全的考慮,應該盡量用sgid代替suid的程式,如果可能的話。
2. suid的優先順序比sgid高,當乙個可執行程式設定了suid,則sgid會自動變成相應的egid。
3. 目錄的sgid屬性使得在該目錄下建立的任何檔案及子目錄屬於該目錄所擁有的組(還是sgid基本原理來分析)
4. s與s之間區別,s表示有執行許可權,而s沒有。沒有執行許可權的s使得sgid與suid實際變得沒有效果(因為程式不能執行,euid與egid不能改變為檔案的所有者id)
unix實際使用者ID和有效使用者ID解析
源文 看unix相關的書時經常能遇到這幾個概念,但一直沒有好好去理清這幾個概念,以致對這幾個概念一直一知半解。今天好好區分了一下這幾個概念並總結如下。說白了這幾個uid引出都是為了系統的許可權管理。下面分別用ruid,euid,suid來表示實際使用者id,有效使用者id,設定使用者id。另外使用者...
有效使用者ID 實際使用者ID
實際使用者id,有效使用者id和設定使用者id 看unix相關的書時經常能遇到這幾個概念,但一直沒有好好去理清這幾個概念,以致對這幾個概念一直一知半解。今天好好區分了一下這幾個概念並總結如下。說白了這幾個uid引出都是為了系統的許可權管理。下面分別用ruid,euid,suid來表示實際使用者id,...
實際使用者ID,有效使用者ID和設定使用者ID
實際使用者id,有效使用者id和設定使用者id 看unix相關的書時經常能遇到這幾個概念,但一直沒有好好去理清這幾個概念,以致對這幾個概念一直一知半解。今天好好區分了一下這幾個概念並總結如下。說白了這幾個uid引出都是為了系統的許可權管理。下面分別用ruid,euid,suid來表示實際使用者id,...