Xを実行するためにルートは必要ありません。

Xを実行するためにルートは必要ありません。

Ubuntu Server 14.04を実行しているキオスクホストがあります。テレビなどの一部のビデオを再生するように設定しようとしています。時にはYouTubeのプレイリストや他のWebベースのビデオストリーミングサービスなどを再生する必要があるため、ブラウザウィンドウが必要になることがあります。

この目的のために、デスクトップ環境なしでベアボーンX.orgをインストールしました。

しかし、管理はネットワークを介して行われ、ホストはファイルとWebサーバーの役割を2倍にするので(これはホームプロジェクトです)、セキュリティに少し気を配り、Xをrootではなくユーザーとして実行したいと思います。確認しました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.

これは権限の問題のようですが、Wikiのドキュメントに記載されているすべての権限を設定しました。

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

/dev/event/*o+r​​w設定がありますが、

ユーザーはグループと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をroot以外のユーザーにするよりもセキュリティにとって有害で​​す。したがって、root以外のユーザーとして実行することでXを保護することは、実際にセキュリティを向上させることはできません。 (明らかな攻撃をブロックして攻撃をより困難にすることを考えてください。PCIレジスタを介してシステムを攻撃する方法を実際に知っている人は誰ですか?)

しかし、私が答えを見つけた方法は、straceでXorgを実行することでした。

strace -e トレース=on,ioctl Xorg

次に、開こうとしたデバイスまたは失敗したジョブを見つけます。 (私はそれがopenまたはioctlであると思いますが、対応するシステムコールのリストを拡張する必要があるかもしれません)

おすすめ記事