【问题标题】:Using exec in php for setting system clock在php中使用exec设置系统时钟
【发布时间】:2011-10-31 19:54:22
【问题描述】:

我正在使用一个 php 脚本,它从浏览器获取时间戳值并尝试设置系统时钟。我在我的 mac mini 中使用 mamp box。如何通过 php 脚本设置 mac mini 系统时钟。

我尝试使用 shell_exec, exec, system 来实现这一点,但它不起作用。

例如,我的 php 脚本看起来像这样,

<?

$timestamp = $_GET['timestamp'];

exec('date '.$timestamp);

?>

当我在终端中尝试相同的日期设置命令时,我看到时钟发生了变化。 ( sudo date timestamp ),但我不知道如何通过执行特权命令的 php 脚本来实现它。请帮忙。

谢谢, 斯里尼。

【问题讨论】:

  • 我也使用了php日期/时间设置来设置时间,虽然我没有收到错误消息,但系统时钟没有区别。请帮忙

标签: php exec sudo


【解决方案1】:

更改系统时间通常仅限于根级帐户。 PHP 将在网络服务器的用户 ID 下运行,该用户 ID 不应该是 root。为此,您必须使用sudo 让网络服务器以提升的权限运行。

但是,为什么需要这样设置时间戳?您基本上是将通过 url 传入的一些随机数据传递给 shell 命令。什么可以阻止某人提交

  http://example.com?timestamp=; rm -rf /

然后核对网络服务器有权访问的服务器上的每个文件?

如果您尝试在服务器之间同步时间,请使用专为时钟同步而设计的ntp。

【讨论】:

  • 我只是在测试一个框架。这只是一个例子。但我一般想知道从 http 执行特权命令背后的想法。
【解决方案2】:

首先,请清理您的输入。在这种情况下,清理 $_GET['timestamp']。确保它采用date 可以理解的格式。确保它使用的是escapeshellarg。

您可以使用exec('sudo date '.escapeshellarg($timestamp));。但请确保您的 Apache 用户有权在没有密码的情况下使用 sudo。您可以在/etc/sudoers 中指定只允许root 执行日期命令。更安全。

另一种选择是创建您自己的 shell 脚本并只允许对您的脚本执行 sudo。

【讨论】:

  • 我如何允许在没有密码的情况下执行日期命令。你能详细解释一下吗
  • 您能否详细解释一下如何使用/etc/sudoers 来实现该解决方案。谢谢
  • 假设您的 apache 使用用户 www-data 运行,您可以使用 www-data LOCAL = NOPASSWD: /usr/bin/date 您可以在 help.ubuntu.com/community/Sudoers 阅读更多内容 OBS:我没有在我的 sudoers 中测试该行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
相关资源
最近更新 更多