Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Ubuntu Server 12.04

On a remote server that I ssh into I have set up a special user with:

sudo adduser --system --disabled-login --disabled-password --group suser

to run some maintenance functions. On occasions I su into a login session for suser with:

sudo su -l suser -s /bin/bash

to do some tasks... however I particularly want to be able to run some git commands via:

sudo su suser -c <COMMAND>

from my real user and no login to the suser.

Unfortunately I haven't been able to determine HOW I go about that. I have tried the only ways that makes sense to me:

sudo su suser -c git clone
sudo su suser -c "git clone"
   or even
sudo su suser -c mkdir /home/suser/test
sudo su suser -c "mkdir /home/suser/test"

but nothing happens and I return to prompt. Can anyone assist or explain why this isn't possible?

share|improve this question
up vote 5 down vote accepted

The problem is that suser was created with /bin/false as its default shell. Therefore, when you try to run commands as suser through sudo, the system attempts to run them using /bin/false/ which is not a real shell and fails. You can either set a shell for suser or you can specify it on the command line when you run sudo. Alternatively, you can use sudo's -u option.

  1. Use -u:

    sudo -u suser mkdir /home/suser/foo

    This works because by default, sudo uses /bin/bash (or whatever you have set the default $SHELL to be). Therefore, it will execute a command as suser but using bash, so the command is correctly executed.

  2. Set suser's default shell:

    sudo chsh suser 

    Enter /bin/bash (or whatever you prefer) in the prompt that will appear. You should now be able to launch commands as suser:

    sudo su suser -c "mkdir /home/suser/test"
  3. Set the shell explicitly:

    sudo su suser -s /bin/bash -c "mkdir /home/suser/test"
share|improve this answer
That's it... facepalm I was under the mistaken impression that since I wasn't doing -l, that I was keeping the current shell and environment. Thank you! – JDex Jun 19 '13 at 12:34

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.