1

我已经使用 Linux 中的 .Net Core 控制台应用程序调用 virshProccess.start了很多个月,但突然出现权限错误:

Permission denied
at Interop.Sys.ForkAndExecProcess(String filename, String[] argv, String[] envp, String cwd, Boolean redirectStdin, Boolean redirectStdout, Boolean redirectStderr, Boolean setUser, UInt32 userId, UInt32 groupId, Int32& lpChildPid, Int32& stdinFd, Int32& stdoutFd, Int32& stderrFd, Boolean shouldThrow)
at System.Diagnostics.Process.StartCore(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()
at wconfig.Menus.MAIN.Test(Object& Obj)
  • 我以 root 身份运行我的 .Net Core 应用程序
  • 我可以从 shell 很好地运行 virsh 命令
  • Process.Start如果我使用,我可以很好地运行 virsh 命令bash -c MyVirshCmd...
  • 我可以在我的 .Net Core 应用程序中运行其他命令很好,我只看到了 virsh 的问题

ForkAndExecProcess本机 .net 核心功能和 virsh中发生了一些奇怪的事情。

.Net Core 代码示例:

Dim PI As New ProcessStartInfo
PI.RedirectStandardOutput = False
PI.FileName = "virsh"
PI.Arguments = "list --all"
Using proc As New Process
  proc.StartInfo = PI
  proc.Start()
End Using

/etc/libvirt/qemu.conf配置文件中它说The user for QEMU processes run by the system instance.?我尝试将文件设置usergroup“root”,但没有帮助。

无奈之下,我试图重新启动服务器,当然没有帮助。
我想不出服务器上发生了什么变化,它昨天突然停止工作。
使用 Debian Buster (10)
我迷路了?

4

1 回答 1

0

是的,我知道了!
通过使用strace -f -o /tmp/strace.txt MyDotNetApp,我可以看到 dotnet 正在执行/root/virsh???。
事实证明,这个文件由于某种原因存在并且是 0KB!
显然 dotnet 的路径搜索顺序不同于 shell,因此 dotnet 执行/root/virsh而 shell 执行真正的 virsh in /usr/bin/virsh.
天哪......这可能需要我很长时间才能找到,它确实做到了,但它可能需要一个月(scarry)!

我的系统环境PATH是: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

所以似乎 dotnet 使用自己的“路径”:-(

于 2019-09-11T06:46:49.030 回答