2013-07-08 68 views
0

我有一個setuid頁面供學生用來檢查他們的編程作業並查看他們的成績。典型用法是:從網頁訪問setuid程序

<pre> 
    ~csXXX/bin/checkin key fileName 

    ~csXXX/bin/grade key 
</pre> 

用戶必須在部門機器上有一個帳戶。此外,任何人都可以運行簽入/等級,但只有在註冊了特定班級的情況下才能使用。

學生要求他們能夠通過平板電腦/智能手機上的瀏覽器訪問他們的成績。我正在考慮像一個PHP頁面下面

<pre> 
    &lt;?php 
    &lt;pre&gt; 
    shell_exec("echo $password" | su - $user -c "~csXXX/bin/grade key") 
    &lt;/pre&gt; 
    ?&gt; 
</pre> 

然而,這種失敗,出現錯誤消息

<pre> 
Password: stty: standard input: Inappropriate ioctl for device 
</pre> 

我相信我想,而不是使用sudo的蘇,以便執行居然是學生。該網頁將要求學生登錄,因此它有權訪問他們的ID /密碼。有沒有人有如何做到這一點的建議?

如果從網頁中執行簽入程序,它會將更多的工作複製到部門機器上,然後作爲學生運行簽入。我們正在考慮這個,因爲有些學生似乎不願意將ftp文件發佈到部門機器上,並使用ssh進行簽入。

我更願意包裝現有的程序,因爲它們調試良好,並允許學生從shell或web訪問功能。

謝謝。

回答

0

我會給sudo再看一下,因爲它給你更多的控制。另外,sudo上的-S標誌告訴它從stdin而不是從終端讀取密碼,所以它可以在上面給出的上下文中工作。

不過,我會非常小心你在那裏的計劃。特別要小心在密碼中引用shell元字符。似乎應該有一個更好,更安全的方式,但我對PHP不是很瞭解。