запустите ipython, но не как корень

ipython запускается как корень (UID); хорошо, но мне нужно это после того, как ipython не могут выполнить и не позволяют, сценарий/код, который может получить корень privilegies., например,

Я запускаю ipython, хорошо UID является корнем. И в моем visudo файле я изменяюсь:

root ALL=NOEXEC:/usr/bin/sudo
user ALL=NOEXEC:/usr/bin/sudo

И снимите обоих пользователей sudoers.

Так... Я выполняю следующий код:

import subprocess
from subprocess import Popen, PIPE
COMMAND = "sudo apt-get install g++ -y" #In this line, you put the code that you want to run
proccess = Popen(COMMAND, shell=True, executable="/bin/bash", stdout=PIPE, stderr=PIPE)
result = proccess.communicate()
o, e = result

print "*"*100
print "Output"
print "*"*100
for i in o.split("\n"):
    print i

print "*"*100
print "Errors"
print "*"*100
for i in e.split("\n"):
    print i

Мне нужно это, ipython не может сделать этого это. Я больше, если я вышел прочь sudo от КОМАНДЫ; ipython позволяют мне делать это!!!!

Справка!Спасибо!

1
задан 19 June 2015 в 00:37

1 ответ

После запуска интерпретатора как корня он неизбежно имеет полномочия пользователя root. Для отбрасывания полномочий, Вы могли записать обертку сценария оболочки, где Вы изменяете пользователя процесса и группу и запускаете интерпретатор без полномочий.

Решение 1: обертка сценария оболочки

  1. Вам нужен непривилегированный пользователь, которого можно переключить на (создайте один с sudo adduser --system --no-create-home [username] при необходимости, но Ваша учетная запись должна быть прекрасной),
  2. запустить python с sudo su -c ipython [username] и проверьте, что это непривилегированно с

    import os
    os.getuid() # should be [username]'s UID
    os.geteuid() # should be [username]'s UID
    import subprocess
    subprocess.check_call(["sudo", "-i"]) # should raise CalledProcessError
    

Это решение обеспечивает только достаточную гибкость для запуска интерпретатора. Если Вы хотите написать код и соглашение с привилегированными и непривилегированными частями, рассмотрите решение 2.

Решение 2: полномочия отбрасывания в Python

В случае, если Вы хотите управлять полномочиями в python интерпретатор:

Решение, где отбросить полномочия в Вашем коде, не тривиально и должно учесть компромисс между комфортом (Вы не хотите вводить свой пароль все время), безопасность (поскольку немногие кодируют максимально возможный, должен работать с полномочиями) и пригодность для обслуживания (столько же кода не должно касаться полномочий).

Подходы:

  • sudo предлагает способ получить полномочия для команды в непривилегированном интерпретаторе, но требует взаимодействия с пользователем и мешает выполнять Ваш код без полномочий (потому что Вы имеете sudo оператор всего Вы управляете).
  • При запуске интерпретатора с полномочий, можно отбросить полномочия с os.set[/e/r/s]uid и os.set[/e/r/s]gid. Лекция документации Python обязательна в этом случае.

В целом необходимо написать как можно больше кода, не имея необходимость иметь дело с полномочиями и переносить этот код в функцию, которая отбрасывает полномочия, т.е. Я не рекомендую sudo подход, также потому что это делает кодозависимое на sudo.

0
ответ дан 1 August 2019 в 09:54

Другие вопросы по тегам:

Похожие вопросы: