X를 실행하는 데 루트가 필요하지 않습니다.

X를 실행하는 데 루트가 필요하지 않습니다.

Ubuntu Server 14.04를 실행하는 키오스크 호스트가 있습니다. TV와 같은 일부 비디오를 재생하도록 설정하려고 합니다. 때로는 유튜브 재생목록이나 기타 웹 기반 비디오 스트리밍 서비스 등을 재생해야 하므로 브라우저 창이 필요할 것 같습니다.

이를 위해 데스크톱 환경 없이 베어본 X.org를 설치했는데 작동했습니다.

그러나 관리는 네트워크를 통해 이루어지고 호스트는 파일 및 웹 서버 역할을 두 배로 하기 때문에(이것은 홈 프로젝트입니다.) 보안에 조금 신경을 쓰고 X를 루트가 아닌 사용자로 실행하고 싶습니다. 나는 확인했다https://wiki.ubuntu.com/X/Rootless, 그러나 오래된 것 같습니다. -nohwaccess를 사용하여 X를 실행하면 다음과 같은 문제가 발생합니다.

/usr/bin/Xorg vt8 -retro -sharevts -nohwaccess -logfile /tmp/Xorg.U.log :1

...

Fatal server error:
(EE) Unrecognized option: -nohwaccess

플래그를 제거하면 시작되지만 즉시 실패합니다.

Loading extension GLX
xf86EnableIOPorts: failed to set IOPL for I/O (Operation not permitted)

편집: 이런, 나는 분명히 읽을 수 없습니다! Xorg를 종료시키는 치명적인 오류는 이것이 아니라 xf86EnableIOPorts경고 직후입니다.

(--) Depth 24 pixmap format is 32 bpp
Unable to retrieve master
Fatal server error:
[ 38106.045] (EE) AddScreen/ScreenInit failed for driver 0

그리고 런타임을 사용하여 sudo다음을 내보냅니다.

(--) Depth 24 pixmap format is 32 bpp
RADEON(0): [DRI2] Setup complete
... and so forth.

이는 권한 문제인 것 같지만 위키 문서에 언급된 모든 권한을 설정했습니다.

videoplayer@yuunagi:/usr/bin$ ls -la /dev/tty8
crw-rw---- 1 videoplayer root 4, 8  1月 13 02:09 /dev/tty8 

/dev/event/*o+rw 설정이 있는데,

사용자는 및 그룹 videoplayer모두에 속합니다 .videoaudio

videoplayer@yuunagi:/usr/bin$ cat /etc/group | grep videoplayer
audio:x:29:videoplayer
video:x:44:videoplayer
videoplayer:x:999:

내가 여기서 무엇을 놓치고 있는 걸까요?

편집하다: 그런데. 누군가 지적하기 전에: 저는 KMS를 활성화했습니다. 커널 로그에는 다음과 같이 나와 있고(DRM 기능이 있는 오픈 소스 Radeon 드라이버) X.org 로그에는 다음과 같이 나와 있습니다.[KMS] Kernel modesetting enabled.

편집 2:strace는 다음을 나타냅니다.

GPU 장치 파일을 성공적으로 열었습니다.

open("/dev/dri/card0", O_RDWR)          = 9

이후 파일에는 다음과 같이 수십 개의 후속 ioctrls가 있습니다.

ioctl(9, 0xc0106407, 0x7fff66772190)    = 0

그런 다음 마지막 후속 ioctl은 다음과 같습니다.

ioctl(9, TUNER_SET_CONFIG, 0x7fff667722b0) = 0

그 후에는 실패했습니다.

ioctl(9, 0x641e, 0)  = -1 EACCES (Permission denied)
Unable to retrieve master

그런데. 액세스된 GPU 개발 파일에는 다음과 같은 권한이 있습니다.

videoplayer@yuunagi:/usr/bin$ ls -la /dev/dri/card0
crw-rw----+ 1 root video 226, 0  1月 13 02:09 /dev/dri/card0

답변1

나는 이것이 일부 DRI 장치에 달려 있다고 빠르게 추측합니다. 또한 PCI 메모리 범위 및 유사한 항목을 처리하는 능력에 따라 달라질 수 있으며 Xorg 사용자가 이를 읽을 수 있도록 만드는 것은 X를 루트가 아닌 사용자로 만드는 것보다 보안에 더 해롭습니다. 따라서 루트가 아닌 사용자로 실행되도록 하여 X를 보호하는 것은 실제로 보안을 향상시키지 못할 수 있습니다. (명백한 공격을 차단하여 공격을 더 어렵게 만든다고 생각하십시오. PCI 레지스터를 통해 시스템을 공격하는 방법을 실제로 아는 사람은 누구입니까?)

하지만 제가 답을 찾은 방법은 strace에서 Xorg를 실행하는 것이었습니다.

strace -e 추적=on,ioctl Xorg

그런 다음 열려고 시도한 장치 또는 실패한 작업을 찾으십시오. (나는 그것이 open 또는 ioctl일 것이라고 추측하지만, 해당 시스템 호출 목록을 확장해야 할 수도 있습니다)

답변2

나도 같은 문제가있었습니다 (또한레이톤), 나는 통과한다도래 송곳그리고 커널 소스 코드. 내 결론은 이것이 저주 없이는 (아마도) 작동하지 않을 것이라는 것입니다.체계. 코드 포인터는 다음 보관된 이메일을 참조하세요.

답장: X에는 suid 루트가 없습니다.

관련 정보