![다른 사용자로 X 애플리케이션을 실행하는 방법(vscode)](https://linux55.com/image/199649/%EB%8B%A4%EB%A5%B8%20%EC%82%AC%EC%9A%A9%EC%9E%90%EB%A1%9C%20X%20%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95(vscode).png)
본질적으로 내가 원하는 것은 내 홈 디렉터리에 대한 읽기 권한을 부여하지 않고 vscode를 실행하는 것입니다.
그래서 새 사용자를 만들고 다음에서 파일을 다운로드했습니다 vscode
..tar.gz
https://code.visualstudio.com/#alt-downloads
이제 다음과 같이 로그인하여 code
실행 하려고 합니다 .vscode
~$ su - vscode -c "/home/vscode/code-stable-x64-1638855856/VSCode-linux-x64/bin/code --verbose"
Password:
[8347:1214/125108.021461:ERROR:browser_main_loop.cc(1402)] Unable to open X display.
The futex facility returned an unexpected error code.
/dev/fd/3: No such file or directory
Server response:
나는 또한 내부에서 시작을 사용해 보았고 ssh -Y vscode@localhost
효과 code
가 있었지만 가능하다면 ssh 사용을 피하고 싶습니다.
답변1
당신은해야합니다
- 변수를 올바르게 설정하십시오
$DISPLAY
. - 파일
~/.Xauthority
에 대한 액세스 권한 부여 /tmp/.X11-unix
공유 디렉터리 내의 소켓
X 서버를 다른 클라이언트와 공유하면 보안 관점에서 볼 때 이는 기본적으로 자신의 사용자로 프로그램을 실행하는 것과 동일합니다. 클라이언트는 키보드를 관찰하고, 스크린샷을 찍고, 키 입력을 합성할 수 있지만 일부는 놀라지 않습니다. X11 프로토콜의 덜 사용되는 기능(텍스처 로딩? 글꼴 로딩?) 중 일부가 원격 파일 판독기로 남용될 수 있습니다. 하지만 저는 X11 프로토콜의 전문가는 아닙니다.
격리가 매우 약하기 때문에 어쨌든 홈 디렉터리인 컨테이너에 대한 액세스를 제한하는 방법이 덜 정교할 수도 있습니다.
Linux에는 네임스페이스가 있으며 docker, kubernetes, snap과 같은 기술은 모두 이에 의존합니다. 당신이 할 수 있는 일은 일반 사용자로 프로세스를 시작하고 해당 프로세스에 홈 디렉터리 없이 사용자 및 파일 시스템 환경에 대한 전체 보기를 제공하는 것입니다.
Podman은 이러한 기술 중 하나이며 데비안, IIRC에서 사용할 수 있습니다. 설치는 가능한 한 간단해야 합니다.
sudo apt install -y podman
그러면 컨테이너를 실행할 수 있습니다.
podman run -it --rm debian:sid
# | | | |
# +--------------- Run subcommand: run a container
# | | |
# +----------- interactive, i.e., assign a virtual terminal,
# | | so you can see and type into an interactive session
# | |
# +------- Remove the container after you're done - no data survives,
# | if it's only in the container. Of course, things on
# | volumes specified using the -v source_path:destination
# | persist, since they are "outside".
# |
# +-- name:tag is the way to specify what
# container you want to fetch in which version
그래픽 작업을 실행하려면 위에서 언급한 사항을 허용하고 SELinux에게 약속한 작업을 수행하고 있음을 알려야 합니다.
podman run -e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix:Z \
-v ~/.Xauthority:/root/.Xauthority:Z \
--security-opt label=type:container_runtime_t \
-it --rm fedora:35
# ||||
# +---- -e INSIDE=OUTSIDE set an env variable INSIDE inside the
# ||| container to the value OUTSIDE
# |||
# +--- -v SOURCE:DEST[:permissions]
# || SOURCE directory or file appears under DEST within
# || container; :Z means that the podman-running users'
# || permissions are translated to root permissions inside.
# || Here, mount the host's X11 socket directory at the same place
# ||
# +-- -v SOURCE:DEST[:permissions] again
# | Here, mount the podman-running user's ~/.Xauthority
# | as /root/.Xauthority owned by root.
# |
# +- --rm -it: see above
[root@4da385540218 /]#
시작한 컨테이너 안에서 갑자기 루트가 아닌 상태가 된 것을 확인하세요!
이제 이 컨테이너에 vscode를 설치하고 컨테이너에서 ~/sourcecode
와 같이 폴더를 공유하고 /sourcecode
vscode의 사용자 데이터 디렉터리로 사용할 수 있습니다.
podman run -e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix:Z \
-v ~/.Xauthority:/root/.Xauthority:Z \
--security-opt label=type:container_runtime_t \
-v ~/sourcecode:/sourcecode:Z \
-it --rm fedora:35
[root@4da385540218 /]#
rpm --import https://packages.microsoft.com/keys/microsoft.asc
[root@4da385540218 /]#
echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo
[root@4da385540218 /]#
dnf --refresh update -y
[root@4da385540218 /]#
dnf install -y code
[root@4da385540218 /]#
code --user-data-dir /sourcecode/ --no-sandbox
답변2
이 단계를 어떻게 수행합니까? $DISPLAY 변수를 올바르게 설정하고, ~/.Xauthority 파일에 대한 액세스 권한을 부여하고, /tmp/.X11-unix 디렉토리에서 소켓을 공유합니다.
저는 우분투를 처음 접했고 이것이 무엇을 의미하는지, 어떻게 수행하는지 전혀 모릅니다. 코드를 설치했는데 어제는 열 수 있었는데 오늘은 열 수 없습니다. --verbose 코드를 입력하면 "X 디스플레이를 열 수 없습니다. futex 도구가 예기치 않은 오류 코드를 반환했습니다. /dev/fd/3: 해당 파일 또는 디렉터리가 없습니다."라는 메시지가 표시되고 여기에 표시됩니다. 저는 우분투 20.04를 사용하고 있습니다