Выполнение команд с помощью su из программы на Python

#python #python-2.7 #ubuntu #subprocess

#python #python-2.7 #ubuntu #подпроцесс

Вопрос:

Я хочу создать программу на python, которая меняет пользователя, предоставляет пароль для su и выполняет команду. Без использования SUDO. Предпочтительно с помощью подпроцесса

Например:

 su testuser -c id > /tmp/test
  

Я написал эти скрипты, но они не работают.

 import subprocess
su_password = ("Passwordn")

proc = subprocess.Popen('su testuser -c id > /tmp/test', shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
proc.stdin.write(su_password)
proc.stdin.flush()
  

и это с помощью pexpect

 import pexpect
child = pexpect.spawn('su testuser')
child.expect('Password: ')
child.sendline('Password123456')
child.sendline('id > /tmp/TEST')
  

Комментарии:

1. su получает пароль от терминала, а не от стандартного ввода. Почему вы не хотите использовать sudo? У него есть опция без пароля, которая может быть объединена с правилами, в которых указано, что могут выполняться только определенные команды — и конкретными пользователями

2. Да, я знаю, что su получает пароль от терминала, вот что я пытаюсь сделать. каким-то образом заставьте его думать так, как он получил это из терминала. Отказ от использования sudo является обязательным требованием

3. Вы можете попробовать обернуть его с помощью команды ‘script’ (с опцией -c). Набрав это на телефоне, поэтому я не могу протестировать его прямо сейчас, но он может сделать то, что вам нужно, и разрешить ввод терминала на стандартный ввод.

4. @alani не могли бы вы уточнить, я не понимаю, как обернуть это с помощью команды ‘script’

5. Ну, мое предыдущее предложение, похоже, не сработало, но я попробовал expect решение на serverfault.com/a/894475/592132 и это прекрасно работает. (Проверьте свой точный запрос пароля; в примере используется "Password :" , но в моей системе нет места.)