Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
Daemon als anderen Benutzer starten
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German)
View previous topic :: View next topic  
Author Message
samsonus
Apprentice
Apprentice


Joined: 18 Jan 2005
Posts: 225
Location: Siegen

PostPosted: Fri May 12, 2006 9:54 am    Post subject: Daemon als anderen Benutzer starten Reply with quote

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
View user's profile Send private message
schmutzfinger
Veteran
Veteran


Joined: 26 Oct 2003
Posts: 1287
Location: Dresden/Germany

PostPosted: Fri May 12, 2006 1:36 pm    Post subject: Reply with quote

In beiden System
Code:
start-stop-daemon -c
im initscript /etc/init.d/ ändern.
Back to top
View user's profile Send private message
samsonus
Apprentice
Apprentice


Joined: 18 Jan 2005
Posts: 225
Location: Siegen

PostPosted: Fri May 12, 2006 2:08 pm    Post subject: Reply with quote

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
View user's profile Send private message
samsonus
Apprentice
Apprentice


Joined: 18 Jan 2005
Posts: 225
Location: Siegen

PostPosted: Fri May 12, 2006 3:17 pm    Post subject: Reply with quote

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 (8) noch was haben?

gruss samsonus
Back to top
View user's profile Send private message
Finswimmer
Bodhisattva
Bodhisattva


Joined: 02 Sep 2004
Posts: 5467
Location: Langen (Hessen), Germany

PostPosted: Fri May 12, 2006 3:24 pm    Post subject: Reply with quote

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
View user's profile Send private message
schmutzfinger
Veteran
Veteran


Joined: 26 Oct 2003
Posts: 1287
Location: Dresden/Germany

PostPosted: Fri May 12, 2006 3:30 pm    Post subject: Reply with quote

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
View user's profile Send private message
sschlueter
Guru
Guru


Joined: 26 Jul 2002
Posts: 578
Location: Dortmund, Germany

PostPosted: Sat May 13, 2006 1:16 pm    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) All times are GMT
Page 1 of 1

 
Jump to:  
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