2015-01-07 3 views
1

Возможно ли, что основной процесс Python выполняется с правами администратора, но затем запустить подпроцесс (многопроцессорность) Python в качестве другого пользователя? Я также хочу, чтобы домашний каталог пользователя и параметры оболочки применялись так же, как если бы этот интерпретатор Python был запущен этим пользователем.Демонтаж подпроцесса Python

Прямо сейчас, при использовании os.setuid и GID, разрешения являются правильными, но домашний каталог еще неверен, как и следовало ожидать:

>>> import os 
>>> os.setgid(1000) 
>>> os.setuid(1000) 
>>> print os.getuid() 
1000 
>>> print os.getgid() 
1000 
>>> f = open('/etc/shadow') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
IOError: [Errno 13] Permission denied: '/etc/shadow' 
>>> os.system('echo $HOME') 
/root 
0 

Есть идеи?

+0

И да, я знаю, что os.system устарела в пользу подпроцесса. Однако для целей тестирования os.system намного проще. – Soviero

+0

Почему бы просто не войти в систему как этот пользователь? –

+0

@PadraicCunningham, потому что он работает как damon, который будет уменьшать его подпроцессы по мере необходимости. – Soviero

ответ

0

Try:

os.environ['HOME'] = '/home/blah' 
os.system("ls ~") 

AFAIK, это так хорошо, как вы, вероятно, получите, потому что установки с сетью домашних каталогов, или пользователей с Баш профилями, которые устанавливают HOME для дурацких значений не будет воспроизводимый в чистом Python, и может иметь побочные эффекты.

+0

Я знаю, что могу установить переменные вручную, но я надеялся на что-то, встроенное в Python для этой цели. Скорее всего, чтобы избежать ошибок. – Soviero

+0

Хороший вопрос! Хотя в принципе переменные профиля оболочки и PAM могут устанавливать домашний каталог пользователя в какое-то произвольно сумасшедшее значение, поэтому эта проблема не выглядит решаемой в принципе, даже если разбор/etc/passwd будет работать во многих случаях. –

Смежные вопросы