Linux 是否可以以檔案擁有者身分執行腳本?

Linux 是否可以以檔案擁有者身分執行腳本?

很抱歉,我不知道這是正確的地方。我很著急,與時間賽跑。我在 Linux 機器上有一個具有以下屬性的檔案。 (內核2.6.26)

-rwxrwxrwx 1 root root 25 2015-06-01 08:08 /usr/bin/runme

我在機器上沒有 root 權限,也不知道 root 密碼。是否可以以所有者身分執行此腳本。我已經在不同的檔案中編寫並編譯了一些 C 程式碼,但它不起作用。我使用過的程式碼;

#include <unistd.h>
#include <errno.h>

int main(void) {        
     setuid(0);
     system("/bin/bash /usr/bin/runme"); 
}

然後有人說使用execve,但結果沒有改變。這是我使用 execve 時的程式碼;

#include <unistd.h>
#include <errno.h>

int main(void) {        
        extern char * const environ[];
    char * const command[] = {"runme", NULL, NULL, NULL, NULL,NULL, NULL};
    execve("/usr/bin/runme", command, environ);
}

答案1

這是可能的,但你必須非常小心 - 你的腳本具有全域讀寫權限,這意味著任何人可以改變它,因此可以做任何事物作為根。

這是一個令人毛骨悚然的安全漏洞。如果你想獲得一個普通的若要以使用者身分執行二進位文件,您需要使用 將該setuid標誌新增至二進位檔案chmod g+s。您必須以 root 身分執行此操作,因為如果您不這樣做,也會開啟一個巨大的安全漏洞。

如果您想使用腳本...這取決於腳本語言。有些(實際上是很多)會因為它們的實施方式而拒絕工作,這又是安全風險。

我建議 root (原文如此)到這裡來看看sudo- 這是一個“超級用戶做的事”,並允許非特權用戶作為特權(或 root)帳戶運行命令。然後 - 一旦配置 - 您可以:

sudo /path/to/script

儘管如此,我仍然不會讓腳本世界保持可寫狀態。這仍然是一個安全風險。

如果您沒有root,沒有root 密碼,也沒有管理員存取權限...那麼我建議這是因為它不是您的系統,並且您停止嘗試這樣做,因為這可能是電腦濫用,並且可能是犯罪行為,取決於在哪裡你住在。

答案2

除非該使用者在某個時刻授予您該權利,否則無法(不使用漏洞)以其他使用者身分執行腳本(或任何可執行檔)。

對於「真正的」可執行文件,可以使用 setuid 位元來完成,該位元可以由文件擁有者設定。對於腳本,現代環境通常會忽略 setuid 位,因此您需要某種包裝器(自訂包裝器或 sudo)。看https://unix.stackexchange.com/questions/364/allow-setuid-on-shell-scripts了解更多詳情。

您的具體案例是 setuid 位元如何危險的一個很好的例子。在全域可寫入且可執行的檔案上設定 setuid 位元將允許您以檔案擁有者的身分執行任何命令。由於文件所有者實際上是 root,因此將此類文件的內容替換為 bash 等內容將授予您 root shell。

相關內容