我爲我的Sheevaplug(運行默認的Ubuntu安裝)編寫了一個cgi-bin程序,它顯示瀏覽器頁面中的一個shell。它是放置在cgi-bin文件夾中並在瀏覽器中查看的單個C程序。它會自動啓動一個守護進程,守護進程派生一個shell實例。 cgi-bin通過共享內存塊與守護進程進行通信,守護進程通過將stdin/stdout重定向到shell的stdout/stdin來與外殼進行通信。當你離開頁面時,它會自動關閉守護進程。bin/sh -i在分叉進程中出現問題,錯誤:'無法訪問tty,關閉了作業控制'
如果我使用「/ bin/sh」啓動它,並且我一次從瀏覽器發送一個完整的命令行,它就可以工作。但使用這種設計,它不是互動的。
所以我改變了它一次發送一個字符到「/ bin/sh」並添加了「-i」,以便shell以交互模式運行。
當shell啓動時,它顯示錯誤「無法訪問TTY,關閉了作業控制。」
然後它顯示'$',當它準備好輸入和似乎工作,但發送刪除字符到它只是混淆它,它不能正確處理刪除。我不確定它是否處於交互模式。當我輸入「蘇根」我得到的錯誤「必須從終端」運行
任何想法,我做錯了
PS:什麼時候我已經完成它將會在GPL下發布。
謝謝,我改變了fork forkpty,現在最初的錯誤信息沒有出現anym礦石,但我仍然得到'必須從終端運行',我嘗試和'su根',還有什麼想法? – KPexEA 2009-12-21 00:46:07
也許你可以讓你的CGI成爲一個setuid程序? – 2009-12-21 00:54:46
如果我在根目錄下手動啓動我的守護進程,但它不起作用,如果守護進程由cgi-bin自動啓動。所以我還有更多的東西需要弄清楚。謝謝! – KPexEA 2009-12-21 03:43:38