我有一个 php 脚本:
<?php
#echo exec('whoami');
$output = shell_exec('bash /usr/local/svn/bash_repo/make-live');
echo "$output";
?>
make-live 脚本包含以下内容:
#!/bin/bash
cd /var/www-cake
sudo svn checkout file:///usr/local/svn/bash_repo/repo/
echo "Head revision has been pushed to live server"
因此,www-data
需要该脚本的 PHP 用户没有密码。我被告知我需要添加:
www-data ALL=NOPASSWD: /usr/local/svn/bash_repo/make-live
sudoers 允许这样做。首先我运行sudo visudo
,但我没有使用 vi 的经验,所以我尝试在 gedit 中打开它export EDITOR=gedit && sudo -E visudo
,然后只打开一个空的 sudoers.tmp 文件。我添加该行并保存它。但它并没有保存。
所以我试着sudo visudo
在这部分的正下方添加一行:
# User privilege specification
root ALL=(ALL) ALL
www-data ALL=NOPASSWD: /usr/local/svn/bash_repo/make-live
我关闭了 sudoers 并重新打开以验证它是否已保存。我什至重新启动apache。
我运行 php 文件,它仍然无法正常工作。
我错过了什么?
将您的 apache 用户添加
www-data
到 sudoers,然后更糟糕的是添加无密码选项是一个非常糟糕的想法。让 apache 用户能够以 root 身份执行任何操作是一个安全问题,您应该避免它。您需要做的是更改 /var/www-cake 的权限,以便在
svn checkout
没有 sudo 的情况下运行时 www-data 可以写入它。尝试这个:
sudo chown www-data:www-data /var/www-cake
删除 sudo 并重试。