Files
具有讀/寫功能的 Linux Setuid 特殊權限標誌
setuid是否僅適用於執行文件(僅適用於可執行標誌)?
它將如何影響同一文件的其他權限(讀/寫)!
例如:- 如果實際文件權限是4711,非所有者使用者無法讀取它。為什麼它不提升所有者權限 4711 並允許其他人閱讀內容。
非所有者無法讀取文件,因為 setuid 和 setgid 僅影響文件執行時的有效權限;否則,使用文件權限。這是一個可以嘗試的範常式序:
自述文件.c
#include <stdio.h> int main(int argc, char **argv) { FILE *f; int i; char c; if(argc>1) { f=fopen(argv[1],"rb"); for(i=1; i++<100;) { c=getc(f); printf("%x%s", (int)c, i%50?" ":"\n"); } fclose(f); } }
編譯它並將其權限更改為您想要測試的人以外的人(我使用過
root
):# gcc -Wall -o readme readme.c # chown root:root readme # chmod ug+s,o-rw readme
驗證權限並嘗試以您的測試使用者身份讀取文件:
erik ~ $ ls -la readme -rwsr-s--x 1 root root 8064 May 4 12:05 readme erik ~ $ cat readme cat: readme: Permission denied
現在嘗試執行程序並讓它自行讀取:
erik ~ $ ./readme readme 7f 45 4c 46 2 1 1 0 0 0 0 0 0 0 0 0 3 0 3e 0 1 0 0 0 fffffff0 5 0 0 0 0 0 0 40 0 0 0 0 0 0 0 40 18 0 0 0 0 0 0 0 0 0 0 40 0 38 0 9 0 40 0 1d 0 1c 0 6 0 0 0 4 0 0 0 40 0 0 0 0 0 0 0 40 0 0 0 0 0 0 0 40 0 0 0 0 0 0 0 fffffff8 1 0
您會看到它沒有問題,因為有效權限已更改為具有讀取權限的使用者。
為什麼會這樣?我想到了幾個原因。首先,實際上並不需要任何人擁有執行執行檔的讀取權限,因為核心(載入程序)已經擁有執行任何操作的完全權限。如果您想查看執行檔的內容,您只需要具有讀取權限,通常這樣您就可以復製文件。舉一些可能的例子,執行檔可能包含使用者不應該看到的敏感數據(強烈建議不要這樣做,但已經發生了!)或者係統正在使用它作為深度防禦來防止人們發現漏洞。