无需 root 即可运行 X

无需 root 即可运行 X

我有一台运行 Ubuntu Server 14.04 的信息亭式主机。我正在尝试将其设置为播放一些视频,例如电视。有时它需要播放Youtube播放列表和其他基于网络的视频流服务等,因此浏览器窗口似乎是必要的。

为此,我安装了一个没有桌面环境的准系统 X.org,并且它可以工作。

然而,因为管理是通过网络进行的,并且主机兼作文件和 Web 服务器(这是一个家庭项目),所以我有点安全意识,我想以非 root 身份运行 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

之后,该文件有数十个后续 ioctrl,如下所示:

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 dev文件具有以下权限:

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 成为非 root 对安全性造成的危害更大。因此,通过让 X 以非 root 身份运行来保护 X 实际上可能不会提高安全性(认为它可以通过阻止明显的攻击来使攻击变得更加困难。谁真正知道如何通过 PCI 寄存器来攻击系统?)

但我找到答案的方法是在 strace 下运行 Xorg。

strace -e 跟踪=打开,ioctl Xorg

然后查找它尝试打开哪个设备或哪个操作失败。 (我猜它将是 open 或 ioctl,但您可能必须扩展该系统调用列表)

答案2

我遇到了同样的问题(也有一个拉顿),我通过奥格和内核源代码。我的结论是,如果没有该诅咒,这将不会(可能永远)起作用系统。请参阅此存档电子邮件以获取代码指针:

回复:X 没有 suid root

相关内容