Как запустить интерактивный bash с su

325
AngocA

У меня нет sudo suимени пользователя, однако у меня есть пароль. Я хочу иметь скрипт, который передает пароль и дает мне интерактивный bash.

Я попробовал это:

echo mypassword | su - otherusr Password: Last login: Wed Jul 25 12:09:38 COT 2018 [myuser@myserver ~]$  

Это возвращает меня к myuser, и у меня нет интерактивного bash с другим пользователем.

Я пробовал также:

echo mypassword | su -c "/bin/bash" - otherusr echo mypassword | su -s "/bin/bash" - otherusr echo mypassword | su -c "/bin/bash -i" - otherusr Password: bash: cannot set terminal process group (-1): Inappropriate ioctl for device bash: no job control in this shell bash-4.2$ exit 

Как я могу это сделать? Я хочу создать скрипт, который возвращает мне интерактивный сеанс bash с другим пользователем; не просто выполнить команду с другим пользователем.

0
Похоже, вы работаете в какой-то супер-ограниченной оболочке, и она не передает ваш пароль. Попробуй su, а пароль набираешь нормально? Кроме того, обычно вы не должны использовать этот метод для входа в систему, так как тогда ваш пароль записывается в журналах Bash. Обычно это серьезная проблема безопасности. Если вы собираетесь использовать этот метод, можете также добавить `nopasswd` к` sudoers` Chris 5 лет назад 0
Почему бы не `su - otherusr` и ввести пароль, если вы все равно собираетесь работать в интерактивном режиме. Похоже, вы уже в оболочке. Hogstrom 5 лет назад 0

1 ответ на вопрос

0
Kamil Maciorowski

По умолчанию ни один из них sudoне suчитает пароль из стандартного ввода. Они пытаются использовать терминальное устройство напрямую (некоторые реализации могут даже жаловаться при использовании в конвейере). Существует sudo -Sвозможность изменить это поведение, но, насколько я знаю, подобного варианта не существует su.

Решение: использовать expect.

expectэто программа, которая «общается» с другими интерактивными программами по сценарию. Следуя сценарию, expectзнает, чего можно ожидать от программы и каков должен быть правильный ответ.

[...]

В общем, expectполезно для запуска любой программы, которая требует взаимодействия между программой и пользователем. Все, что необходимо, - это то, что взаимодействие можно охарактеризовать программно.

В вашем случае сценарий может быть:

#!/usr/bin/expect   log_user 0 spawn /bin/su - otherusr expect "Password: " send "mypassword\n" interact 

Советую сделать этот скрипт доступным только вам ( chmod go-rwx). Другие пользователи не должны иметь права читать его, потому что он содержится mypasswordв открытом тексте; им нельзя разрешать запускать его, потому что он дает доступ к otherusrоболочке.

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