Tomcat이 VBoxManage를 실행할 수 없습니다: NS_ERROR_FAILURE (0x80004005)

Tomcat이 VBoxManage를 실행할 수 없습니다: NS_ERROR_FAILURE (0x80004005)

오늘 비슷한 질문을 보았습니다.VBoxManage: 가상 머신 NS_ERROR_FAILURE(0x80004005)를 시작하지 않습니다.하지만 여기서는 완전히 다르고 수수께끼 같은 맥락을 설명할 수 있습니다.

Ubuntu 20.04 기반 배포판에서는 일반 사용자로부터 다음 명령을 실행할 수 있습니다.

$ whoami
my-user-name
$ VBoxManage startvm --type headless my.app-name

하지만 나는아니요동일한 사용자가 Java(특히 Tomcat9)에서 동일한 명령을 실행할 수 있습니다.

ProcessBuilder pb = new ProcessBuilder("bash", "-c", "whoami"); // my-user-name
Process p = pb.start();

ProcessBuilder pb = new ProcessBuilder("bash", "-c", "VBoxManage ...");
Process p = pb.start();

마지막 경우에는 다음 오류가 발생합니다.

VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component MachineWrap, interface IMachine

tty비상 콘솔이나 기타 비대화형 셸에서도 명령을 성공적으로 실행할 수 있지만아니요Tomcat 프로세스에서 실행되는 Java입니다.

인터넷의 모든 사람들이 VirtualBox 재설치를 제안했지만 이는 이 상황과 전혀 관련이 없는 솔루션입니다(아무것도 변경하지 않고 Tomcat 또는 VirtualHost 재설치를 여러 번 시도했기 때문이기도 함). 입양을 권유하기도 하는데 --type headless저는 이미 그렇게 했습니다.

나는 또한 성공하지 못한 채 다음을 시도했습니다.

  • 톰캣 재설치
  • VirtualBox 재설치(2회)
  • 커널을 이상하고 불안정한 버전으로 업데이트했습니다.
  • 최신 BIOS 플래시

문제 해결 팁이 있나요?

답변1

나는 같은 문제를 가지고있다. 나는 systemd제한의 영향을 받았습니다 .

시스템 Tomcat 서비스를 확인하세요(정확한 버전 사용).

sudo systemctl cat tomcat9.service
#
# Systemd unit file for Apache Tomcat
#


...

# Security
User=my-user-name
Group=my-user-name
PrivateTmp=yes
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true

...

특히 위의 설정이 있을 수 있습니다 NoNewPrivileges. 이는 다음과 같은 이유로 특정 사용 사례에 문제가 됩니다.1

true인 경우 서비스 프로세스와 모든 하위 프로세스가 execve()를 통해(예: setuid 또는 setgid 비트 또는 파일 시스템 기능을 통해) 새로운 권한을 얻을 수 없도록 합니다. 이는 프로세스와 해당 하위 항목이 다시는 권한을 승격하지 못하도록 하는 가장 간단하고 효과적인 방법입니다.

이것이 문제라면 이 구성을 비활성화하십시오(설명했습니다).

sudo systemctl edit --full tomcat9.service
...

# NoNewPrivileges=true

...

그런 다음 Tomcat을 다시 시작하십시오.

sudo systemctl restart tomcat9.service

모든 것이 정상으로 돌아올 것입니다.


이것이 배포판에서 채택한 기본 시스템 서비스 단위의 특정 제한으로 인해 다른 사람들이 문제 해결에 시간을 허비하지 않도록 도움이 되기를 바랍니다. 더 많은 의견이 있으면 댓글을 추가해 주세요.

관련 정보