#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 :"
, но в моей системе нет места.)