将外部文件作为 www-data 执行(Ubuntu 16.04)

将外部文件作为 www-data 执行(Ubuntu 16.04)

我想通过 PHP 启动虚拟机,但是一直没有成功。以下是我得到的结果。

<?php
if(isset($_POST['btn_start'])){
  echo shell_exec('whoami');
  echo exec('virsh start winagain');
}
?>

<!DOCTYPE HTML>
<html>
<head>
  <title>Manage VPS</title>
</head>
<body>
<form method="POST" action="vps.php">
  <input type="submit" name="btn_start" value="Start">
</form>
</body>
</html>

我收到错误:

error: failed to connect to the hypervisor
error: no valid connection
error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission denied

所以我尝试将这一行放入我的 /etc/sudoers 文件中

www-data ALL = NOPASSWD: /var/run/libvirt/libvirt-sock

但它什么也没做。

我现在没什么主意了,请帮帮忙。

答案1

如果您要使用 sudo (您可能会这样做)来提升权限,您需要:

  • 授予对virsh命令的访问权限而不是套接字文件
  • virsh/etc/sudoersie中使用命令的绝对路径
    www-data ALL = NOPASSWD: /path/to/virsh
  • 需要调用sudo你的 exec 命令
  • virsh需要在 exec 命令中使用 sudo 的绝对路径,即
    shell_exec("/bin/sudo /path/to/virsh start wine again")

相关内容