X 데스크탑에서는 가끔 다른 사용자(루트 포함)로 GUI 응용 프로그램을 사용 gksudo
하거나 실행합니다. sudo somegui
나는 최근(2018년 초) Wayland 데스크탑에서는 이것이 불가능하다는 것을 최근에 발견했습니다. 모든 애플리케이션은 현재 데스크톱 사용자로 실행되어야 하며 해당 사용자에게 제한된 권한을 가집니다.
이것은 (설계상) Wayland의 영구적인 기능입니까, 아니면 su 유형의 사용이 아직 구현되지 않은 향상된 기능입니까?
나는 선호도나 의견이 아닌 문서화된 설명(로드맵, 디자인 페이지...)을 찾고 있습니다.
답변1
이것은 Wayland의 영구적인 기능입니까(의도적)
아니요, 이는 Wayland 계약과는 아무런 관련이 없습니다. 이것은 실제로 환경 설정의 문제입니다.
Wayland는 이름 이 WAYLAND_DISPLAY
. XDG_RUNTIME_DIR
그러나 루트도 액세스할 수 있습니다. (일부 애플리케이션에서는 XDG_SESSION_TYPE
어떤 것이 값을 가질 수 있는지 고려 wayland
하거나 x11
X를 사용할지 Wayland를 사용할지 결정하기도 합니다.)
sudo
XDG_RUNTIME_DIR
및 를 포함한 대부분의 환경 변수를 제거합니다 WAYLAND_DISPLAY
.
Wayland 애플리케이션을 루트로 실행할 수 있습니다.
sudo env XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR WAYLAND_SOCKET=$WAYLAND_SOCKET waylandapplication
또는 더 짧게 설정하여 -EH
거의 모든 환경 변수를 보존합니다(그러나 HOME
로 설정 /root
). 여기에는 DISPLAY
Xwayland XAUTHORITY
액세스 도 포함됩니다 .
sudo -EH application
그러나 루트로 실행되는 애플리케이션이 에 무엇이든 쓰면 XDG_RUNTIME_DIR
사용자 애플리케이션에 대한 파일 권한 문제가 발생할 수 있습니다.
그러나 그래픽 응용 프로그램을 루트로 실행할 때의 보안 문제는 X11보다 Wayland에서 훨씬 적습니다.
실수로 X11을 사용하는 것을 방지하려면 다음 없이 실행할 수 있습니다 DISPLAY
.
sudo -EH env DISPLAY= waylandapplication
나는 선호도나 의견이 아닌 문서화된 설명(로드맵, 디자인 페이지...)을 찾고 있습니다.
이것웨일랜드 문서언급했지만 WAYLAND_DISPLAY
그에 대해 아무것도 찾지 못했습니다 XDG_RUNTIME_DIR
. 그러나 모든 Wayland 신디사이저(참조 구현 포함) weston
는 XDG_RUNTIME_DIR
.
다른 위치에 있는 경우 WAYLAND_DISPLAY
동일한 Wayland 디스플레이에서 사용자의 응용 프로그램을 실행하는 데 문제가 없습니다. 하지만XDG_RUNTIME_DIR
지정됨로그인한 사용자를 제한하고 사용자와 연결된 소켓을 포함해야 합니다.
$XDG_RUNTIME_DIR은 사용자별 비필수 런타임 파일과 기타 파일 개체(예: 소켓, 명명된 파이프 등)가 저장되어야 하는 상대 기본 디렉터리를 정의합니다. 디렉토리는 사용자가 소유해야 하며 해당 디렉토리에 대한 읽기 및 쓰기 액세스 권한을 가진 유일한 사람이어야 합니다. Unix 액세스 모드는 0700이어야 합니다.
Wayland에서 다른 사용자나 루트를 실행하는 문제는 XDG_RUNTIME_DIR
Wayland 자체가 아닌 사양과 관련이 있습니다. 임의 액세스로 사용자 정의를 지정하면 XDG_RUNTIME_DIR
( /tmp
따라서 사양이 위반됨) 모든 사용자가 wayland 표시를 사용할 수 있습니다.
앞으로는 필요하지 않기를 바라지 XDG_RUNTIME_DIR
만 구현에 따라 다릅니다.Wayland 다큐멘터리 4장:
Wayland 1.15부터 구현에서는 WAYLAND_DISPLAY를 서버 끝점이 수신하는 절대 경로로 설정하여 파일 시스템의 어느 곳에나 있는 서버 소켓 끝점을 선택적으로 지원할 수 있습니다.
답변2
ego
이 사용 사례를 위해 (Alter Ego)를 작성했습니다 . GUI 응용 프로그램은 아니지만 콘솔에서 다른 사용자로 GUI 응용 프로그램을 시작할 수 있으며 xhost와 Wayland 및 PulseAudio 소켓 공유를 자동으로 처리합니다.https://github.com/intgr/ego
비결은 Posix ACL을 사용하여 다른 사용자에게 Wayland/PulseAudio 소켓에 대한 액세스 권한을 부여하고 대상 사용자의 애플리케이션이 연결 방법을 알 수 있도록 환경 변수를 설정하는 것입니다.
문제가 발생하면 GitHub에 문제를 제기해 주세요.
답변3
상당히 간단한 두 가지 해결책이 있습니다. 아래 예는 시냅틱을 시작하지만 다른 명령도 작동합니다.
- SSH를 사용하여 루트로 X 전달(루트 로그인을 활성화
/etc/ssh/sshd_config
하거나 키 인증을 구성해야 할 수도 있음):
$ ssh -Y root@:: synaptic
- 권장대로 socat 및 sudo를 사용하십시오.bober의 RedHat 버그 #1274451. 아래 예에서는 #0을 표시하고 #1은 무료라고 가정합니다.
socat UNIX-LISTEN:/tmp/.X11-unix/X1 UNIX-CONNECT:/tmp/.X11-unix/X0 & sudo DISPLAY=:1 synaptic
어느 쪽이든 해결책은 사용자 소유 프로세스를 X11 소켓에 연결하고 터널을 제공하는 것이라고 생각합니다.
답변4
귀하의 질문에 직접 답변하지는 않았지만 일부 사람들은 동일한 문제를 안고 여기에 올 수도 있다고 생각했습니다.
다음은 그래픽 애플리케이션(예:편집자,시냅스또는고팟) 루트로 전달됨스도안에웨이랜드회의:
https://gist.github.com/wachambo/bd22e12db2d5a46dc109bd0d553733be
여기에서 가져오기:
#!/usr/bin/env bash
#
# Enable root access to x-windows system.
#
# Motivation: Trying to run a graphical application as root via su, sudo in a
# Wayland session (e.g. GParted or Gedit), will fail. Apps which use polkit to
# request administrator permissions for just certain operations and only when
# needed are not affected (they are not started as root right away).
# [1] https://bugzilla.redhat.com/show_bug.cgi?id=1274451
#
# Based on a Reddit comment.
# [2] https://www.reddit.com/r/Fedora/comments/5eb633/solution_running_graphical_app_with_sudo_in/
if (( $# != 1 )); then
echo "Illegal number of parameters."
echo
echo "Usage: wsudo [command]"
exit 1
fi
for cmd in sudo xhost; do
if ! type -P $cmd &>/dev/null; then
echo "$cmd it's not installed. Aborting." >&2
exit 1
fi
done
xhost +SI:localuser:root
sudo $1
#disable root access after application terminates
xhost -SI:localuser:root
#print access status to allow verification that root access was removed
xhost