Dienste unter definiertem User starten

rMarkus

Chuck The Plant
Hallo,

ich moechte einen Dienst "dienst" mit einem bestimmten User "dienst_user" starten.

Folgende Startprozedur habe ich im /usr/local/etc/rc.d als dienst.sh erstellt:
Code:
#!/bin/sh
#
# PROVIDE: dienst
# REQUIRE: DAEMON

#
# DO NOT CHANGE THESE DEFAULT VALUES HERE
# SET THEM IN THE /etc/rc.conf FILE
#
dienst_enable=${dienst_enable-"NO"}
dienst_flags=${dienst_flags-""}
dienst_pidfile=${dienst_pidfile-"/var/run/dienst.pid"}

. /etc/rc.subr

name="dienst"
rcvar=`set_rcvar`
# command="/usr/local/bin/dienst"
command='su - dienst_user -c "/usr/local/bin/dienst &"'

load_rc_config $name

pidfile="${utility_pidfile}"

start_cmd="echo \"Starting ${name}.\"; /usr/bin/nice -5 ${command} ${utility_flags} ${command_args}"

run_rc_command "$1"

Dann habe ich in der /etc/rc.conf.local mit "dienst_enable="YES" den Dienst eingeschaltet.

Ich bin dabei wie im Handbuch vorgegangen:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/configtuning-starting-services.html
Dort wird jedoch nicht dargestellt, wie man den Prozess als anderer User ausführt.

Daher halte ich das oben nicht für ganz sauber, da der Prozess "su" bestehen bleibt und das Kaufmannsund zur Prozessgenerierung nicht besonders geeignet ist.

Gibt es eine bessere Möglichkeit?
 
markus.r said:
Gibt es eine bessere Möglichkeit?
Nein. Diese Möglichkeit ist eigentlich gut genug. Die rc-Skripte von FreeBSD sehen sogar vor, dass man Dienste unter anderen Benutzern laufen lassen möchte. Verwendet man nämlich beispielsweise die Zeile ${dienst}_user="hans" in der /etc/rc.conf, dann würde der Dienst auch unter der UID von hans gestartet werden, sofern im Startskript des Dienstes start_cmd nicht umdefiniert wurde, so wie in deinem Beispiel. Dieser vorgegebene Mechanismus wird auch mit nichts anderem als su umgesetzt; sinngemäß etwa so:

Code:
$command="su -m $user -c 'sh -c \"$command\"'"

Gruß Björn
 
Vielen Dank für den Hinweis.

den speziellen Dienst starte ich in der rc.conf.local mit ' dienst_enable="YES" ' .
Dem habe ich dann ' dienst_user="hans" ' hinzugefügt.
Aber egal ob ich das in die rc.conf, rc.conf.local oder in das Startskript /usr/local/etc/rc.d/dienst.sh schreibe, der Dienst startet weiterhin als Root.

PS: Ausserdem soll der Dienst asynchron gestartet werden, deswegen habe ich dem 'command' ein Kaufmannsund "&" angehaengt.
Das sieht mir auch nicht elegant aus und vielleicht ist das die Ursache meines Problems.
 
Back
Top