Использование exec в php для установки системных часов - PullRequest
0 голосов
/ 31 октября 2011

Я использую скрипт php, который берет значение метки времени из браузера и пытается установить системные часы.Я использую Mamp Box в моем Mac Mini.Как настроить системные часы Mac mini с помощью php-скрипта.

Я пытался использовать shell_exec, exec, system для достижения этой цели, но это не работает.

Например, мой php-скрипт выглядит примерно так:

<?

$timestamp = $_GET['timestamp'];

exec('date '.$timestamp);

?>

Когда я пытаюсь выполнить ту же команду установки даты в терминале, я вижу, как меняются часы.(sudo date timestamp), но я не знаю, как этого добиться с помощью php-скрипта, выполняя привилегированную команду.Пожалуйста, помогите.

Спасибо, Срини.

Ответы [ 2 ]

1 голос
/ 01 ноября 2011

Изменение системного времени обычно ограничено учетными записями корневого уровня. PHP будет работать под идентификатором пользователя веб-сервера, который НЕ ДОЛЖЕН быть root. Вы должны будете использовать sudo, чтобы позволить веб-серверу работать с повышенными правами для этой цели.

Тем не менее, зачем вам такие временные метки? Вы в основном передаете некоторые случайные данные, переданные по URL-адресу, в команду оболочки. Что мешает кому-то отправить

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

и уничтожать все файлы на вашем сервере, к которым у веб-сервера есть доступ?

Если вы пытаетесь синхронизировать время между серверами, используйте ntp , который предназначен для синхронизации часов.

0 голосов
/ 01 ноября 2011

Прежде всего, выполните дезинфекцию вашего ввода. В этом случае продезинфицируйте $ _GET ['timestamp']. Убедитесь, что он в формате date поймет. Убедитесь, что он использует escapeshellarg .

Вы можете использовать exec('sudo date '.escapeshellarg($timestamp));. Но убедитесь, что ваш пользователь Apache имеет право sudo без паролей. Вы можете указать в /etc/sudoers, чтобы позволить ТОЛЬКО команде даты выполняться root. Это безопаснее.

Другой вариант - создать свой собственный скрипт оболочки и разрешить sudo только ваш скрипт.

...