【问题标题】:Ruby, php shell_exec and crontab not working correctlyRuby、php shell_exec 和 crontab 无法正常工作
【发布时间】:2014-07-24 06:53:49
【问题描述】:
   <?php


    $scan = shell_exec('ruby /home/user/wpscan/wpscan.rb --url site.com --enumerate vp --follow-redirection --threads 1000');

    And than...
     ... extracting data from array(); (explode("plugins:", 1))
     ... writing data[1] to txt file ...
     ... send mysql query with rule if() {} else {} ...
     ... unlink(); *.txt file ...
    ...that's all

     ?>

你好。通过 crontab 运行 ruby​​ 脚本 (wpscan) 时遇到问题。 将其添加为 root:

crontab -e

在 cron 中:

* * * * php5 /home/user/wpscan/wpscan.php

到时候 - php 脚本启动,但是!可以使用除$scan 之外的所有脚本部分(使用 ruby​​ 脚本的部分不起作用)。

我试图显示 ruby​​ bin 的脚本完整路径:“which ruby​​”,然后我将这些路径复制到了 php 文件。

Ruby 安装在 root 下,所有脚本都具有最大权限,并且在 root 下创建。在任何地方的脚本中,我都在使用我需要连接的文件的完整路径。我也尝试使用 php5 的完整路径,但如果信任 syslog.log - 没关系。请帮帮我:)

【问题讨论】:

  • 您会尝试将 ruby​​ 输出重定向到文件并向我们提供明确的错误消息吗?
  • Arg... 抱歉,无法提供 ruby​​ 脚本日志输出 atm,无法从工作中访问我的服务器,已尝试但除 80 之外的所有端口都已关闭 :( 我的错,没有检查之前......再次抱歉但也许有任何猜测?:)
  • 我不是算命先生 :) 你可能需要尝试直接从 root 控制台运行ruby /home/user/wpscan/wpscan.rb --url site.com --enumerate vp --follow-redirection --threads 1000,然后你就会看到问题所在了。我想,您的根环境缺少一些正确运行脚本所需的宝石。
  • 如果我从控制台运行它 - 一切正常。在通过 php 脚本运行时,它不仅仅从 cron 工作(可能是 shell_exec() 中的问题?)
  • 如果它完美地运行从根控制台,我不能建议任何东西,直到输出被证明。对此感到抱歉。 shell_exec 也应该可以正常工作。

标签: php ruby debian crontab


【解决方案1】:

好的。我已经解决了这个问题。 据我了解,即使我们从 cron 运行 ruby​​ 脚本,也并不意味着我们有足够的权限。 所以,首先我做了:向 sudoers 添加了一个修复 - 为 root 提供 NOPASSWD。 下一步:我检查脚本中的所有路径,因为它们必须是完整的(即:/bin/php5 /home/test/test.php) 比我在脚本中添加 SUDO 命令:

<?php
$test = shell_exec('sudo ruby /home/test/test.rb');
?>

别忘了还有 chmod +x file.php

在我使用的 cron 中:

crontab -e
*   *   *   *   *   php5 /home/test/test.php

仅此而已:) 现在一切正常。 我的一些错误:

  • 不要忘记从文件中进行测试输出(即:sh run.sh > test.txt);

  • 使用带有 cron 的邮件警报器,它可能也会有所帮助

  • 如果你从 cron 运行某些东西 - 最好使用完整路径

    感谢 mudasobwa 的建议和时间 :)

【讨论】:

  • 值得考虑是否要为您的 PHP 用户提供不受限制的 sudo 访问权限。您还可以限制用户只能 sudo 执行 某些 命令,这几乎肯定是您应该在这里做的。
  • 如果你能看到,我写了关于 crontab 的文章,所以有些脚本在 root 下运行并且用户无权访问它们。数据库中的所有数据都经过过滤,只能写入主机名,因此这里没有风险。仅当找到 rce 或 sqli... 但是,正如我之前所写 - 所有数据都已过滤。
猜你喜欢
  • 2012-07-23
  • 2017-07-13
  • 1970-01-01
  • 2013-03-23
  • 2014-03-23
  • 2016-04-11
  • 2020-12-15
  • 2013-06-02
相关资源
最近更新 更多