从perl启动bash时命令失败,但从命令行启动权限问题时失败

时间:2011-08-10 16:49:25

标签: linux perl bash cgi

我创建了一个应该从perl脚本启动的bash脚本。当我直接从终端运行bash时,它就像一个魅力。但是当我尝试从PERL脚本运行bash时,我得到了很多权限错误。

我所做的活动是创建文件/目录/恢复应用程序/等。我应该如何配置以使perl脚本能够在没有权限错误的情况下执行bash。

我从perl执行命令,如下所示:

system($file, $arg);

bash中的命令示例:

exec 1>$1.log
exec 2>$1_error.log

mkdir /opt/$1

上述命令的错误日志示例:

[Wed Aug 10 18:17:17 2011] [error] [client 192.168.1.100] /opt/otrsadm/newinstance.sh: line 3: comp.log: Permission denied
[Wed Aug 10 18:17:17 2011] [error] [client 192.168.1.100] /opt/otrsadm/newinstance.sh: line 4: comp_error.log: Permission denied
[Wed Aug 10 18:17:17 2011] [error] [client 192.168.1.100] mkdir: 
[Wed Aug 10 18:17:17 2011] [error] [client 192.168.1.100] cannot create directory `/opt/comp'
[Wed Aug 10 18:17:17 2011] [error] [client 192.168.1.100] : Permission denied
[Wed Aug 10 18:17:17 2011] [error] [client 192.168.1.100]

我正在做的是在Apache上创建一个全新的应用程序实例。这意味着,bash正在创建必要的目录,将应用程序复制到该目录,创建新数据库并加载模板转储,复制apache的特定于应用程序的配置文件以及在该文件中交换某些字符串等。

我是全新的做这种活动所以任何可能的帮助都非常感谢。

4 个答案:

答案 0 :(得分:2)

我猜你的perl脚本中你当前的工作目录是错误的 - 你试图在你没有权限创建目录的目录中执行你的bash命令。

答案 1 :(得分:2)

您的脚本在与Apache进程相同的权限下运行。良好的安全实践要求您的Web服务器具有尽可能有限的权限来更改本身可能由Web服务器运行的文件。

因为这听起来就像你想做的那样,技巧就是尽可能少地放松权限以获得你想要的结果。

我的建议是调查程序sudo。它可以作为更多特权用户运行程序,并提供一些合理的访问控制。基本思想是创建一个拥有的脚本,并且只能由root用户写入。然后允许apache用户(或httpd,或者你的系统调用运行Apache的用户)以sudo作为具有写入/opt权限的用户执行该脚本。如果你能够以低于root权限的用户身份执行脚本,那也是好的。

假设您在脚本中进行了良好的错误检查并遵循所有良好的安全措施,那么您将是相当安全的。

所有这一切,强烈考虑支付经验丰富,注重安全的开发人员来帮助您进行设置。建立这样的系统需要不同的思维模式安全性,而这是你无法从SO上得到的答案。否则你可能需要向你的老板解释一个来自某个随机国家的13岁小孩如何删除你所有的公司数据,或者更糟糕的是在BitTorrent上发布它。

答案 2 :(得分:1)

在您的日志中,您有一条错误信息分为不同的行:

mkdir: 
cannot create directory `/opt/comp'
: Permission denied

Perl脚本是否可能使用包含换行符的参数调用bash脚本? (虽然这不能解释为什么“mkdir:”本身就是一条线。)

您是否拥有/opt的写入权限?

答案 3 :(得分:-4)

将opt目录的权限更改为777(每个人读/写/执行)

chmod 777 / opt /

我认为这可能会解决您的问题。