Назад | Перейти на главную страницу

Выполнение Firefox завершается неудачно из-за корневого скрипта с потерей привилегий

Я не могу запустить firefox из скрипта sudoed python, который передает права обычному пользователю. Если я напишу

# 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

Я думаю, что это не проблема python, а проблема конфигурации firefox / iceweasel / debian. Возможно, firefox читает только UID, а не EUID, и не выполняет процесс, потому что UID равен 0. Что вы думаете?

Проблема в том, что он не может получить доступ к дисплею на X-сервере, он работает? Я бы не рекомендовал запускать firefox с правами root, это было бы похоже на запуск IE в окне Windows.

В комментарии вы сказали, что запускаете его на более низком уровне запуска. Ошибка в том, что вы запускаете firefox на этом более низком уровне до того, как X покажет активный дисплей. Отложите его, пока X не встанет.

Вы должны экспортировать переменную среды с именем DISPLAY со значением ': 0.0'. Это может заставить его работать. Спросите у stackoverflow, если вы не знаете, как экспортировать переменные среды с помощью python.

Я использую sux.

  1. apt-get install sux
  2. sux firefox

Описание: оболочка для su, которая будет передавать ваши учетные данные X. Sux - это оболочка для стандартной команды su, которая будет передавать ваши учетные данные X целевому пользователю.

Во-первых, вы обычно хотите использовать gksu или gksudo или sux чтобы получить права root для приложения X. Во-вторых, почему вы используете sudo на Debian? (Я имею в виду sudo даже включен? В Debian этого нет по умолчанию, в отличие от Ubuntu или OS X.) В-третьих, я не могу вспомнить ни одного случая, когда вы на самом деле необходимость для запуска браузера с привилегиями root.

Бывают случаи, когда вам нужно приложение с графическим интерфейсом под root - скажем, вы хотите отредактировать системный файл (/ и т.д. / сеть / интерфейсы например), и вам удобнее всего редактировать с gedit. Это не лишнее желание. Но вы бы хотели использовать gksu или аналогичная утилита для передачи привилегий.

Тебе действительно не стоит этого делать. Подобно, действительно.

Почему ты пытаешься?

Думаю, вам придется указать X-сервер. Боюсь, я понятия не имею, как на самом деле делать что в питоне :-)