Bagaimana saya bisa membuat daemon / init ini berjalan sebagai pengguna non root?

19

Saya memiliki skrip init untuk memulai daemon. Masalahnya itu berjalan sebagai root. Saya ingin dijalankan sebagai pengguna yang disebut "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
CT.
sumber
2
Ubah $DAEMON $DAEMON_OPTSkesu - deploy -c "$DAEMON $DAEMON_OPTS"
daisy
Berhati-hatilah untuk tidak meluncurkan deamon menggunakan perintah "service" saat Anda menguji karena opsi chuid tidak akan berpengaruh dan proses akan berjalan sebagai root.
pasqal
Apakah semua skrip di init.d dipanggil setelah kernel sudah mengetahui pengguna di sistem?
ransh

Jawaban:

18

Gunakan start-stop-daemonutilitas untuk memulai daemon Anda. Lewati opsi -c(atau --chuid) untuk menjalankannya sebagai pengguna yang berbeda. Anda akan menemukan beberapa contoh di /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."
    ;;
…
Gilles 'SANGAT berhenti menjadi jahat'
sumber
Apakah semua skrip init.d dipanggil setelah kernel sudah mengetahui semua pengguna dalam sistem?
ransh
@ Transh, saya tidak yakin apa yang Anda minta. Kernel tidak benar-benar "tahu" pengguna: sejauh yang menyangkut, pengguna hanya angka, dan tidak peduli apa nomornya kecuali bahwa proses yang berjalan sebagai pengguna 0 dapat melakukan banyak hal yang tidak dapat dilakukan oleh pengguna lain .
Gilles 'SO- stop being evil'
-1

Di Ubuntu Anda bisa menggunakan hanya

sudo -u deploy $DAEMON $DAEMON_OPTS

Роман Коптев
sumber
Mengapa menambahkan sudo ketika su atau --chuid ada? Bagaimana jika sudo tidak diinstal?
Jeff Schaller
2
@JeffSchaller sudo diinstal pada Ubuntu
Роман Коптев