init.d Startscript soll Programme nicht als root starten
-
Hallo,
ich habe einen Webserver bei dem ich mehrere Programme/Scripte starten will.
1. Ich habe allen Verzeichnissen und Dateien im Webserververzeichniss den
Benutzer x.y zugeteilt (nicht root)2. Im Verzeichnis init.d startet ein Shell-Startscript (daemon) meine
benötigten Programme/Scripte. Leider werden alle Programme ja als root
gestartet.
d.h. Dateien die wiederum von den Programmen erzeugt werden haben ebenfalls
Benutzer root.Nun meine Fragen:
1. wie vergebe ich den Zugriff(welche rechte) für den Webserverbereich
"richtig"2. wie kann ich mein Startscript (daemon) veranlassen alle meine
Programme/Scripte mit bestimmten Rechten zu starten.Danke
-
worst_case schrieb:
2. wie kann ich mein Startscript (daemon) veranlassen alle meine
Programme/Scripte mit bestimmten Rechten zu starten.Du könntest z.B. im Startskript statt 'daemon' 'su user -c daemon' schreiben.
-
Hallo,
du meinst etwa das ich im meinem startscript schreibe
su user -c programm1
su user -c programm2
usw.Hab ich das so richtig verstanden ?
Danke
-
Ja.
-
worst_case schrieb:
Hallo,
du meinst etwa das ich im meinem startscript schreibe
su user -c programm1
su user -c programm2
usw.Hab ich das so richtig verstanden ?
Danke
Die Skirpte von /etc/init.d werden sowieso von root gestartet, und da root kein Passwort braucht, um su zu benutzen, kann man das anwenden.
-
Hallo,
ich will ja genau das Gegenteil.
Das Script im init.d wird mit root-rechten gestartet.
In diesem Script werden weitere Programme/scripte gestartet.
Jedoch sollen diese nicht mit root-rechten sondern mit user-rechten starten.
-
eben, benutze su username -c binaryfile
-
Hallo,
hier mein Shell-Script.
Warum funktioniert die Schleife mit dem Programmstart nicht ?#! /bin/sh # ### BEGIN INIT INFO # Provides: visual # Required-Start: $remote_fs $syslog # X-UnitedLinux-Should-Start: setserial hotplug # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 5 # Default-Stop: 0 1 6 # Description: starting and stopping the visual Daemon ### END INIT INFO programme=( "su lxuser -c /srv/www/htdocs/alert/find_alert_data" "su lxuser -c /srv/www/htdocs/alert/alert" "su lxuser -c /srv/www/htdocs/betriebsmeldungen/status" "su lxuser -c /srv/www/htdocs/diagramm/save_data" ) for (( s=0; s < (${#programme[*]}); s++)); do test -x "${programme[s]}" || echo "Fehler bei Programm:${programme[s]}" exit 5 done . /etc/rc.status rc_reset case "$1" in start) echo "Starting Visual-System" for (( s=0; s < (${#programme[*]}); s++)); do echo -n "Starting ${programme[s]}" startproc "${programme[s]}" rc_status -v done ;; stop) echo "Shutting down Visual-System " for (( s=0; s < (${#programme[*]}); s++)); do echo -n "Shutting down ${programme[s]}" killproc -TERM ${programme[s]} rc_status -v done ;; try-restart) $0 status >/dev/null && $0 restart rc_status ;; restart) $0 stop sleep 1 $0 start rc_status ;; status) echo "Checking for visual: " for (( s=0; s < (${#programme[*]} -1 ); s++)); do echo -n "Checking for : ${programme[s]} " checkproc ${programme[s]} rc_status -v done ;; *) echo "Usage: $0 {start|stop|try-restart|restart|status}" exit 1 ;; esac rc_exit
Alle Pfade stimmen und die Programmnamen auch. Trotzdem kann das Script die Programme nicht starten.
Danke
worst_case