Service (init.d) als !root starten
Hi Folks, ich möchte einen Service, der beim booten startet als www und nicht als root starten. Es geht konkret um ein Python-Script, dass dann als Daemon laufen soll #! /bin/bash WD=/home/users/www.example.com/myproject PIDFILE=${WD}/app.pid PYTHON=/usr/bin/python2.4 SOCKET=/tmp/app.sock case "$1" in start) $PYTHON $WD/manage.py runfcgi socket=$SOCKET daemonize=true method=prefork pidfile=$PIDFILE sleep 3 chmod a+rwx $SOCKET ;; stop) kill `cat $PIDFILE` ;; restart) $0 stop && $0 start ;; *) echo "Usage: $0 {start|stop|restart}" ;; esac exit 0 Wie geht das? Bin für jeden Tipp dankbar Timothy -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo Timothy,
ich möchte einen Service, der beim booten startet als www und nicht als root starten. Es geht konkret um ein Python-Script, dass dann als Daemon laufen soll
das sind eigentlich Linux-Grundkenntnisse. Du suchst hier "sudo". # man sudo Weitere Infos, Tutorials, HowTo bitte mit Google bemühen. Danke! http://www.google.de/linux?hl=de&q=sudo+tutorial&btnG=Suche&meta= http://www.google.de/linux?hl=de&q=sudo+howto&btnG=Suche&meta= -- Gruß Sebastian - openSUSE Member (Freespacer) http://de.opensuse.org/Benutzer:Freespacer Wichtiger Hinweis zur openSUSE Mailing Liste: http://de.opensuse.org/OpenSUSE_mailing_list_netiquette -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Sonntag, 28. März 2010 15:54:49 schrieb Sebastian Siebert:
das sind eigentlich Linux-Grundkenntnisse.
Du suchst hier "sudo". # man sudo Das glaube ich eher nicht.
www hat kein Password und kann sich auch nicht anmelden. Deshalb denke ich, das sudo nicht der richtige Ansatz ist. Vielleicht auch falsch von mir im anderen Post dargestellt: Klar, dass root beim Bootprozess das Script startet - aber das Script soll dann mit den Rechten von www laufen, nicht mit root-Rechten z.B. wird lighttpd als www gestartet. Timothy -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Sun, 28 Mar 2010, 16:32:10 +0200, Timothy Kesten wrote:
Am Sonntag, 28. März 2010 15:54:49 schrieb Sebastian Siebert:
das sind eigentlich Linux-Grundkenntnisse.
Du suchst hier "sudo". # man sudo Das glaube ich eher nicht.
www hat kein Password und kann sich auch nicht anmelden. Deshalb denke ich, das sudo nicht der richtige Ansatz ist.
Probier's doch einfach mal aus: # sudo -u wwwrun id uid=30(wwwrun) gid=8(www) groups=8(www) Geht doch! Cheers. l8er manfred -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo Timothy Timothy Kesten schrieb:
Am Sonntag, 28. März 2010 15:54:49 schrieb Sebastian Siebert:
das sind eigentlich Linux-Grundkenntnisse.
Du suchst hier "sudo". # man sudo Das glaube ich eher nicht.
www hat kein Password und kann sich auch nicht anmelden. Deshalb denke ich, das sudo nicht der richtige Ansatz ist.
Vielleicht auch falsch von mir im anderen Post dargestellt: Klar, dass root beim Bootprozess das Script startet - aber das Script soll dann mit den Rechten von www laufen, nicht mit root-Rechten
z.B. wird lighttpd als www gestartet.
ich mach das bei fetchmail z.B. so: su andereruser -c "command arg arg arg ..." & Manfred -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Sonntag, 28. März 2010 16:46:16 schrieb Manfred Kreisl:
ich mach das bei fetchmail z.B. so:
su andereruser -c "command arg arg arg ..." & Mag sein, dass das so bei z.B. fetchmail funktioniert. Bei mir und dem benutzten Befehl geht es nicht.
su www -c "/samba/django/heller/manage.py runfcgi socket=/tmp/heller.sock daemonize=true method=prefork pidfile=/tmp/django.pid" & bringt zwar su in den Hintergrund - aber der eigentliche Befehl, Installation von "manage.py runfcgi ... " geht nicht. Timothy -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Manfred Kreisl schrieb:
Hallo Timothy
ich mach das bei fetchmail z.B. so:
su andereruser -c "command arg arg arg ..." &
Nachdem ich mir den Thread noch mal durchgelesen habe, sollte mit dem su-Befehl genau das erreicht werden was du willst. Es kann aber u.U. sein, das Du noch das Environment des Users sourcen mußt, wenn dies dann nicht schon in Deinem Script geschieht.. -- Gruß Axel ------------------------------ => einen Server härten? google mal nach Stahl härten oder was meinst Du mit härten? Aus: http://www.administrator.de/index.php?content=69906 -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Sonntag, 28. März 2010 18:07:35 schrieb Axel Birndt:
Manfred Kreisl schrieb:
Hallo Timothy
ich mach das bei fetchmail z.B. so:
su andereruser -c "command arg arg arg ..." &
Nachdem ich mir den Thread noch mal durchgelesen habe, sollte mit dem su-Befehl genau das erreicht werden was du willst. Es kann aber u.U. sein, das Du noch das Environment des Users sourcen mußt, wenn dies dann nicht schon in Deinem Script geschieht..
Sorry, aber irgendwie klappt das nicht bzw. reden wir hier aneinander vorbei. Starten kann das Script jeder. root@main# ls -l /etc/init.d/fastcgi -rwxr-xr-x 1 root root 634 28. Mär 18:16 /etc/init.d/fastcgi Und es bekommt dann, bzw. die gestarteten Prozesse bekommen dann die Rechte des jeweiligen Users, der "fastcgi" ausgeführt hat. Die Prozesse beim Boot-Vorgang bekommen, sofern nicht irgendwie anders (wie?) erreicht, die Rechte von root. Ausnahmen bei mir z.B. clamd, squid, lighttpd, hald, git-daemon ... Anscheinend veranlassen diese Programme "intern" das "umbiegen" des Nutzers. Ich möchte jetzt eben auch, dass /usr/bin/python /samba/django/heller/manage.py runfcgi socket=/tmp/heller.sock daemonize=true method=prefork pidfile=/tmp/django.pid mit den Rechten von www läuft. Mit su/sudo komme ich im init-script nicht weiter. Und was ich bisher er"google"d habe - da scheint dies nicht trivial zu sein. Oder ich bin zu blöd. Timothy -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am 28.03.2010 16:32, schrieb Timothy Kesten:
Am Sonntag, 28. März 2010 15:54:49 schrieb Sebastian Siebert:
das sind eigentlich Linux-Grundkenntnisse.
Du suchst hier "sudo". # man sudo Das glaube ich eher nicht.
www hat kein Password und kann sich auch nicht anmelden. Deshalb denke ich, das sudo nicht der richtige Ansatz ist.
Doch ist es. Hast du dich überhaupt mal da informiert oder war das ein Schnellschuss? Passt doch einfach mal dein Init-Skript wie folgt an: # sudo -u www $PYTHON $WD/manage.py runfcgi socket=$SOCKET daemonize=true method=prefork pidfile=$PIDFILE Damit sollte dein Python-Skript auch mit dem gewünschten User laufen. Wenn du dich informiert hättest, dann würdest du da selber drauf kommen. -- Gruß Sebastian - openSUSE Member (Freespacer) http://de.opensuse.org/Benutzer:Freespacer Wichtiger Hinweis zur openSUSE Mailing Liste: http://de.opensuse.org/OpenSUSE_mailing_list_netiquette -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Sonntag, 28. März 2010 17:38:37 schrieb Sebastian Siebert:
Passt doch einfach mal dein Init-Skript wie folgt an: # sudo -u www $PYTHON $WD/manage.py runfcgi socket=$SOCKET daemonize=true method=prefork pidfile=$PIDFILE
Damit sollte dein Python-Skript auch mit dem gewünschten User laufen.
In meinem Init-Script, welches jetzt so aussieht #!/bin/bash WD=/samba/django/heller PIDFILE=/tmp/django.pid PYTHON=/usr/bin/python SOCKET=/tmp/heller.sock case "$1" in start) echo "Starting service runfcgi" sudo -u www /usr/bin/python /samba/django/manage.py runfcgi socket=/tmp/heller.sock daemonize=true method=prefork pidfile=/tmp/django.pid sleep 3 chmod a+rwx $SOCKET ;; stop) echo "Stopping service runfcgi" kill `cat $PIDFILE` ;; restart) $0 stop && $0 start ;; *) echo "Usage: $0 {start|stop|restart}" ;; esac exit 0 werden die entsprechenden Prozesse nicht angelegt. Nicht mal mit root-Rechten oder was auch immer. Ich habe schon gegoogelt - so simple, wie Du dass hier lösen willst, scheint es nicht zu sein. Timothy -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am 28.03.2010 18:16, schrieb Timothy Kesten:
Am Sonntag, 28. März 2010 17:38:37 schrieb Sebastian Siebert:
Passt doch einfach mal dein Init-Skript wie folgt an: # sudo -u www $PYTHON $WD/manage.py runfcgi socket=$SOCKET daemonize=true method=prefork pidfile=$PIDFILE
Damit sollte dein Python-Skript auch mit dem gewünschten User laufen.
In meinem Init-Script, welches jetzt so aussieht [...] echo "Starting service runfcgi" sudo -u www /usr/bin/python /samba/django/manage.py runfcgi socket=/tmp/heller.sock daemonize=true method=prefork pidfile=/tmp/django.pid [...] werden die entsprechenden Prozesse nicht angelegt. Nicht mal mit root-Rechten oder was auch immer. Ich habe schon gegoogelt - so simple, wie Du dass hier lösen willst, scheint es nicht zu sein.
Dann hat das Python-Skript nicht mehr genügend Rechte für seine weitere Arbeit. z.B. die Rechte in den Verzeichnissen (lesen, schreiben, auführen). Siehe mögliche Fehlerausgaben oder Logdateien, die vom Python-Skript erzeugt werden oder ggfs. mal überprüfen ob die übergebenen Parameter an das Python-Skript korrekt sind. sudo jedoch funktioniert hier einwandfrei. Da muss du leider an einer anderen Stelle suchen. http://www.google.de/search?q=django+%22sudo+-u+www%22 -- Gruß Sebastian - openSUSE Member (Freespacer) http://de.opensuse.org/Benutzer:Freespacer Wichtiger Hinweis zur openSUSE Mailing Liste: http://de.opensuse.org/OpenSUSE_mailing_list_netiquette -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
sudo jedoch funktioniert hier einwandfrei.
Ergänzung, um meine These zu untermauern: Folgendes Mini-Skript in eine Datei test.sh speichern und ausführbar machen: ------ Start: test.sh ------------ #!/bin/bash echo "Ich bin das Skript: $0" echo "Folgende Argumente wurden übergeben: $@" echo "Skript wird als `whoami` ausgeführt" ----- Ende: test.sh ------------- Skript ausführbar machen: chmod 755 test.sh Sudo ausführen: # sudo -u wwwrun ./test.sh parameter1=test1 paramter2=test2 parameter3=test3 Ausgabe: Ich bin das Skript: ./test.sh Folgende Argumente wurden übergeben: parameter1=test1 paramter2=test2 parameter3=test3 Skript wird als wwwrun ausgeführt -- Gruß Sebastian - openSUSE Member (Freespacer) http://de.opensuse.org/Benutzer:Freespacer Wichtiger Hinweis zur openSUSE Mailing Liste: http://de.opensuse.org/OpenSUSE_mailing_list_netiquette -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Sonntag, 28. März 2010 18:47:22 schrieb Sebastian Siebert:
Dann hat das Python-Skript nicht mehr genügend Rechte für seine weitere Arbeit. Jepp - das wars.
www konnte den Socket nicht anlegen. Jetzt geht es mit su www -c " ..." Danke - aber warum tut sich google so schwer damit? Habt mir den Sonntag gerettet. Timothy -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Son, 28 Mär 2010, Timothy Kesten schrieb:
Am Sonntag, 28. März 2010 15:54:49 schrieb Sebastian Siebert:
das sind eigentlich Linux-Grundkenntnisse.
Du suchst hier "sudo". # man sudo Das glaube ich eher nicht.
www hat kein Password und kann sich auch nicht anmelden. Deshalb denke ich, das sudo nicht der richtige Ansatz ist.
Vielleicht auch falsch von mir im anderen Post dargestellt: Klar, dass root beim Bootprozess das Script startet - aber das Script soll dann mit den Rechten von www laufen, nicht mit root-Rechten
z.B. wird lighttpd als www gestartet.
RTF /etc/init.d/skeleton. RTFM startproc. startproc -u www "$PYTHON" "$WD/manage.py" runfcgi "socket=$SOCKET" \ daemonize=true method=prefork "pidfile=$PIDFILE" BTW: Sockets gehören nach /var/run, nicht nach /tmp. Leg ggfs. ein Unterverzeichnis an und gib www passende Rechte dort. HTH, -dnh -- The probability of someone watching you is proportional to the stupidity of your action. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Montag, 29. März 2010 03:43:00 schrieb David Haller:
RTF /etc/init.d/skeleton. RTFM startproc. Interessant - führe ich mir mal zu Gemüte
startproc -u www "$PYTHON" "$WD/manage.py" runfcgi "socket=$SOCKET" \ daemonize=true method=prefork "pidfile=$PIDFILE"
startproc gibt es auf meinem System (sidux) nicht. Auch nicht in der Paketdatenbank. Kläre ich aber noch. Aber den start-stop-daemon. Der sollte es doch auch tun, oder?
BTW: Sockets gehören nach /var/run, nicht nach /tmp. Habe ich auch schon mitbekommen. werde ich noch ändern.
HTH, Auf alle Fälle
Danke Timothy -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Mon, March 29, 2010 6:39 am, Timothy Kesten wrote:
Aber den start-stop-daemon. Der sollte es doch auch tun, oder?
Dann lies dessen Manpage. Grüße, Christian -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Montag, 29. März 2010 11:53:03 schrieb Christian Brabandt:
Dann lies dessen Manpage. Aber klar doch. Bevor mir David wieder ein "RTFM" um die Ohren haut ;-)
Gruß Timothy -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi Timothy! On Mo, 29 Mär 2010, Timothy Kesten wrote:
Am Montag, 29. März 2010 11:53:03 schrieb Christian Brabandt:
Dann lies dessen Manpage. Aber klar doch. Bevor mir David wieder ein "RTFM" um die Ohren haut ;-)
Na, er hat dir die passende Stelle ja sogar schon zitiert. Und da ich gerade ein Debian System da habe, habe ich mal ein grep auf mein /etc/init.d Verzeichnis losgelassen: #v+ chrisbra t41:/etc/init.d [1068]% grep "start-stop-daemon.*-\?-c" * fail2ban: start-stop-daemon --start --quiet --chuid root --exec $DAEMON -- \ fetchmail: if start-stop-daemon -S -o -q -p $PIDFILE -x $DAEMON -u $USER -c $USER -- $OPTIONS; then fetchmail: if start-stop-daemon -S -q -p $PIDFILE -x $DAEMON -u $USER -c $USER -- $OPTIONS; then #v- regards, Christian -- Alles Prägnante, was allein an einem Kunstwerke vortrefflich ist, wird nicht anerkannt; alles Fruchtbare und Fördernde wird beseitigt, eine tief umfassende Synthesis begreift nicht leicht jemand. -- Goethe, Maximen und Reflektionen, Nr. 1140 -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Montag, 29. März 2010 19:36:51 schrieb Christian Brabandt:
habe ich mal ein grep auf mein /etc/init.d Verzeichnis losgelassen:
Bei mir: root@main:/etc/init.d# grep "start-stop-daemon.*-\?-c" * clamav-daemon: start-stop-daemon --start -o -c $User --exec $DAEMON clamav-freshclam: start-stop-daemon --start -o -c "$DatabaseOwner" --exec $DAEMON -- -d --quiet Auf alle Fälle werde ich das jetzt so bei mir lösen. Scheint mir die bessere Lösung gegenüber dem "einfachen" su zu sein. Danke nochmals an alle, die sich an der "Diskussion" beteiligt haben. Timothy -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Mon, 29 Mär 2010, Timothy Kesten schrieb:
Am Montag, 29. März 2010 03:43:00 schrieb David Haller:
RTF /etc/init.d/skeleton. RTFM startproc. Interessant - führe ich mir mal zu Gemüte
startproc -u www "$PYTHON" "$WD/manage.py" runfcgi "socket=$SOCKET" \ daemonize=true method=prefork "pidfile=$PIDFILE" startproc gibt es auf meinem System (sidux) nicht. Auch nicht in der Paketdatenbank. Kläre ich aber noch. Aber den start-stop-daemon. Der sollte es doch auch tun, oder?
Jap (hab mal eben online in die manpage geguckt). Da evtl. irreführend les ich sogar mal vor: ==== -c, --chuid username|uid Change to this username/uid before starting the process. ==== -dnh -- "And 1.1.81 is officially BugFree(tm), so if you receive any bug-reports on it, you know they are just evil lies." -- Linus Torvalds -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi Timothy, Sebastian, Sebastian Siebert schrieb:
Hallo Timothy,
ich möchte einen Service, der beim booten startet als www und nicht als root starten. Es geht konkret um ein Python-Script, dass dann als Daemon laufen soll
das sind eigentlich Linux-Grundkenntnisse.
Du suchst hier "sudo". # man sudo
Im Thread "Eingeschränkter Root-Account" hatten wir das Thema vor kurzem ziemlich ausführlich behandelt. Bitte mal die Suchfunktion nutzen. Du liest doch die Liste auch schon ne Weile mit... Da müsste Dir dieser Thread aufgefallen sein. -- Gruß Axel ------------------------------ => einen Server härten? google mal nach Stahl härten oder was meinst Du mit härten? Aus: http://www.administrator.de/index.php?content=69906 -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (7)
-
Axel Birndt
-
Christian Brabandt
-
David Haller
-
Manfred Hollstein
-
Manfred Kreisl
-
Sebastian Siebert
-
Timothy Kesten