A execução do Firefox falha a partir de um script executado pela raiz com queda de privilégios

1

Eu não posso rodar o firefox a partir de um script python sudoed que derrube privilégios para o usuário normal. Se eu escrever

# sudo python
>>> import os
>>> import pwd, grp
>>> uid = pwd.getpwnam('norby')[2]
>>> gid = grp.getgrnam('norby')[2]
>>> os.setegid(gid)
>>> os.seteuid(uid)
>>> import webbrowser
>>> webbrowser.get('firefox').open('www.google.it')
True
>>> # It returns true but doesn't work
>>> from subprocess import Popen,PIPE
>>> p = Popen('firefox www.google.it', shell=True,stdout=PIPE,stderr=PIPE)
>>> # Doesn't execute the command

Eu acho que não é um problema de python, mas o problema de configuração do firefox / iceweasel / debian. Talvez o firefox leia apenas o UID e não o EUID, e não execute o processo porque o UID é igual a 0. O que você acha?

    
por Emilio 15.07.2009 / 21:52

6 respostas

1

Você tem que exportar a variável de ambiente chamada DISPLAY com o valor ': 0.0'. Isso pode dar certo. Pergunte no stackoverflow se você não sabe como exportar variáveis de ambiente usando python.

    
por 16.07.2009 / 04:34
1

O problema é que ele não pode acessar a exibição no servidor X, ele está sendo executado? Eu não recomendaria rodar o firefox com permissões de root, isso seria como rodar o IE em uma caixa do windows.

Você disse em um comentário que estava sendo lançado em um nível de execução mais baixo. O erro é porque você está lançando o firefox nesse nível inferior antes de o X exibir uma exibição ativa. Atrase ele está correndo até o X acabar.

    
por 15.07.2009 / 22:29
0

Você realmente não deveria fazer isso. Tipo, realmente .

Por que você está tentando?

    
por 15.07.2009 / 21:56
0

Primeiro, você normalmente deseja usar gksu ou gksudo ou sux para obter privilégios de root para um aplicativo X. Segundo, por que você está usando sudo no Debian? (Eu quero dizer é sudo mesmo habilitado? Não é por padrão no Debian, ao contrário do Ubuntu ou OS X.) Terceiro, eu não consigo pensar em nenhuma circunstância em que você precise executar uma navegador com privilégios de root.

Existem casos em que você precisa de um aplicativo gui como root - digamos, você quer editar um arquivo de sistema ( / etc / network / interfaces por exemplo), e você está mais confortável editando com %código%. Isso não é uma coisa irracional para querer fazer. Mas você desejaria usar gedit ou um utilitário semelhante para transferir os privilégios.

    
por 15.07.2009 / 22:26
0

Eu uso o sux.

  1. apt-get installl sux
  2. sux firefox

Description: wrapper around su which will transfer your X credentials Sux is a wrapper around the standard su command which will transfer your X credentials to the target user.

    
por 15.07.2009 / 22:32
0

Eu acho que você terá que especificar um servidor X. Eu não tenho idéia de como fazer isso em python: -)

    
por 15.07.2009 / 21:57