2012-05-11 43 views
1

我有一個Python CGI腳本這需要形式輸入xy(整數),並把它傳遞給使用subprocess一個C++可執行該程序這兩個值的總和寫入到文本文件。無法寫入Linux服務器編程文件

該代碼在我的本地機器上正常工作。然而,經過多次測試後,我發現無論何時在我的服務器上運行此程序(在/var/www中)並嘗試寫入文件時都會發生某種錯誤,因爲我收到了「內部服務器錯誤」頁面。

服務器不是我的,所以我實際上沒有sudo權限。但是從putty中,我可以手動運行可執行文件,並且它確實寫入文件。

我的猜測是我必須以某種方式運行python腳本中的可執行文件,但有一定的權限,但我不確定。我將不勝感激任何建議!

編輯:
@gnibbler:有趣的是,我能夠寫入文件到/ tmp目錄沒有問題。

所以我認爲你的建議是正確的,服務器根本不允許我從瀏覽器調用腳本時寫入。

另外,我無法訪問帶有錯誤日誌的目錄,所以我將嘗試獲得該權限。

+0

腳本是否通過網絡服務器「啓動」?因爲如果是這樣,WS已經是如何在服務器上的用戶(或我認爲是這樣) – DonCallisto

+0

是Web服務器正確配置,以啓動CGI腳本?你有沒有測試cgi是否可以工作? –

+3

腳本不會以您的權限運行,它將以Web服務器的權限運行。如果服務器沒有寫訪問權限,那麼腳本將會因爲錯誤而死亡,就像您所描述的那樣。 – tripleee

回答

1

或者環境不同(可能是試圖寫入錯誤的目錄)或更可能,cgi沒有以與登錄時相同的用戶身份運行。

例如,它是很常見的CGI腳本爲「無人」或「WWW」等

你可以嘗試獲得CGI到一個文件中寫入/tmp執行。至少應該確認cgi運行的用戶爲

+0

是的,我可以寫入/ tmp。我試圖明確地寫入cgi-bin(「/var/www/cgi-bin/test.out」)以及相對路徑(「test.out」);都提供了內部服務器錯誤頁面。 – Aaron

+0

@Aaron,但是誰擁有你在'/ tmp'中創建的文件,並且該用戶是否有權寫入'/ var/www/cgi-bin /'。除此之外:你是否正在將文件寫入cgi-bin目錄?這看起來很不安全 –

+0

其實,我無法刪除我在/ tmp(whoops)中創建的文件。無論如何,這是一種概念驗證計劃。我想發送文件的鏈接給用戶。也許製作一個不同的目錄公開查看並寫入到那裏會更安全? – Aaron

0

正如其他人所說,您可能正在遇到權限問題。但是,除非您查看錯誤日誌 - 內部服務器錯誤通常掩蓋實際錯誤,否則無法確定發生了什麼情況。

要弄清楚實際的錯誤是什麼,你可以做兩件事之一。你說你在做CGI,所以我建議你在測試時調查cgitb;它會在你的瀏覽器中向你展示Python追溯(儘管這可能對你的子進程場景沒有幫助)。

否則,你會想看看web服務器的錯誤日誌,它可以包含Python回溯,希望能告訴你發生了什麼事情。一個典型的地方是這些被保存的是/var/log/httpd。如果您沒有訪問權限,或者無法在其中找到日誌,請詢問您的服務器管理員可以在哪裏找到它們。

0

嘗試chmod 0666 filethatyouarewritingto.txt 如果不工作,然後確保你的C++文件在組「他人」可執行權限,嘗試chmod 0755 yourprogram

Source