使用 Apache2 www-data 用户执行 SSH 命令

使用 Apache2 www-data 用户执行 SSH 命令

我正在开展一个虚拟机项目,其中使用了两台服务器,我们称之为服务器 A 和服务器 B,两台服务器都安装了 Ubuntu 14.04 LTS。

服务器 A 运行 Web 服务器 Apache2,其中包含一个网站,用户可以在该网站上订购虚拟专用服务器。一旦用户的订购过程完成,用户就会单击一个按钮,该按钮将使用 PHP exec() 函数实例化以下命令。

ssh -p 22 [email protected] fallocate -l 2048M /home/john/images/guest.img 2>&1

这应该在服务器 B 上创建一个映像,最终在该服务器上创建用户的虚拟专用服务器。使用用户 john 运行上一个命令可以完美运行,但由于该命令是通过 PHP 运行的,因此 www-data 是执行该命令的用户。

正如预期的那样,我收到以下错误:

array(3) {
  [0]=>
  string(36) "Permission denied, please try again."
  [1]=>
  string(36) "Permission denied, please try again."
  [2]=>
  string(39) "Permission denied (publickey,password)."
}

我知道授予此用户 sudo 权限以成为其他用户并以“john”身份执行命令的安全风险。因此,我的问题是:有没有其他方法可以在不修改 www-data 权限的情况下执行此操作?我相信 SSH 是在远程服务器上创建某些内容的唯一方法,还是我错了?

我不会在服务器 B 上运行网站来本地创建这些图像,这不是我想要的。

该用户回答的这个脚本值得尝试吗?https://superuser.com/a/547577/514523

答案1

您应该让 www-data 成为 /home/john/images 的所有者,或者将其添加到 john 组并赋予其适当的写权限,或者将该文件夹的 chmod 设置为 777。


尝试这个:

chmod 777 /home/john/images/

然后,您授予任何人该文件夹的权限,包括 www-data。

这可能太多了,所以如果这有效的话,你可以限制权限。您可以将 www-data 添加到 john 组:

groups www-data
groups john
usermod -aG john www-data

首先,您要查看 www-data 和 john 属于哪个组。然后将 www-data 添加到 john-group。

现在您必须限制该文件夹的权限:

chmod 775 /home/john/images/
ls -al /home/john/images/

现在用户“john”和组“john”的所有成员都拥有写权限。

相关内容