在php中使用exec来设置系统时钟

时间:2011-10-31 19:54:22

标签: php exec sudo

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

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

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

<?

$timestamp = $_GET['timestamp'];

exec('date '.$timestamp);

?>

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

谢谢, 作者Srini。

2 个答案:

答案 0 :(得分:1)

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

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

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

并核对服务器上网络服务器可以访问的每个文件?

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

答案 1 :(得分:0)

首先,清理您的输入。在这种情况下,清理$ _GET ['timestamp']。确保它符合date的格式。确保它使用escapeshellarg

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

另一个选择是创建自己的shell脚本,并允许只对你的脚本进行sudo。