2015-12-11 22 views
-2

我试图通过perl中的exec()执行命令。它运行的结果与在脚本之外以sudoer的形式运行结果不同。我想知道如何在脚本中首先运行与sudo相同的命令来执行一些测试。出于安全考虑,我不想让一个程序以sudo的方式运行。程序Im运行称为openRTSP,它通过TCP进行RTSP连接。我猜测我的perl用户不允许访问openRTSP需要的文件,但我没有找到任何文件的成功。作为根perl中的exec()

在此先感谢。

+2

很难说,没有看到任何代码,并知道你想要发生什么(而不是发生了什么)。我的猜测是,你正在尝试沿着'exec('sudo','openrtsp',...)'的方向发展,并且根本没有运行,也许是因为sudo想要密码? – mbethke

+0

谢谢你,你非常有帮助。 –

回答

0

实际上,有两种可能的解释:

  • 你的脚本没有使用相同的环境变量sudo的执行运行。也许在shell配置文件中有一个特定的PATH或其他变量集,当从脚本运行时,它没有设置。

  • 您实际上没有权限。在那种情况下,这很困难。您不希望将setuid权限设置为您的perl脚本或(甚至更糟糕)您的perl解释器。你可以尝试做的是有一个新的用户组(或者一个新用户),它可以完全访问和控制你需要的文件,我的意思是只需要你需要的文件并以该用户的身份运行脚本。除此之外,你可以尝试使用一个小型的C或C++包装器,但是我猜这需要花费更长的时间。

另外,see this question了解更多信息。