저는 Linux용 원격 데스크톱/스트리밍 프로그램을 개발 중입니다. 사용자가 로그인할 때 시작할 프로그램을 지정하면 원격 서버는 해당 프로그램을 새로운 프로세스로 시작합니다. 서버 프로세스는 Wayland 컴포지터 역할을 하므로 하위 프로세스는 화면 밖에서(서버의 다른 사용자의 관점에서) 실행되고 컴포지터로부터 입력을 받습니다.
이는 간단한 애플리케이션에서는 잘 작동하지만 Steam(이 사용 사례에서 중요한 애플리케이션)과 같은 많은 데스크톱 애플리케이션은 dbus를 사용하여 실행 중인 기존 Steam 인스턴스가 있는지 확인하고, 사용 가능한 경우 해당 인스턴스로 전환합니다. 따라서 창이 이미 열려 있는 경우 단순히 프로세스를 분기/실행하는 것은 작동하지 않습니다.
unshare(2)
각 어린이에 대한 설치 네임스페이스를 만든 다음 dbus를 숨기기 위한 무언가를 설치해 보았습니다 /run
. 아직 이 접근 방식으로는 성공하지 못했습니다.
컨테이너화는 격리와 약간의 보안 이점 제공을 위한 명백하고 일반적인 접근 방식입니다. 그러나 저는 Docker나 lxd 등이 함께 실행되도록 요구하기보다는 서버 프로세스가 독립적이기를 바랍니다.
나는 보안에 대해 그다지 걱정하지 않습니다. 또는 오히려 이 문제에 대한 해결책이 반드시 컨테이너 탈출이나 유사한 공격을 방지할 필요는 없습니다.
어떤 Linux 친화적인 기술이나 커널 기능이 이 문제를 잘 해결하고 C/Rust 프로그램에서 구현하기가 합리적으로 쉽습니까?