X 내에서 두 번째 X 서버를 시스템 서비스로 실행

X 내에서 두 번째 X 서버를 시스템 서비스로 실행

이미 실행 중인 X 세션에서 두 번째 X 서버를 시작하고 싶습니다.

데비안 8 이전에는 이 줄을 편집하여 로 /etc/X11/Xwrapper.config변경할 수 있었습니다 . 이를 통해 권한이 없는 사용자로 X 내에서 X를 실행할 수 있었습니다. X는 Xorg의 setuid 래퍼입니다.allowed_users=consoleallowed_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를 사용한다면 이 문제도 극복해야 합니다.

관련 정보