Executando X sem raiz

4

Eu tenho um host no estilo de quiosque executando o Ubuntu Server 14.04. Estou tentando configurá-lo para reproduzir alguns vídeos, tipo TV. Às vezes, ele precisa reproduzir playlists do YouTube e outros serviços de streaming de vídeo baseados na Web, etc., portanto, uma janela do navegador parece ser necessária.

Para este propósito eu instalei um barebones X.org sem um ambiente de desktop e funciona.

No entanto, como a administração é pela rede e o host funciona como um servidor de arquivos e da Web (esse é um projeto inicial), estou um pouco preocupado com a segurança e gostaria de executar o X como não-raiz. Eu já verifiquei o link , mas parece datado: rodar o X com o -nohwaccess reclama:

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

...

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

Se eu tirar a bandeira, ela começa, mas falha imediatamente:

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

Edit: Opa, aparentemente não consigo ler! O erro FATAL por que o Xorg termina não é isso, é isso, logo após o aviso xf86EnableIOPorts :

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

Considerando a execução com sudo , ele emite:

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

Parece um problema de permissão, mas defini todos os direitos mencionados no artigo da wiki:

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

/dev/event/* tem o + rw definido,

O usuário videoplayer pertence aos grupos video e audio :

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

O que eu sinto falta aqui?

Editar : Btw. antes que alguém indique: eu tenho o KMS ativado. O registro do kernel diz isso, (drivers Radeon de código aberto com DRM em função) e logs do X.org dizem que: [KMS] Kernel modesetting enabled.

Edit2 : strace revela o seguinte:

Abertura de um arquivo de dispositivo da GPU com sucesso:

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

Depois disso, há dezenas de ioctrls subsequentes para esse arquivo, assim:

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

E então, último ioctl sucessor:

ioctl(9, TUNER_SET_CONFIG, 0x7fff667722b0) = 0

Depois disso, uma falha:

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

Entre. o arquivo dev de GPU acessado tem as seguintes permissões:

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

2 respostas

2

Vou adivinhar que depende de alguns dispositivos DRI. Também pode depender da habilidade de se mexer com intervalos de memória PCI e coisas assim, e fazer com que sejam legíveis pelo usuário do Xorg faria mais mal à segurança do que ter X não-raiz. Então, proteger o X rodando não-root pode não melhorar a segurança (ele poderia tornar um ataque muito mais difícil bloqueando os ataques óbvios. Quem realmente sabe como atacar um sistema através de seus registradores PCI?)

Mas a maneira que eu encontraria a resposta é rodar o Xorg sob strace.

strace -e trace = aberto, ioctl Xorg

Em seguida, procure qual dispositivo ele tenta abrir ou qual operação falha. (Eu estou supondo que será aberto ou ioctl, mas você pode ter que expandir essa lista de syscalls)

    
por 13.01.2015 / 17:50
0

Eu tenho o mesmo problema (também com um radeon ), e eu tracei isso através do Xorg e fontes do kernel. Minha conclusão é que isso (provavelmente nunca) funcionará sem o systemd maldito. Veja este email arquivado para os ponteiros de código:

Re: X sem raiz suíd

    
por 20.12.2016 / 02:26

Tags