2011-03-24 77 views
0
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
int main (int argc, char **argv) { 
    char *command; 
    if (argc != 2) { 
     fprintf (stderr, "Wrong number of arguments\n"); 
     return 1; 
    } 
    if ((command = malloc (strlen (argv[1]) + 6)) == NULL) { 
     fprintf (stderr, "Could not allocate memory\n"); 
     return 1; 
    } 
    strcpy (command, "echo "); 
    strcat(command,argv[1]); 
    system(command); 
    free (command); 
    return 0; 
} 

如何修補這個代碼所以不會給予用戶 任何privelige的事情就是通過運行這個我可以接取的root用戶如何編輯這使得本將不會發生你仍然表示將在後臺運行的東西

+4

不要以root身份運行代碼? – 2011-03-24 16:29:15

+0

我沒有運行根目錄中的代碼 – krishnan 2011-03-24 16:34:38

+7

它允許在問題中使用標點符號。 – steabert 2011-03-24 16:36:18

回答

3

致電seteuid(2)在調用system(3)之前先刪除root權限。

+0

我沒有讓你解釋一下 – krishnan 2011-03-24 16:34:07

+3

@krishnan當有人提到一個函數並給出了一個括號中的數字時,這意味着你可以通過查看手冊頁的相應部分來了解它。換句話說,不要讓別人向你解釋,而是嘗試「man 2 seteuid」並閱讀一下。 – 2011-03-24 17:14:43

1

您是否需要使用system()?避免安全問題的最簡單方法是不要將用戶輸入提供給system()。在你的例子中,你的system()叫什麼,你不能用簡單的printf做什麼?

該程序僅限於運行該程序的用戶帳戶的權限。使用無權使用sudo,su等的有限訪問權限的用戶帳戶運行該程序。使用chroot創建一個「監獄」,並以非特權用戶身份在該監獄內運行該程序,以限制您的該程序可以訪問的系統。

相關問題