0

我有一个学生用来检查他们的编程作业和查看他们的成绩的 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>

我相信我想使用 su 而不是 sudo 以便执行实际上是作为学生。该网页将要求学生登录,因此它可以访问他们的 ID/密码。有没有人建议如何做到这一点?

如果从网页执行签入程序,则工作量要多一些,因为它必须将提交的文件复制到部门计算机,然后以学生身份运行签入。我们正在考虑这一点,因为有些学生似乎不愿意将文件 ftp 到部门机器并使用 ssh 进行签入。

我更喜欢包装现有的程序,因为它们经过了很好的调试,并允许学生从 shell 或 Web 访问这些功能。

谢谢你。

4

1 回答 1

0

我会sudo再看一下,因为它可以让您获得更多控制权。此外,-S标志sudo告诉它stdin从终端而不是从终端读取密码,因此它可以在您上面给出的上下文中工作。

不过,我会非常小心你在那里制定的计划。尤其要小心在密码中引用 shell 元字符。似乎应该有一种更好、更安全的方法,但我对 PHP 的了解并不多。

于 2013-07-08T16:17:10.033 回答