Files

具有讀/寫功能的 Linux Setuid 特殊權限標誌

  • May 4, 2018

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

您會看到它沒有問題,因為有效權限已更改為具有讀取權限的使用者。

為什麼會這樣?我想到了幾個原因。首先,實際上並不需要任何人擁有執行執行檔的讀取權限,因為核心(載入程序)已經擁有執行任何操作的完全權限。如果您想查看執行檔的內容,您只需要具有讀取權限,通常這樣您就可以復製文件。舉一些可能的例子,執行檔可能包含使用者不應該看到的敏感數據(強烈建議不要這樣做,但已經發生了!)或者係統正在使用它作為深度防禦來防止人們發現漏洞。

引用自:https://unix.stackexchange.com/questions/441709