26

I have an init script to kick off a daemon. The problem is it runs as root. I would like it to run as a user called "deploy". Ubuntu 12.04

#! /bin/sh

# File: /etc/init.d/unicorn

### BEGIN INIT INFO
# Provides:          unicorn
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the unicorn web server
# Description:       starts unicorn
### END INIT INFO

DAEMON=/usr/local/bin/unicorn_rails
DAEMON_OPTS="-c /var/www/current/config/unicorn.rb -D"
NAME=unicorn
DESC="Unicorn"
PID=/var/www/current/shared/pid/unicorn.pid

case "$1" in
  start)
    echo -n "Starting $DESC: "
    $DAEMON $DAEMON_OPTS
    echo "$NAME."
    ;;
  *)
    echo "Usage: $NAME {start|stop|restart|reload}" >&2
    exit 1
    ;;
esac

exit 0
3
  • 2
    Change $DAEMON $DAEMON_OPTS to su - deploy -c "$DAEMON $DAEMON_OPTS"
    – daisy
    Commented Dec 1, 2012 at 9:56
  • Beware not to launch the deamon using the "service" command while you are testing since the chuid option will have no effect and the process will run as root.
    – pasqal
    Commented Sep 15, 2015 at 14:49
  • Are all scripts in init.d called after kernel already knows the users in system ?
    – ransh
    Commented Mar 19, 2017 at 10:06

2 Answers 2

24

Use the start-stop-daemon utility to start your daemon. Pass the -c (or --chuid) option to run it as a different user. You'll find some examples in /etc/init.d/*.

case $1 in
  start)
    echo -n "Starting $DESC: "
    start-stop-daemon --start --chuid deploy --pidfile "$PID" --start --exec "$DAEMON" -- $DAEMON_OPTS
    echo "$NAME."
    ;;
…
2
  • Are all init.d scripts called after kernel already knows all users in system ?
    – ransh
    Commented Mar 19, 2017 at 10:07
  • @ransh I'm not sure what you're asking. The kernel does not really “know” users: as far as it's concerned, a user is just a number, and it doesn't care what the number is except that processes running as user 0 can do many things that other users can't. Commented Mar 19, 2017 at 21:52
-1

On Ubuntu you can use just

sudo -u deploy $DAEMON $DAEMON_OPTS

2
  • 1
    Why add sudo when su or --chuid exists? What if sudo is not installed?
    – Jeff Schaller
    Commented May 8, 2016 at 15:05
  • 3
    @JeffSchaller sudo is installed on Ubuntu Commented May 8, 2016 at 21:45

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .