Linux

將外部文件作為 www-data 執行(Ubuntu 16.04)

  • April 29, 2017

我想通過 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

但它什麼也沒做。

我現在沒有想法了,請幫助。

如果您要使用 sudo(您可能會這樣做)來提升您需要的權限:

  • 授予對virsh命令而不是套接字文件的訪問權限
  • 在ie中使用virsh命令的絕對路徑/etc/sudoers

www-data ALL = NOPASSWD: /path/to/virsh

  • 需要呼叫sudo你的 exec 命令
  • 需要virsh在 exec 命令中使用絕對路徑與 sudo 即

shell_exec("/bin/sudo /path/to/virsh start wine again")

引用自:https://serverfault.com/questions/847284