이미 실행 중인 X 세션에서 두 번째 X 서버를 시작하고 싶습니다.
데비안 8 이전에는 이 줄을 편집하여 로 /etc/X11/Xwrapper.config
변경할 수 있었습니다 . 이를 통해 권한이 없는 사용자로 X 내에서 X를 실행할 수 있었습니다. X는 Xorg의 setuid 래퍼입니다.allowed_users=console
allowed_users=anybody
데비안 9에서는 상황이 변경되었습니다. X는 더 이상 setuid 래퍼가 아니며 대신 X에 필요한 권한은 systemd에 의해 제어됩니다. 파일이 /etc/X11/Xwrapper.config
더 이상 존재하지 않습니다.
패키지를 사용하여 레거시 동작을 복원할 수 있습니다 xserver-xorg-legacy
. 다음 /etc/X11/Xwrapper.config
줄을 포함해야합니다
allowed_users=anybody
needs_root_rights=yes
또 다른 가능성은 tty1...tty6 중 하나로 전환하여 X를 실행하는 xinit xterm -- :1 vt1
반면, vt1...vt6은 tty1...tty6을 준수해야 합니다. (tty8...tty12 / vt8...vt12는 더 이상 사용할 수 없습니다.)
이전 설정을 사용하지 않고 콘솔로 전환하는 것을 피하고 싶습니다. 나는 검색 가능성을 원한다 xinit xterm -- :1 vt8
.
권한이 없는 사용자가 이미 실행 중인 X에서 두 번째 X 서버를 시작할 수 있도록 systemd를 어떻게 설정합니까?
답변1
xinit
공격에 매우 취약하므로 사용하지 않는 것이 좋습니다.. 대신 사용하십시오 startx
. xinit
경고나 문서 없이 모든 사용자 ID의 X 연결을 허용하도록 작성된 것 같습니다. startx
문제를 해결하는 것 같습니다. 나는 이것이 왜 용납되는지, 처음에 어떻게 이런 일이 일어났는지 전혀 모릅니다.
루트 사용자로서:
systemd-run --property PAMName=login \
--property User=my-user \
--property StandardInput=tty \
--property TTYPath=/dev/tty8 \
sh -c 'chvt 8 && startx /usr/bin/xterm -- :1'
마법은 PAMName=
PAM 세션을 정의하고 열고 특정 TTY와 연결하는 데 있습니다. 이것은 얻는다pam_systemd당신이 원하는 것을하십시오. 나는 속였습니다 login
. 비록 기술적으로는 특별한 처리가 필요한 경우를 대비해 새로운 PAM "서비스 이름"을 정의해야 하지만요.
따라서 필요한 명령을 실행하는 스크립트를 작성할 수 있습니다. 그런 다음 권한 부여를 사용하여 루트로 스크립트를 실행합니다 sudo
.
SELinux를 사용한다면 이 문제도 극복해야 합니다.