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

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."
    ;;
…

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'

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.