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 позволяют мне делать это!!!!
Справка!Спасибо!
После запуска интерпретатора как корня он неизбежно имеет полномочия пользователя root. Для отбрасывания полномочий, Вы могли записать обертку сценария оболочки, где Вы изменяете пользователя процесса и группу и запускаете интерпретатор без полномочий.
sudo adduser --system --no-create-home [username]
при необходимости, но Ваша учетная запись должна быть прекрасной),запустить 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.
В случае, если Вы хотите управлять полномочиями в python
интерпретатор:
Решение, где отбросить полномочия в Вашем коде, не тривиально и должно учесть компромисс между комфортом (Вы не хотите вводить свой пароль все время), безопасность (поскольку немногие кодируют максимально возможный, должен работать с полномочиями) и пригодность для обслуживания (столько же кода не должно касаться полномочий).
Подходы:
sudo
предлагает способ получить полномочия для команды в непривилегированном интерпретаторе, но требует взаимодействия с пользователем и мешает выполнять Ваш код без полномочий (потому что Вы имеете sudo
оператор всего Вы управляете).os.set[/e/r/s]uid
и os.set[/e/r/s]gid
. Лекция документации Python обязательна в этом случае.В целом необходимо написать как можно больше кода, не имея необходимость иметь дело с полномочиями и переносить этот код в функцию, которая отбрасывает полномочия, т.е. Я не рекомендую sudo
подход, также потому что это делает кодозависимое на sudo
.