Python은 권한 드롭이있는 루트 실행 스크립트에서 Firefox Webbrowser를 실행하지 못합니다.

StackOverflow https://stackoverflow.com/questions/1139835

  •  16-09-2019
  •  | 
  •  

문제

Sudoed Python 스크립트에서 Firefox를 실행할 수는 없습니다. 내가 쓰면

$ 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
>>> You shouldn't really run Iceweasel through sudo WITHOUT the -H option.
Continuing as if you used the -H option.
No protocol specified
Error: cannot open display: :0

나는 그것이 파이썬 문제가 아니라 Firefox/Iceweasel/Debian 구성 문제라고 생각합니다. 아마도 Firefox는 euid가 아닌 UID 만 읽고 UID가 동일하기 때문에 프로세스를 실행하지 않을 수도 있습니다. 어떻게 생각하십니까?

도움이 되었습니까?

해결책

이것은 당신의 환경 일 수 있습니다. 권한을 변경하면 여전히 루트 사용자 디렉토리에서 $ 홈을 가리키는 것과 같은 환경 변수를 남겨 두며, 이는 액세스 할 수 없습니다. 변경하여 이러한 변수를 변경하는 것이 좋습니다. os.environ 브라우저를 시작하기 전에. 확인할 가치가있는 다른 변수도있을 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top