Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

unix - run a command as another user [closed]

Tags:

unix

sudo

I am a newbie to Unix. I am trying to run a shell script and command as another user.

For example: I am logged in as user1 and want to execute a script as user2. I dont want the password prompt and I want it to be auto-entered. I am aware of the public key authentication but I am trying to find if there is something like:

sudo -u user2 script.sh

I am trying to cron this, so I dont want the password prompt. I want it to be handled in the sudo command itself.

please help

like image 350
Kannan Lg Avatar asked Oct 07 '22 11:10

Kannan Lg


1 Answers

You can add NOPASSWD option to /etc/sudoers file. But may be it is not a good for you for security reasons.

user    user2 = NOPASSWD: /usr/local/bin/script.sh

Another option that you have: use sudo, but run it not directly from some script, but using pexpect or expect, that will enter the password for you. That is also may be not ideal from security point of view, because you need to save the password in the script.

With expect you can do something like:

#!/usr/bin/expect
set password "megapassword"
spawn /bin/sudo -u user1 /usr/local/bin/script.sh
expect "password for user:"
send "$password\r"
expect eof

Don't forget to set 500 permission on that file.

With pexpect (that is a python module) this will look like:

import pexpect
password = "megapassword"
p = pexpect.spawn("sudo -u user1 /usr/local/bin/script.sh")
i = p.expect([".ssword:*", pexpect.EOF])
p.sendline(password)

If you run the command in cron and can add the command to the crontab of user1, you can do that also. That may be the best solution.

user1$ crontab -e
like image 153
Igor Chubin Avatar answered Oct 13 '22 11:10

Igor Chubin