View previous topic :: View next topic |
Author |
Message |
samsonus Apprentice
Joined: 18 Jan 2005 Posts: 225 Location: Siegen
|
Posted: Fri May 12, 2006 9:54 am Post subject: Daemon als anderen Benutzer starten |
|
|
Hallo zusammen,
wie kann ich zB die Daemonen exim und imap als anderen user laufen lassen?
Unterscheidet sich das von Gentoo zu Debian?
Gruss samsonus |
|
Back to top |
|
|
schmutzfinger Veteran
Joined: 26 Oct 2003 Posts: 1287 Location: Dresden/Germany
|
Posted: Fri May 12, 2006 1:36 pm Post subject: |
|
|
In beiden System Code: | start-stop-daemon -c | im initscript /etc/init.d/ ändern. |
|
Back to top |
|
|
samsonus Apprentice
Joined: 18 Jan 2005 Posts: 225 Location: Siegen
|
Posted: Fri May 12, 2006 2:08 pm Post subject: |
|
|
hmm, also ich hatte bevor ich gepostet hab, natürlich in der /etc/init.d/ nachgeguckt, allerdings nirgends die stelle gefunden, wo ich den user eintragen kann.
Code: |
#! /bin/sh
# /etc/init.d/exim4
#
# Written by Miquel van Smoorenburg <miquels@drinkel.ow.org>.
# Modified for Debian GNU/Linux by Ian Murdock <imurdock@gnu.ai.mit.edu>.
# Modified for exim by Tim Cutts <timc@chiark.greenend.org.uk>
# Modified for exim4 by Andreas Metzler <ametzler@downhill.at.eu.org>
set -e
if [ -n "$EX4DEBUG" ]; then
echo "now debugging $0 $@"
set -x
fi
#read default file
QUEUERUNNER='combined'
QUEUEINTERVAL='30m'
UPEX4OPTS=''
PIDFILE="/var/run/exim4/exim.pid"
QRPIDFILE="/var/run/exim4/eximqr.pid"
[ -f /etc/default/exim4 ] && . /etc/default/exim4
upex4conf() {
UPEX4CONF="update-exim4.conf"
OLDIFS="$IFS"
IFS=:
for p in $PATH; do
if [ -x "$p/$UPEX4CONF" ]; then
IFS="$OLDIFS"
$p/$UPEX4CONF $UPEX4OPTS
return 0
fi
done
IFS="$OLDIFS"
}
# Exit if exim runs from /etc/inetd.conf
if [ -f /etc/inetd.conf ] && grep -E -q "^ *([0-9.]+:)?smtp" /etc/inetd.conf
then
upex4conf
exit 0
fi
DAEMON=/usr/sbin/exim4
NAME=exim4
##test -x $DAEMON || exit 0
test -x /usr/lib/exim4/exim4 || exit 0
start_exim()
{
case ${QUEUERUNNER} in
combined)
start-stop-daemon --start --pidfile "$PIDFILE" \
--exec $DAEMON -- -bd -q${QFLAGS}${QUEUEINTERVAL} \
${COMMONOPTIONS} ${QUEUERUNNEROPTIONS} ${SMTPLISTENEROPTIONS}
;;
separate)
start-stop-daemon --start --pidfile "$PIDFILE" \
--exec $DAEMON -- -bd ${SMTPLISTENEROPTIONS} ${COMMONOPTIONS}
start-stop-daemon --start --pidfile "$QRPIDFILE" \
--exec $DAEMON -- -oP "$QRPIDFILE" \
-q${QFLAGS}${QUEUEINTERVAL} ${QUEUERUNNEROPTIONS} ${COMMONOPTIONS}
;;
queueonly)
start-stop-daemon --start --pidfile "$QRPIDFILE" \
--exec $DAEMON -- -oP "$QRPIDFILE" \
-q${QFLAGS}${QUEUEINTERVAL} ${QUEUERUNNEROPTIONS} ${COMMONOPTIONS}
;;
no|ppp)
start-stop-daemon --start --pidfile "$PIDFILE" \
--exec $DAEMON -- -bd ${SMTPLISTENEROPTIONS}
;;
nodaemon)
;;
esac
}
stop_exim()
{
# we try to kill eximqr and exim SMTP listener, no matter what
# ${QUEUERUNNER} is set to, we could have switched since starting.
[ -f "$QRPIDFILE" ] && \
start-stop-daemon --stop --pidfile "$QRPIDFILE" \
--oknodo --retry 30 --exec $DAEMON
[ -f "$PIDFILE" ] && \
start-stop-daemon --stop --pidfile "$PIDFILE" \
--oknodo --retry 30 --exec $DAEMON
rm -f "$QRPIDFILE" "$PIDFILE"
}
reload_exim()
{
case ${QUEUERUNNER} in
combined|no|ppp)
start-stop-daemon --stop --pidfile "$PIDFILE" \
--signal 1 --exec $DAEMON
;;
separate)
start-stop-daemon --stop --pidfile "$PIDFILE" \
--signal 1 --exec $DAEMON
start-stop-daemon --stop --pidfile "$QRPIDFILE" \
--signal 1 --exec $DAEMON
;;
esac
}
kill_all_exims()
{
SIG="${1:-TERM}"
for pid in $(pidof $NAME); do
if [ "$(readlink /proc/$pid/root)" == "/" ]; then
kill -$SIG $pid
fi
done done
}
# check for valid configuration file
isconfigvalid()
{
if ! $DAEMON -bV > /dev/null ; then
echo
echo "Warning! Invalid configuration file for $NAME. Exiting." 1>&2
exit 1
fi
}
case "$1" in
start)
echo -n "Starting MTA: "
# regenerate exim4.conf
upex4conf
isconfigvalid
start_exim
echo "$NAME."
;;
stop)
echo -n "Stopping MTA: "
stop_exim
echo "$NAME."
;;
restart)
echo -n "Restarting MTA: "
# regenerate exim4.conf
upex4conf
isconfigvalid
stop_exim
sleep 2
start_exim
echo "$NAME."
;;
reload|force-reload)
echo "Reloading $NAME configuration files"
# regenerate exim4.conf
upex4conf
isconfigvalid
reload_exim
;;
status)
exiwhat
;;
force-stop)
kill_all_exims $2
;;
*)
echo "Usage: $0 {start|stop|restart|reload|status}"
exit 1
;;
esac
exit 0
|
und so läuft der dienst
Code: |
:/etc/init.d# ps xauw | grep exim
Debian- 29061 0.0 0.0 8696 2120 ? Ss 15:25 0:00 /usr/sbin/exim4 -bd -q30m
root 26784 0.0 0.0 1540 456 pts/0 R+ 16:07 0:00 grep exim
|
bin ein wenig ratlos... |
|
Back to top |
|
|
samsonus Apprentice
Joined: 18 Jan 2005 Posts: 225 Location: Siegen
|
Posted: Fri May 12, 2006 3:17 pm Post subject: |
|
|
ich hab jetzt folgendes abgeändert:
Code: |
start_exim()
{
case ${QUEUERUNNER} in
combined)
start-stop-daemon -c 8:8 --start --pidfile "$PIDFILE" \
--exec $DAEMON -- -bd -q${QFLAGS}${QUEUEINTERVAL} \
${COMMONOPTIONS} ${QUEUERUNNEROPTIONS} ${SMTPLISTENEROPTIONS}
;;
separate)
start-stop-daemon -c 8:8 --start --pidfile "$PIDFILE" \
--exec $DAEMON -- -bd ${SMTPLISTENEROPTIONS} ${COMMONOPTIONS}
start-stop-daemon -c 8:8 --start --pidfile "$QRPIDFILE" \
--exec $DAEMON -- -oP "$QRPIDFILE" \
-q${QFLAGS}${QUEUEINTERVAL} ${QUEUERUNNEROPTIONS} ${COMMONOPTIONS}
;;
queueonly)
start-stop-daemon -c 8:8 --start --pidfile "$QRPIDFILE" \
--exec $DAEMON -- -oP "$QRPIDFILE" \
-q${QFLAGS}${QUEUEINTERVAL} ${QUEUERUNNEROPTIONS} ${COMMONOPTIONS}
;;
no|ppp)
start-stop-daemon -c 8:8 --start --pidfile "$PIDFILE" \
--exec $DAEMON -- -bd ${SMTPLISTENEROPTIONS}
;;
nodaemon)
;;
esac
}
|
also so, dass er den Benutzer wechseln sollte. Allerdings kann er so den dienst nicht starten, da ich die fehlermeldung "Permission denied" bekomme.
wem fehlen da welche rechte? muss der mail user ( noch was haben?
gruss samsonus |
|
Back to top |
|
|
Finswimmer Bodhisattva
Joined: 02 Sep 2004 Posts: 5467 Location: Langen (Hessen), Germany
|
Posted: Fri May 12, 2006 3:24 pm Post subject: |
|
|
Geraten: +x, denn der user muss es ausführen können.
Tobi _________________ Bitte auf Rechtschreibung, korrekte Formatierung und Höflichkeit achten!
Danke |
|
Back to top |
|
|
schmutzfinger Veteran
Joined: 26 Oct 2003 Posts: 1287 Location: Dresden/Germany
|
Posted: Fri May 12, 2006 3:30 pm Post subject: |
|
|
Der MTA muss als root laufen, oder zumindest Teile davon. Denn er muss in die Mailboxen aller Nutzer schreiben können. Wenn dein Rechner keine Mail empfängt sondern nur routet, dann macht deine Idee Sinn. Ansonsten verlasse dich einfach darauf was die Distri vorschreibt. |
|
Back to top |
|
|
sschlueter Guru
Joined: 26 Jul 2002 Posts: 578 Location: Dortmund, Germany
|
Posted: Sat May 13, 2006 1:16 pm Post subject: |
|
|
Ein MTA muss - wie viele andere Dienste auch - als root gestartet werden.
Um zu vermeiden, den Dienst vollständig und dauerhaft mit Root-Rechten laufen zu lassen, setzen die Dienste hauptsächlich je eine von zwei Techniken ein:
(1) Abgegeben der Root-Rechte nach dem Start. Dies ist möglich, wenn der Dienst nur einmal zu Beginn Aktionen ausführen muss, für die Root-Rechte benötigt werden (etwa Lauschen auf einem Port < 1024 oder Einrichten eines Tun/Tap-Devices). Beispiele: dnsmasq und openvpn.
(2) Wenn (1) nicht möglich ist, weil auch später immer wieder root-Rechte benötigt werden, werden in der Regel mindestens zwei Prozesse eingesetzt, ein priviligierter, der mit Root-Rechten läuft und mindestens ein nicht-priviligierter, der unter einer anderen Benutzerkennung läuft. Wenn ein Dienst auch ein Benutzerlogin zulässt, und dann die Benutzerkennung zu der des eingeloggten benutzers wechselt, die es in der Regel drei verschiedene Prozesse, nämlich den priviligierten, den nicht-priviligierten und den benutzerspezifischen Prozess. Die Art der Zusammenarbeit
dieser Prozesse kann sehr unterschiedlich sein, aber die Grundidee der Trennung der Rechte in verschiedene Prozesse ist die gleiche. Beispiele: apache, dovecot, openssh, postfix, vsftpd, openntpd.
Und normalerweise muss man /etc/init.d/dienst auch überhaupt nicht editieren.
(Kommandozeilen)optionen für den Aufruf des Dienstes lassen sich häufig in /etc/conf.d/dienst eintragen. Oft lässt sich die zu verwendende Benutzerkennung für den nicht-priviligierten Prozess dort eintragen.
Oft kann man diese Benutzerkennung aber auch in der Haupt-Konfigurationsdatei (oft /etc/dienst.conf) eintragen.
Aber notwendig ist es in der Regel nicht, die verwendete Benutzerkennung zu ändern.
Der einzige Grund, den ich mir vorstellen könnte, bei dem es Sinn machen würde, eine andere Benutzerkennung zu setzen, ist, wenn mehr als ein dienst diesselbe benutzerkennung für den nicht-priviligierten Prozess (etwa nobody) verwendet. Aber die Dienste verwenden in der Regel sowieso eine für diesen Dienst spezifische Benutzerkennung für den nicht-priviligierten Prozess anstelle von nobody. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|