顯示文章

這裡允許您檢視這個會員的所有文章。請注意, 您只能看見您有權限閱讀的文章。


文章 - elleryq

頁: 1 ... 29 30 [31]
901
是因為 buffer 的原因
printf() 會先把東西丟到 stdout ,而不會立即送出~
所以得用fflush(stdout) 強制輸出 buffer 內的資料
這是我前年遇到的狀況~~

最後一項,你的這個做法我也沒試過
可是你可以在 cgi 程式中利用 getuid() 去看一下自己的身分為何
這樣就知道 apache 是怎麼處理 cgi 的了~

902
引用

我覺得,可能在CGI下,無法使用setuid這個功能。

這是權限問題,就跟我前面提到的一樣, 一般 user 無法切換為 root, 但 root 可以切換為任何 user.

引用

若下system("ls -al")是無法執行的,很多command在CGI環境無法執行。
我發覺:需要show message在螢幕的指令,都無法執行,如 ls -al, pwd等等。
或者Daemon也無法執行。

可以執行,下面是我剛剛寫的一段 code, httpd 的身分是 apache
代碼: [選擇]

#include <stdio.h>
int main( int argc, char* argv[] )
{
        printf("Content-type: text/plain\n\n");
        fflush( stdout );
        system("ls -l");
        exit(0);
}


引用

您講的popen,我同學也跟我提過,不過這個不是開檔案用的嗎?請問要如何使用這個函數呢?

這不是開檔案用的,我不知道你有沒有 man 一下?
這是用來執行一個執行檔,並讀取其執行結果的 function.
你可以試試這段 code
代碼: [選擇]

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
        FILE *fp;
        char s_line[1024];

        printf("=====\n");
        fp=popen("tar cvzf gdbm.tar.gz gdbm  2>&1","r");
        if(fp==NULL)
                exit(-1);
        while(!feof(fp)) {
                fgets( s_line, 1024, fp );
                printf(">%s",s_line);
        }
        pclose(fp);
}


引用

我有找到一個super套件,可以將某些指令在執行前,change成root。

如果你放在 system() 裡面,那還是一樣啊,因為執行 system() 的這個 CGI, 仍然是以 httpd 的身分(apache或www)在執行,所以仍然是沒辦法切換成 root.
我的意思是在你寫好此 CGI 之後,將權限改為 SUID, owner 改為 root, 應該就可以了.
這樣子執行此 CGI 時,會以 root 身分執行起來.

903
使用setuid(), 必須要有足夠權限~
通常由一般使用者沒辦法切回 root, 而由 root 則可以切為任何使用者~
我自己以前用是直接讓 Apache 以 root 權限執行, 但這樣子作會有安全問題.
建議把該 CGI 設為 SUID 或者讓執行 Apache 的這個使用者擁有啟動其他 Daemon 的權限.

如果要顯示 ls -al 的結果顯示出來
則直接用 system("ls -al"); 應該就可以了

另外你也可以參考 popen() / pclose() 這兩個 function

904
如果想了解 C99
這本書有提到
http://www.books.com.tw/exep/prod/booksfile.php?item=0010167403

我就是從這本書上看來的~

905
引用

150 static struct super_operations ext2_sops = {
151 read_inode: ext2_read_inode,
152 write_inode: ext2_write_inode,
153 put_inode: ext2_put_inode,
154 delete_inode: ext2_delete_inode,
155 put_super: ext2_put_super,
156 write_super: ext2_write_super,
157 statfs: ext2_statfs,
158 remount_fs: ext2_remount,
159 };

這是ANSI C99 的新規格
冒號前面表示攔位,後面則是表示你要填入的值
在以往來說,填一個 structure, 必須要一個一個欄位對齊去填
而現在若以 C99 規格,就可以不需要一個一個欄位對齊去填~
省很多工~
在 Kernel 裡面尤為常見~

906
你說的是右下角嗎??
那是 ii 吧
兩個 "i" 不是 "!"

907
Network 討論版 / about media sercer
« 於: 2003-06-16 17:49 »
這裡有一份Video Stream Server一覽表可供參考
http://www.linuxmafia.com/~rick/linux-info/video-streaming-servers

頁: 1 ... 29 30 [31]