How to execute a command on behalf of a user if login is denied

11,910

Solution 1

Try running:

sudo -u tomcat ./bin/startup.sh

By avoiding su you avoid trying to invoke the user's login shell.

Solution 2

You can specify shell with -s option

sudo su -s /bin/bash -c ./bin/startup.sh tomcat

Solution 3

actually, the best way to do this is via runuser

the man page is here http://man7.org/linux/man-pages/man1/runuser.1.html

this tool is used to deal with the situation as the developer said in his bolg

Whenever an service is running as root and wants to change UID using the shell it should use runuser.

http://danwalsh.livejournal.com/55588.html

Share:
11,910
zjor
Author by

zjor

Updated on June 07, 2022

Comments

  • zjor
    zjor almost 2 years

    I need to run tomcat on behalf of tomcat user. But in /etc/passwd I have the following line:

    tomcat:x:505:506::/usr/share/tomcat:/bin/nologin
    

    So when I try to do this: sudo su tomcat ./bin/startup.sh

    It complains about: su: /bin/nologin: No such file or directory

    How do I execute the command with proper permissions?

    Thanks in advance!

    P.S. I'm trying to reverse engineer the configuration and it's production. So I have to be delicate...