2013-07-08 8 views
0

학생들이 프로그래밍 과제를 확인하고 점수를 확인하는 데 사용되는 setuid 페이지가 있습니다. 일반적인 사용법은 다음과 같습니다.웹 페이지에서 setuid 프로그램에 액세스

<pre> 
    ~csXXX/bin/checkin key fileName 

    ~csXXX/bin/grade key 
</pre> 

사용자는 부서 시스템에 계정이 있어야합니다. 또한 누군가는 체크인/학년을 실행할 수 있지만 특정 클래스에 등록 된 경우에만 작동합니다.

학생들은 태블릿/스마트 폰의 브라우저에서 성적에 액세스 할 수 있도록 요청했습니다. 내가

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

그러나 다음으로 PHP 페이지 같은 것을 고려하고,이

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

내가 실행이 실제로 수 있도록 내가 대신 sudo는 스와을 사용하려는 생각 오류 메시지와 함께 실패 학생. 웹 페이지에는 학생이 로그인해야하므로 ID/비밀번호에 액세스 할 수 있습니다. 누구든지이 작업을 수행하는 방법에 대한 제안을 갖고 있습니까?

체크인 프로그램은 제출 된 파일을 부서 기계로 복사 한 다음 학생으로 체크인을 실행해야하므로 웹 페이지에서 실행하면 조금 더 많은 작업이 수행됩니다. 어떤 학생들은 부서별 컴퓨터에 ftp 파일을 꺼리고 체크인을 위해 ssh를 사용하기 때문에 이것을 고려하고 있습니다.

잘 디버깅되어 기존 프로그램을 감싸는 대신 쉘 또는 웹에서 기능에 액세스 할 수 있습니다.

감사합니다.

답변

0

나는 더 많은 통제력을 제공하기 때문에 sudo 다른 모양을 제공 할 것입니다. 또한 -S 플래그가 sudo 인 경우 터미널에서가 아닌 stdin에서 암호를 읽으므로 위에서 설명한 상황에서 작동합니다.

나는 당신이 거기 함께 모으고있는 계획에 매우 조심할 것이다. 특히 암호에서 쉘 메타 문자를 인용 할 때주의하십시오. 더 좋고 안전한 방법이 있어야하는 것 같지만 PHP에 대해서는별로 지식이 없습니다.