How to start an interactive bash with su

0

1

I do not have sudo su over a username, however I have its password. I want to have an script that passes the password and gives me an interactive bash.

I have tried this:

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

It returns me to myuser and I do not have an interactive bash with the other user.

I tried also:

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

How can I do that? I want to create an script that returns me an interactive bash session with another user; not just execute a command with another user.

AngocA

Posted 2018-07-25T17:15:02.207

Reputation: 334

It looks like you're working in some super-limited shell, and it isn't piping your password. Try su, and type the password normally?

Also, you typically shouldn't use this method to log in, as then your password is logged in the bash logs. That's usually a severe security concern. If you're gonna use this method, might as well add nopasswd to sudoers – Chris – 2018-07-25T17:46:38.000

Why not su - otherusr and type the password if your going interactive anyway. It looks like you're already in a shell. – Hogstrom – 2018-07-25T18:28:32.527

Answers

0

By default neither sudo nor su reads a password from stdin. They try to use a terminal device directly (some implementations may even complain when used in a pipe). There is sudo -S option to change this behavior, but as far as I know there is no similar option for su.

Solution: use expect.

expect is a program that "talks" to other interactive programs according to a script. Following the script, expect knows what can be expected from a program and what the correct response should be.

[…]

In general, expect is useful for running any program which requires interaction between the program and the user. All that is necessary is that the interaction can be characterized programmatically.

In your case the script may be:

#!/usr/bin/expect 

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

I advise to make this script accessible only to you (chmod go-rwx). Other users shouldn't be allowed to read it because it contains mypassword in plaintext; they shouldn't be allowed to run it, because it gives access to otherusr's shell.

Kamil Maciorowski

Posted 2018-07-25T17:15:02.207

Reputation: 38 429