[root@hostname ~]# python script.py # allow this
[user@hostname ~]$ sudo python script.py # deny this
[user@hostname ~]$ sudo -E python script.py # deny this
[user@hostname ~]$ sudo PATH=$PATH python script.py # deny this
[user@hostname ~]$ python script.py # kindly refuse this
Я пытаюсь добиться описанного выше поведения. Читайте дальше, если вам небезразлично, почему этого примера недостаточно.Извините за острый язык, но большинство моих вопросов о Stack Exchange возвращают враждебные вопросы вместо ответов.
Этот вопрос возникает из-за требования администратора запустить мой скрипт, но природа сценария требует root
'переменные окружения (а не sudo
).
Я провел это тщательное исследование ... ниже - из этого ответа
if os.geteuid() == 0:
pass # sufficient to determine if elevated privileges
Но потом я начал нуждаться в доступе PATH
внутри моего скрипта.Я заметил, что
sudo -E env | grep PATH; env | grep PATH
печатает разные PATH
значения.Я обнаружил, что это из-за политики безопасности на PATH
.Я также обнаружил, что обходной путь к PATH
равен sudo PATH=$PATH ...
Однако это не единственная переменная среды, защищенная политикой, и с этой точки зрения, зачем выдвигать это перечисление переменных среды напользователь сценария?Кажется, что требование root
явно является лучшим подходом, и просто предупредите администратора, чтобы использовать root
явно изнутри скрипта.
Есть ли такой способ различать root
и * 1032?* с Python?