我正在开展一个虚拟机项目,其中使用了两台服务器,我们称之为服务器 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”的所有成员都拥有写权限。