1. 程式人生 > >讓PHP以ROOT許可權執行系統命令的方法&SUID,SGID,SBIT許可權的作用和設定

讓PHP以ROOT許可權執行系統命令的方法&SUID,SGID,SBIT許可權的作用和設定

SUID:只對二進位制程式支援,只要擁有該程式的所有者擁有SUID的許可權,那麼其它使用者或者同組使用者擁有該程式的x許可權,就可以在程式執行過程中擁有所有者的許可權支援。

例如:(在root下操作)

有一檔案text的內容是hello world!,現在編寫一個讀出該檔案內容的程式

程式如下:

程式名為read

#include <stdio.h>

#include <stdlib.h>

int main()

{

FILE *fp = fopen("/text","r");

char a=fgetc(fp);

while(a!=EOF)

{

putchar(a);

a=fgetc(fp);

}

fclose(fp);

return 0;

}

然後我們更改檔案和程式的許可權為

read -rwx-----x         root  root 檔案所有者可以讀寫執行,其它使用者能執行

text   -r---------         root  root 只有該檔案的所有者才能讀

現在執行read

輸出hello world!

在新建一個使用者qita,然後切換到其它,然後再執行./read則表示會出現錯誤

原因是read雖然可以執行但是目的是去讀text,text的許可權是隻有所有者能夠讀到,這是其它使用者,當然不能。要想能讀到方法是讓read擁有

SUID的許可權,此時就可以讓其它使用者在執行read時得到所有者的支援(得到所有者的許可權)。***要保證其它使用者對於該程式擁有可執行的許可權。

具體如下

1,切換到root使用者。

2,然後chmod u+s read    此時read就擁有了SUID許可權了。

3,切換到qita使用者,執行./read 就能夠輸出Hello world!了。

SGID:此許可權與SUID有類似的地方,但是SUID是得到所有者的支援,而SGID是得到同組使用者的支援。同樣是剛才的程式和檔案,我們改下許可權。

切換到root

text ----r-----    root root 表示只有同組使用者才能讀

read -rwx--x--x   root root

此時執行read,可以輸出Hello world!

然後切換到qita

此時執行read,這是侯就不能輸出了,原因是其text只能同組使用者讀寫。qita想要讀到text的內容必須得到root組的支援。

方法如下:

1,切換到root

2,chmod g+s read   這時候就擁有了SGID的許可權了

3,切換到qita,執行read,成功

注意:其它使用者必須擁有的程式的執行權!

SBIT:此許可權只對目錄有效,擁有此許可權的目錄,必須是目錄所有者,root,或則是目錄內檔案的建立者才能刪除目錄內的檔案,其它使用者是不能刪除的。

相關推薦

no