我有一些問題部署通過服務鉤子,我認爲這是一個權限問題,但我會先說明所有事實。Github服務鉤子:通過PHP post-receive
服務器:Nginx的 w,基於Arch Linux的
的Nginx/PHP-FPM運行爲用戶HTTP和具有該目錄的所有權由腳本來更新。我還爲HTTP創建了一個SSH密鑰並將其安裝在GitHub上。其他命令似乎可以通過shell_exec正常工作,但無法完成重置或拉取操作,也無法從輸出中返回任何輸出。任何幫助,將不勝感激。謝謝!
鉤子腳本(PHP):
if (isset($_SERVER["REMOTE_ADDR"])) {
$requestIP = $_SERVER["REMOTE_ADDR"];
} else if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
$requestIP = $_SERVER["HTTP_X_FORWARDED_FOR"];
} else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
$requestIP = $_SERVER["HTTP_CLIENT_IP"];
}
// GitHub post-receive IPs
$validIPs = array(
'207.97.227.253',
'50.57.128.197',
'180.171.174.178'.
'50.57.231.61',
'54.235.183.49',
'54.235.183.23',
'54.235.118.251',
'54.235.120.57',
'54.235.120.61',
'54.235.120.62'
);
if(($payload = $_REQUEST['payload']) && in_array($validIps, $requestIP)) {
$payload = json_decode($payload);
$repository = $payload->repository->name;
$docRoot = '/var/www/'.escapeshellcmd($repository);
if(is_dir($docRoot)) {
$command = 'cd '.$docRoot.' && git reset --hard HEAD && git pull';
$output = shell_exec($command);
file_put_contents("hook.log", "$repository: $output\r\n", FILE_APPEND);
}
}
我可以發''; rm -rf $ HOME「作爲虛假回購商品名稱,這可能會造成一些損害。 Escape〜 – Amelia 2013-02-19 21:43:47
是的,我只是在鎖定它之前纔開始工作。我將限制對github的訪問並逃脫有效載荷。 – seagoj 2013-02-19 23:08:29
我編輯腳本以檢查有效IP,變量是否存在,以及存儲庫是否存在於我的服務器上。也逃脫了輸入。 – seagoj 2013-02-20 01:17:32