Permissions

允許 www-data 執行特定命令

  • June 20, 2016

我需要一個 PHP 腳本來執行,git pull但是我還不夠天真給它授予git. 我已經包裝git pull了一個具有權限的腳本www-data,但我不確定如何賦予腳本git自身權限:

$ sudo tail -n1 /etc/sudoers
www-data ALL=(ALL) NOPASSWD: /home/php-scripts/git-pull

$ cat /home/php-scripts/git-pull
#!/bin/bash
/usr/bin/git pull

$ ls -la /home | grep php-scripts
drwxr-xr-x  2 ubuntu ubuntu 4096 Sep  3 09:26 php-scripts

$ ls -la /home/php-scripts/git-pull
-rwxrwxr-x 1 ubuntu ubuntu 30 Sep  3 08:44 /home/php-scripts/git-pull

$ cat /var/www/public_html/git-wrapper.php
<?php

$output = array();
$value = 0;
exec("/home/php-scripts/git-pull", $output, $value);

echo "<pre>";  
echo "Return Value: {$value}\n";

foreach ( $output as $o) {
   echo $o."\n";
}

?>

請注意,這/var/www/public_html/實際上是一個 git 儲存庫。我經常git pull從 CLI 在那個目錄中執行。但是,當我在 Web 瀏覽器中呼叫此腳本時,我看到文件未通過更新git pull,以下內容輸出到瀏覽器:

Return Value: 1

這是在帶有 Git 1.7.9.5 的 Ubuntu Server 12.04 上。遠端儲存庫位於同一台伺服器上。

www-data:www-data我想你的腳本在下面執行。您必須git pull與對您的複製儲存庫具有寫入權限的使用者一起執行。你已經配置了sudo,但你沒有在任何沒有多大意義的地方呼叫它(並不是說你根本需要這樣做)。驗證您在哪個使用者下執行,然後根據需要切換到適當的使用者,並相應地調整複製儲存庫的權限。

引用自:https://unix.stackexchange.com/questions/89231