PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : su : cannot execute binary file



GreenShadow
26.03.06, 19:41
Hallo zusammen.

Ich möchte auf meiner Slackware Box per rc.local die Services für den IRCd starten, allerdings sollen diese nicht als User:root sondern als User:irc laufen.

Ich packe also folgende Zeile in meine rc.local

su irc /home/irc/kickservices/bin/kickservices

und staune, warum das nicht rennt:


root@server:~# su irc /home/irc/kickservices/bin/kickservices
/home/irc/kickservices/bin/kickservices: /home/irc/kickservices/bin/kickservices: cannot execute binary file

Weiß jemand, warum?
Wie startet ihr auf euren Servern Prozesse beim Boot unter anderen Benutzerkonten? :)

Ah...
Und bevor jemand frägt...

root@server:~# ls -lisa /home/irc/kickservices/bin/kickservices
152098 957 -rwxr-xr-- 1 irc users 976365 2006-03-23 17:40 /home/irc/kickservices/bin/kickservices*


root@server:~# file /home/irc/kickservices/bin/kickservices
/home/irc/kickservices/bin/kickservices: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), not stripped

Danke für eure Antworten :)

rkauskh
26.03.06, 19:56
Hi

Homeverzeichnis auf extra Partition und ohne "exec" gemountet?

GreenShadow
26.03.06, 19:59
Danke für den Tip, ist leider nicht der Fall :(

Seblxuser
26.03.06, 20:05
braucht man bei init scripten überhaupt su? ich meine das läuft doch schon mit root-rechten...

GreenShadow
26.03.06, 20:11
Ja.
Mr. Init soll die Services ja nicht als User:root sondern als User:irc starten. :)

Seblxuser
26.03.06, 20:52
sorry hab das irc übersehen...

GreenShadow
31.03.06, 02:03
Okay, ein ähnliches Problem wird *HIER* (http://linuxinfoserver.de/forums/showthread.php?t=50118) geschildert, dort leider auch ohne Ergebnis. Vieleicht lieferte aber genau dieser Beitrag dort die nötige Inspiration um auf die Lösung zu kommen :)

Die Manpage von su ist nämlich garnicht so aussagekräftig, dafür aber die der Bash:



-c Kommandofolge

Die Bash liest und startet die Kommandos aus "Kommandofolge", welche als eine einzelne Zeichenkette anzugeben ist. Alles, was der Zeichenkette folgt, wird als Argument dem letzten Kommando der Kommandofolge übergeben:

user@sonne> bash date -u
date: /bin/date: cannot execute binary file
user@sonne> bash -c date -u
Sam Jul 8 10:16:17 MEST 2000

(Wird der Bash ein Argument übergeben, das keine Option ist, so interpretiert sie das Argument als Datei, die die Kommandos enthält. »date« ist natürlich keine Datei, die Kommandos beinhaltet, also beschwert sich die Bash...). Die Bash in Verbindung mit »-c« arbeitet als nicht-interaktive Shell.


Quelle : http://www.linuxfibel.de/bash.htm

Folglich packt man hinter su ein -c :


su - irc -c '/home/irc/kickservices/bin/kickservices'
...rennt perfekt :)