我有一个这样的 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"
因此,该脚本的 PHP 用户www-data
需要 nopasswd。我被告知需要添加:
www-数据 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 文件但它仍然不起作用。
我错过了什么?
答案1
将您的 apache 用户添加www-data
到 sudoers,然后更糟糕的是添加无密码选项是一个非常糟糕的想法。让 apache 用户能够以 root 身份执行任何操作是一个安全问题,您应该避免这样做。
您需要做的是更改 /var/www-cake 的权限,以便 www-data 可以在svn checkout
没有 sudo 的情况下运行时对其进行写入。
尝试这个:sudo chown www-data:www-data /var/www-cake
删除 sudo 并重试。